MS-DOS 7.1PC/AT互換機版Windows 98に内蔵されていたMS-DOSをハードディスク上で単独起動した場合、インストール先がどの基本パーティションであっても原則的には起動したシステムのインストールされているパーティションが「C:」となる。

連載:IT因縁話「WindowsはなぜCドライブから始まるのか」

  • このエントリーをはてなブックマークに追加

by [2014年2月04日]

MS-DOS 7.1
PC/AT互換機版Windows 98に内蔵されていたMS-DOSをハードディスク上で単独起動した場合、インストール先がどのパーティションであっても原則的には起動したシステムのインストールされているパーティションが「C:」となる。

Windowsパソコンにおいては、「ドライブ名」という概念が存在します。

ハードディスク、SSD、USBメモリ、DVD、と容量があってWindowsで認識できるファイルシステムを持っているディスクは、Windowsではそれぞれにこの「ドライブ名」、具体的にはアルファベットのAからZまで26文字のいずれかを割り当てて、その「ドライブ名」を含むフルパス名を用いてお目当てのファイルにアクセスされることになります。

言い換えれば、Windowsでは「ドライブ」は最大でも同時に26台しか認識できない(=マイコンピュータで表示できない)わけです。

しかも、システムディスクのドライブ名は、現在のWindowsパソコンの場合、よほど変な事をしない限りは「C:」つまりCドライブとなっていて、A・Bの2文字が飛ばされる仕様になっています。

今回は、こうした「ドライブ名」とその周辺事情について考えてみたいと思います。

元々はIBM PCの仕様だった

現在のWindowsパソコンはIBM PC/ATの仕様を今なお一部で踏襲し続けている訳ですが、そんな古くさい生き残り仕様の1つが、ストレージからのOSの起動順を決定する仕組みです。

IBM PCの系譜に連なるパソコンのBIOSでは、一般に以下のような構成を想定されています。

・最大2台のフロッピーディスク
・ハードディスク(台数は任意)

このハードディスクにおいては、ディスク領域の先頭に置かれるOS起動のための特別なデータブロック(Master Boot Record:MBR)の仕様的な制約から基本パーティションと呼ばれる、その名の通り基本となるパーティションはハードディスク1台あたり最大でも4つまでしか設定できない構成となっています。

ここでお気づきの方もおられると思いますが、実はWindowsパソコンで飛ばされるA・Bの2つのドライブ名は、2台のフロッピーディスクドライブ(あるいはその相当品)を接続するときのために予約されているのです。

また、ここで光学ドライブなどのリムーバブルメディアが挙げられていないのは、それらからの起動の場合、特別な起動のためのプログラムを用意している一部のOS(Windows NT系など)を除くと、起動プログラム部分に手を入れるのを避ける目的で、大抵の場合はフロッピーディスクドライブあるいはハードディスクドライブのふり(エミュレーション)をする仕組み(※これはEl Toritoと呼ばれる規格で定められています)を利用しているためです。

つまり、大ざっぱに言えばBIOSから見るとほとんどの場合、どんな起動可能ストレージが接続されていても、IBM PCがそうであったように、フロッピーディスクかハードディスクのいずれかにしか見えない、ということなのです。

こうしたBIOSの仕様ゆえに、IBM PCおよびその互換機で動作するOS、特にMS-DOSなどではフロッピーディスクドライブは最大2台、かつドライブ名はA・Bに割り当てられる、という構成が標準となりました。

IBMとは異なる方針を採ったNEC

NEC PC-9821RvII26 システムセットアップメニュー画面
PC-9821シリーズ末期の機種に搭載されていた、PC/AT互換機でいういわゆるBIOS画面に相当するパソコン本体の各種ハードウェア設定画面。ご覧の通り、本体内蔵のフロッピーディスクドライブ(最大2台)と外付けフロッピーディスクドライブ(最大2台)の序列を切り替える機能が搭載されている。

さて、ここまでを読んで、「はて、NECのPC-9800シリーズではドライブ名の構成はこうじゃなかったような?」と思われた方もおられるかも知れません。

日本で1980年代中盤から1990年代後半まで10年以上にわたってパソコン市場で大きなシェアを占めていたNECのPC-9800シリーズでは、ここまでで述べたPC/AT互換機のBIOSとは異なる方針でOS起動のための仕組みが設計されていました。

というのも、当初8インチと5.25インチの2種類のフロッピーディスクが併存し、しかもOS起動用と(英語圏では不要な)かな漢字変換の辞書ディスク用などで2台のフロッピーディスクドライブの搭載が事実上必須となっていた日本の特殊事情もあって、PC-9800シリーズではBIOSレベルで最大4台(通常は内蔵2台と外付け2台、機種によっては内蔵で3台、というものもありました)のフロッピーディスクドライブがサポートされていた(※IBM PC系ではそうした制約はなかったため、通常1台、メディアコンバートの必要のある場合に3.5インチと5.25インチのフロッピーディスクドライブを各1台搭載する、といった使われ方が一般的でした。また、そもそもIBM PC系では標準のフロッピーディスクドライブインターフェイスは2台のドライブしかサポートしていません)ためです。

MS-DOS Ver.5.0A-H
NEC PC-9800シリーズ向けに供給されたMS-DOSの一例。ハードディスクから起動しているがドライブ名は「A:」となっている。

しかも、NECはPC-9800シリーズ用MS-DOSにおいて、ドライブ名の序列をIBM PCとは異なったものとしました。

フロッピーディスクのドライブ名がハードディスクに割り当てられた一番最後のドライブ名の「次」から順に割り当てられるような構成となっていたのです。

例えば、あるマシンにハードディスク1台が搭載され、その中に2つの起動可能パーティションが存在したとして、そのマシンに他に2台のフロッピーディスクドライブが接続されていたとすると、

IBM PC系だと

A:フロッピーディスクドライブ #01
B:フロッピーディスクドライブ #02
C:ハードディスク内起動可能パーティション #01
D:ハードディスク内起動可能パーティション #02

といったような割り当てがMS-DOSからなされ(起動可能パーティション #02から起動した場合はそのパーティションに「C:」が割り当てられ)ます。

一方、PC-9800シリーズの場合は

A:ハードディスク内起動可能パーティション #01
B:ハードディスク内起動可能パーティション #02
C:フロッピーディスクドライブ #01
D:フロッピーディスクドライブ #02

となります。

なお、PC-9800シリーズでは(仕様としては準備されていた形跡があるものの)CD-ROMなどの光学ドライブからのOS起動はサポートされておらず、またMO(光磁気ディスク)などのリムーバブルメディアからOSを起動したい場合には、そのドライブをハードディスク互換モードなどで動作させる必要がありました。

ここで注意が必要なのは、ハードディスクのパーティションが増えれば増えるほどフロッピーディスクドライブのドライブ名が後にずれてゆくことです。

このような仕様であったことから、PC-9800シリーズでWindowsをインストールした場合はWindowsのフォルダが「C:\Windows」ではなく「A:\Windows」となるケースが珍しくなく、また複数のハードディスクを接続してその任意の一つにWindowsをインストールした場合、「E:\Windows」や「G:\Windows」といった今見ると違和感の強いフォルダにWindowsがインストールされてしまうことも珍しくありませんでした。

もっとも、この仕様のせいでPC-9800シリーズ版WindowsはPC/AT互換機版を前提にC:\Windowsを決め打ちでアクセスするような行儀の悪いソフトやインストーラで正常動作しないケース(※逆にシステムフォルダがC:\Windowsでなかったためにこのフォルダを決め打ちで攻撃するウィルスを回避できたケースもありました)があって、その対策としてWindows 9xなど後期のPC-9800シリーズ対応Windowsではフロッピーディスク2台を強制的にA:とB:に割り当ててWindowsを「C:\windows」へインストールするためのオプションスイッチ(※3台目および4台目のフロッピーディスクドライブを接続してある場合は、認識可能なハードディスクのパーティション全てにドライブ名を割り当てられた後、残りのドライブ名の一番若いものから順に割り当てる通常のルールが適用されます)がインストール時に用いるセットアッププログラムに組み込まれていました。

始まりはCP/Mだった

このように、Windowsでは今となっては煩雑なルールでアルファベット1文字のドライブ名が決定される(※厳密には、Windows NT系では内部的に後述するUNIX系OSに近い形でパーティションが扱われていますが、ネットワーク越しに他機のフォルダへアクセスするようなケースを除き、このことを意識する機会はほとんどありません)ようになっています。

こうしたアルファベット1文字をドライブ名とするWindowsのルールは、元々8ビットCPUであるIntel 8080/8085(およびその互換CPU)用に開発された、Digital ResearchのCP/M(CP/M-80)という原始的なDOSの一種のそれを踏襲したものです。

このCP/Mはメインメモリ容量がわずか32キロバイト~64キロバイト程度しかない、8ビットパソコンのために開発されたもので、とにかくメモリ消費量を節減する必要があったことからこのように単純な1文字のドライブ名で識別するというアイデアが考案されました。

更に言えばこの当時はパソコン用ハードディスクなど影も形もないような有様で、ディスクと言えば即ちフロッピーディスク、という状況でしたから、最大で26ドライブまで、というドライブ名の持つ制約は何ら問題とはならなかったのです。

ちなみに、MS-DOSで長らく標準だった「ファイル名8文字+“.”+拡張子3文字」というファイル名のルールもまた、このCP/Mの規則を引き継いだもので、現在アクセスしているドライブを指定する「カレントドライブ」の概念もまた、このCP/Mに由来しています。

ドライブ名を持たないUNIX互換OS

TIZEN SDK 2.0 Magnolia同梱のエミュレータ上でシェル(コマンドシェル)を開いた状態。TIZENはLinuxのディストリビューションの1つであり、内部的にはこのようにUNIX系互換OSとしてのファイルシステムを備え、Filesystem Hierarchy Standardに準拠している。なお、同じくLinuxを基礎とするAndroidでも同様のファイルシステムと階層構造を備えている。

以上のとおり、MS-DOS以来現在のWindows 8.1に至るまで、「ドライブ名」を(内部的にはどうであれ互換性のために)表向きは維持し続けてきたマイクロソフトのOSに対し、Apple製OSやUNIXおよびその互換OSでは、この「ドライブ名」という概念は存在しません。

というのも、いわゆるUNIX系OSではLinuxを含め、起点となるルートディレクトリ(“/”と表記)から下方にツリー構造でディスクやディレクトリ、あるいはデバイスなどが適宜「マウント」される仕組みを採用していて、このツリー上の位置を示す(※内部的にはディスクドライブの場合、識別のためそれぞれ固有番号が割り振られています)ことで個別のディスクを識別しているためです。

ちなみに、現在のこの系統のOSではFilesystem Hierarchy Standard(FHS:ファイルシステム階層標準)といってどこに何をどうマウントするかを定めた標準規格が制定されていて、概ねこれに従ってデバイスやディスクがマウントされています。

「アストロファイルマネージャー」にてスマートフォンのSDメモリカードを表示した状態。この場合、上位のディレクトリとして“/storage”と“/storage/ext_sd”の2つが存在することになる。

そのため、例えばSDメモリカード(ext_sd)を“/storage”に「マウント」した場合、ルートディレクトリを基準として「/storage/ext_sd/」という位置にアクセスすればメモリカードのフォルダ内容を知ることが出来ます。

どちらがより優れている、というものではない

以上のように、UNIX系OSでは数の制約の厳しいドライブ名が使用されていないのですが、これをもって「UNIX系OSは素晴らしい」などと話を単純化できるものではありません。

実を言うと、現在のWindows 7/8/8.1などでは既に内部的にはUNIX互換OSに近いドライブ識別と管理を行っていて、その情報に対して「ドライブ名」を紐付けて表示・利用可能としているに過ぎません(※そうでなければそもそもドライブ名をおいそれと変更できません)。

マイクロソフトがそうまでして「ドライブ名」を維持しているのは、既存ソフトの互換性維持という重要な目的の他、その方が判りやすいケースが結構あるためで、必要とあればいつでもそれを放棄してUNIX系OSに近いドライブ管理の仕組みを表に出せる状況にあったりします。

問題はこの仕組みがWindows NT系で採用されて以来20年近くが経過したにもかかわらず、いつまで経ってもこの仕組みがローカルなアクセスではほとんど利用されていないことなのですが・・・。

コメントは受け付けていません。

タグ:
PageTopへ