Windows 2000/XPでどうしても動作しない周辺機器やアプリケーションを使いたいために、Windows 2000/XPとWindows MeまたはWindows 98をデュアルブートで使っている人もいるだろう。またどうしてもWindows NTからWindows 2000/XPに完全移行できない事情があって、Windows 2000/XPとWindows NTをデュアルブートにしているかもしれない。あるいは普段はWindowsを使ってはいるが、何かと話題になるLinuxも使ってみたいという人もいるだろう。
こうした複数のOSを使う場合、1台のPCでデュアルブートあるいはマルチブートにすることがよく行われる。しかし、基本的にはデュアルブート/マルチブートシステムはお勧めしない。それはトラブルが起きやすく、決して最善の方法ではないからだ。1台のPCには1つのOSだけをインストールすることが一番よい。とはいっても現実には、複数の専用PCを用意する金銭的な余裕がなかったり、複数のPCを置くスペースがなかったりする。あるいはPCは趣味で使っているから、トラブルもまた楽しいという人もいるかもしれない。
本稿では、デュアルブート/マルチブートをせざるをえない、または楽しみたいという、デュアルブート/マルチブート中級者を対象に、デュアルブート/マルチブートを行う際に注意しなければならないことや、うまく使うためのノウハウを伝授すると共に、上級者がデュアルブート/マルチブートシステムを完璧に使いこなすためのテクニックまでを解説している。残念ながら、デュアルブート/マルチブートシステムは結構奥が深く、そのすべてをここで書き尽くすことはできないが、必要な情報はすべて網羅しているはずだ。なお、PC初心者にはこの内容を理解することが困難だと思われるが、PC初心者はデュアルブート/マルチブートなどに手を出すべきではないので、あえて基礎的な解説は行わない。
AT互換機 (DOS/Vマシン) では、1つのHDD (ハードディスク) を最大で4つの基本パーティション (区画)、または3つの基本パーティションと1つの拡張パーティションに分割することができる。拡張パーティションには複数の論理パーティションを作成することができる (数は無制限) ので、基本パーティションと論理パーティションを組み合わせることで、多数のパーティションを作成できることになる (図1)。
図1 3つの基本パーティションと4つの論理パーティションを作成した例
基本パーティションを複数作った場合、Windows系のOSでは、アクティブ (ブート可能) にできる基本パーティションは1つだけだ。電源ONまたはリセット後の再起動の際には、アクティブな基本パーティションからOSが起動する。拡張パーティション、論理パーティションはアクティブにはできない (LinuxやOS/2などでは論理パーティションもアクティブにできる) ので、OSを論理パーティションにインストールした場合は、アクティブな基本パーティションに置いたOSローダーを使って論理パーティション内のOSを起動する必要がある。なお、DOSやWindows 95/98/98SE/Me (以下ではWindows 9xと表記する) のFDISKでは複数の基本パーティションを作成することができない。Windows NT/2000/XPのディスクアドミニストレータやディスクの管理では複数の基本パーティションを作成できる。
複数のHDDがある場合、通常はBIOSが最初に認識したHDDからしかOSを起動できない。したがって2番目以降のHDDからOSを起動する場合は、論理パーティションから起動する場合と同じに、最初に認識されるHDDのアクティブな基本パーティションに置いたOSローダーを使うことで起動可能となる。
なお、Windows 95では32GBを越えるIDE HDDをサポートしていない。またWindows NT 4.0のSP3までは8GBを越えるHDDを正しく認識できないというバグと、2GBを越えた位置にあるNTLDRをロードできない、4GB超の位置にあるカーネルをロードできないというバグがある。このバグはSP4/5で修正されているが、Windows NT 4.0のインストーラはSP2なので、そのままでは、インストールの際に8GB超のHDDを認識できないことと、先頭から2GB以上の位置にあるパーティションにNTLDRをインストールできない、先頭から4GB超の位置にあるパーティションにOS本体をインストールできないので注意が必要だ。
Windows 98/98SEのFDISK.EXEは64GBを越えるHDDのサイズを正しく認識できないというバグがあるが、これについては修正プログラムが配布されている。
http://download.microsoft.com/download/WIN98/Update/8266R/W98/JA/263044JPN8.EXE
同様に、Windows 98/98SEのFORMAT.COMが64GBを越えるパーティションをフォーマットする際に、間違った容量を表示するというバグがあるが、これは表示上だけの不具合であり、フォーマット自体には影響しない。
なお、Windows 2000の新機能にダイナミックディスクというものがあるが、ダイナミックディスクは他のOSからは認識できない。そのため、デュアルブート/マルチブートシステムでダイナミックディスクを使うと、どんなトラブルが起こるか予想ができないので、絶対にダイナミックディスクを使わないようにしていただきたい。
PCで利用できる代表的なファイルシステムには、FAT16、FAT32、NTFS4、NTFS5、HPFS、NetWareファイルシステム、Linux
Ext2、Linux Swapなどがある。特にWindows系のOSでは、OSとバージョンにより、利用できるファイルシステムに違いがあるので、この違いをキチンと理解しておかないとデュアルブート/マルチブートで苦労することになる。表1にWindows系で利用できるファイルシステムとOSの対応を示す。
表1 OSと利用できるファイルフォーマット (○は利用可能、×は利用不可)
FAT16の最大サイズは2GB、FAT16 (64KBクラスタ) は最大4GB。ただしFAT16 (64KBクラスタ) を利用できるのはWindows NT/2000/XPだけ。FAT32の最大サイズは2TBである (ただし、実際にWindows 2000/XPでフォーマットできるのは32GBまで、Windows 98/98 SE/Meでフォーマットできるのは128GBまで)。そしてNTFSで利用できる理論上の最大サイズは16EBだが、実装上の制限から実際に利用できるのは2TBである。ただし、いずれの場合も現状では、BIOSで認識できるIDE HDDは128GBまでだ (「参考」の「次の課題:128GB制限」を参照)。
パーティションがどのファイルシステムによりフォーマットされているかは、システムIDにより区別されてパーティションテーブルに記録されている。しかし、このシステムIDはとかくトラブルの元になりがちだ。システムIDによるトラブルと、その対処方法は「その2 実践編」で紹介するが、システムIDそのものについては「参考」の「1 システムIDの問題」を参照していただきたい。
Windows系のOSは、認識できるファイルフォーマットのパーティションに対してドライブレター (ドライブ名) を割り当てる。ドライブレターの順番は、OSが認識したドライブ順に、C、D、E・・・・の順で自動的に割り当てられる (AとBはフロッピィのために予約されている)。後からこのドライブレターを変更できる場合もあるが、OSがインストールされたドライブレターの変更はできなかったり、できてもシステムの整合性が狂うため、実際の変更は困難だ。したがってOSをインストールする前に、どのようなドライブレターが割り当てられるかをあらかじめ理解しておくことが重要だ。
ドライブレターの割り当ては次の順番に行われる。
1. BIOSで最初に起動するように設定されたHDDのアクティブな基本パーティション
2. 以下、BIOSで2番目以降に起動するように設定されたHDDの基本パーティション
3. BIOSで最初に起動するように設定されたHDDの最初の論理パーティション
4. 上記HDDの2番目以降の論理パーティション
5. 以下、BIOSで2番目以降に起動するように設定されたHDDの論理パーティション
6. 最初のHDDのアクティブな基本パーティション以外の基本パーティション
6.で最初のHDDに非アクティブな基本パーティションが複数ある場合は、その物理的な位置ではなく、MBRのパーティションテーブルに記述された順番でドライブ名が割り当てられる点に注意が必要だ。通常は、パーティションテーブルの順番と物理的な順番は一致するが、パーティションの作成と削除を繰り返していると、両者が一致しなくなる場合がある。
例えば、IDEのプライマリ、IDEのセカンダリ、SCSIに2つ (ID番号が1と2)、というように計4つのHDDが接続されており、各HDDに1つの基本パーティションと2つの論理パーティションがある場合 (図2:カッコ内の数字1-1等は便宜的に付けた番号)。
図2 4台のHDDがある場合
BIOSでIDE→SCSIの順に起動するように設定されていると、1-1、2-1、3-1、4-1、1-2、1-3、2-2、2-3、3-2、3-3、4-1、4-2の順にCからNまでのドライブレターが付けられる。またBIOSでSCSI→IDEの順に起動するように設定されていると、3-1、4-1、1-1、2-1、3-2、3-3、4-2、4-3、1-2、1-3、2-2、2-3の順にCからNまでのドライブレターが付けられる。
この際に、OSで認識できないファイルフォーマットのパーティションがあると、そのパーティションにはドライブレターが付かない (パーティションが無視される)。例えば、上記の例で、1-2、2-1がOSから認識できないパーティションだとすると、1-1、3-1、4-1、1-3、2-2、2-3、3-2、3-3、4-2、4-3の順にCからLまでのドライブレターが (IDE→SCSIの場合)、または3-1、4-1、1-1、3-2、3-3、4-2、4-3、1-3、2-2、2-3の順にCからLまでのドライブレターが (SCSI→IDEの場合) 付けられる。
ここで注意しなければならないことは、OSのインストール後に、HDDを追加/取り外したり、パーティションを作成/削除したり、ファイルフォーマットを変更したりすると、ドライブレターが変わってしまい、OSが起動できなくなったり、起動できても正常な動作ができなくなることがある点だ。なお、Windows NT/2000/XPでは、最初に認識したドライブレターをレジストリに記録するので、その後ドライブ構成に変更があっても、基本的にはドライブレターはそのまま変わらない。
Windows系OSの起動プロセスは次のとおりだ。
1. PCの電源をONまたはリセットすると、CPUはROM BIOSに組み込まれた命令 (プログラム) を実行する。
2. BIOSプログラムは、最初にCPUやメモリ、その他の周辺機器をチェックする。そしてBIOS命令の最後の部分がOS起動ルーチンになっており、このBIOS起動ルーチンによって、優先的に起動するように設定された最初のHDDの先頭位置に書き込まれているMBR
(マスターブートレコード) が読み込まれる。
MBRにはマスターブートプログラム (ブートストラップローダ) とパーティションの情報を記録したパーティションテーブルが入っている。
BIOS起動ルーチンはメモリにマスターブートプログラムを読み込み、マスターブートプログラムに制御を渡す。
3. マスターブートプログラムは、パーティションテーブルをチェックし、アクティブな基本パーティションを検索し、そのパーティションの先頭位置にあるパーティションブートセクタ (PBS) を読み込む。
パーティションブートセクタは、OSによってフォーマットの際に作成され、そのパーティションにインストールされたOSを起動するためのブートプログラム (イニシャルプログラムローダ:IPL) とそのパーティション情報が格納されている。
マスターブートプログラムはアクティブな基本パーティションのIPLをメモリに読み込み、IPLに制御を渡す。
4. IPLは、最初のHDDの基本パーティションの中から、OSを起動するためのOSローダー (Windows NT/2000/XPの場合はNTLDR、DOS/Windows 9xの場合はIO.SYS) を探し、見つかったらそれをメモリに読み込み、OSローダーに制御を渡す。
5. OSローダーは、OSの起動に必要なドライバなどのファイルをロードし、OSを起動するための準備を行った上で、OSのカーネルを起動する。こうしてOSが起動する (図3参照)。
図3 MBR→パーティションブートセクタ→OSローダーの順に起動 (2つの基本パーティションがある場合)
なお、Linuxの場合は、OSローダー (LILO) をMBRまたはパーティションブートセクタ (ルートスーパーブロック) に書き込むため、Windows系OSとは若干起動プロセスが異なる。
Windows 系のOSの場合は、IPLは最初のHDDの基本パーティション内しかOSローダーを探さない。したがって、基本パーティション (C:ドライブ) にOSローダーがなければならないという制約があることに注意していただきたい。そのため、C:ドライブがそのOSからアクセス可能なファイルフォーマットである必要がある。また最初のHDDという点も重要だ。このため、2台目のHDDのIPLを何らかの方法でロードしても、そのIPLは2台目のHDDの基本パーティションではなく、1台目のHDDのアクティブな基本パーティションを探しに行くので、2台目のHDDからはWindowsを起動することができない理由となる。
OSによっては、OSの起動に関する重要な制限がある。それはIDE HDDにおける8GB制限と言われているものだ。詳細は「参考」の「2 8GB制限について」を参照していただきたい。
OSの起動プロセスで、いくつものプログラムがリレー式に次々と起動していくことが分かったと思う。デュアルブート/マルチブートを実現するためには、この起動プロセスのどこかで、別のOSへの分岐を可能にすればよいことも理解できるだろう。実際に分岐する場所としては、BIOS→MBRのところ、MBR→パーティションブートセクタのところ、パーティションブートセクタ→OSローダーのところ、そしてOSローダー→カーネルのところの4箇所が考えられる。
BIOS→MBRでの分岐は、OSごとに別のMBRを用意するという方法になる。ただし、1つのHDDに複数のMBRを持たせることはできない。そのため、実際の方法としては物理的に別のHDDにBIOSからアクセスさせるという方法をとる。その場合、2つの方法が考えられる。
これはOSごとに別のHDDを用意し、起動したいOSに合わせて、専用のHDDに交換するというものだ。PCショップでリムーバブルHDDケースが売られているのを見たことがあると思う。そうしたリムーバブルHDDケースとHDDをOSの数だけ用意しておき、リムーバブルHDDケースごとHDDを交換することになる。この方法は、OSの切り替えが確実で、インストールも容易、かつ1つのOSのトラブルが他のOSに影響しないというメリットがある反面、OSの切り替えが面倒、複数のHDDとリムーバブルケースが必要なので費用がかかる、といったデメリットもある。
使いたいOSの数が少なく、手間と費用が気にならないならば、この方法はお勧めだ。インストールはHDDごとに1つのOSをインストールするだけなので、トラブルが起こりにくいのが一番のよい点だ。複数のOSでデータを共有したい場合は、OSをインストールするHDDとは別に、データ用のHDDを取り付けておき、このデータ用HDDは交換しないようにすればよい。この方法については、これ以上説明することもないので、本稿ではこれ以上取り上げない。
あらかじめ複数のHDDを取り付けておき、OSを選択する際には、BIOS設定画面を出して、最初に起動するHDDを切り替える方法だ。この方法はリムーバブルHDDケースを使う方法に比べると、リムーバブルHDDケースが不要な分だけ安上がりだ。ただし、やはり複数のHDDが必要になることと、OS切り替えの手間がかかる点では前者と同様だ。またPCに内蔵できるHDDの数に限りがあることと、BIOSで切り替えられるHDDにも限りがあるため、切り替え可能なOSはそれほど多くできない。
HDDごとに別のOSをインストールするので、デュアルブート/マルチブートのための苦労がほとんどない点はメリットだが、起動時のメニュー画面からOSを切り替える方法に比べてデメリットの方が多すぎるので、この方法はお勧めしない。本稿でもこの方法はこれ以上言及しない。
MBR→パーティションブートセクタでの分岐のためには、2つの方法が考えられる。1つはアクティブパーティションを切り替える方法であり、もう1つは特別なOSセレクタをMBRにインストールし、マスターブートプログラムを書き換える方法だ。
この方法の原理はOSの起動プロセスを見れば簡単に理解できる。マスターブートプログラムがOSのパーティションブートセクタをロードする際には、アクティブな基本パーティションからロードするので、OSをそれぞれ別の基本パーティションにインストールしておき、起動したいOSをインストールした基本パーティションをアクティブにしてやれば、マスターブートプログラムがそのOSを起動してくれるということになる。
この方法では、特別なOSセレクタを使うことなくOSの切り替えができる反面、OSを切り替える度に、フロッピィから起動するか、HDDからOSの起動後にFDISKあるいはそれに代わるプログラムを使ってアクティブパーティションを変更しないといけないため、OSの切り替えに手間がかかる点ではBIOSで起動HDDを切り替える方法以上に面倒だ。したがって、この方法はお勧めできないし、本稿ではこれ以上言及しない。
特別なOSセレクタをMBRにインストールし、マスターブートプログラムを書き換えることで、起動時にOS選択メニューを表示させ、ユーザーが使いたいOSを選択すると、そのOSがインストールされているパーティションのブートセクタをロードするという方法だ。市販のOSセレクタの大部分がこの方法を採っている。
この方法では、OSセレクタ側で8GB超に対応させることで、標準のマスターブートプログラムの持つ8GB制限を回避できるメリットがある反面、Windows系OSでは基本パーティションからしか起動できないという制限と、基本パーティションが最大4つまでしか作成できないという制限のため、OSセレクタメニューから起動できるWindows OSが最大で4つまでという制限がある。ただし、一部のOSセレクタでは特殊な方法を採ることで、この最大4つという制限を回避しているものもある。市販のOSセレクタについては、「付録」の「1 OSセレクタユーティリティ」を参照していただきたい。
LinuxのLILOをMBRにインストールした場合もやはりこのタイプになる。LILOについても「付録」の「LILO」を参照していただきたい。
特別なOSセレクタをパーティションブートセクタにインストールし、IPLを書き換えることで複数のOSローダーに分岐させる方法だが、この方法はかなり特殊な方法だ。筆者の知る限り、この方法を採っているOSセレクタはLinuxのLILOだけだ。この方法はMBRにインストールする方法に比べてメリットがほとんどないため、使われないものと想像される。Linuxの場合は、そもそもLILO以外のIPLが存在しないため、LILOをMBRにインストールしない場合は、パーティションブートセクタ (Linuxの用語ではルートスーパーブロック) にIPLとしてLILOをインストールする必要があるというわけだ (LILOをフロッピィにインストールする方法はここでは取り上げない)。
これもOSセレクタとしては特殊な方法に属するのだが、Windows NT/2000/XPがこの方法で複数のOS選択を可能としているため、もっともよく使われる方法になっている。Windows NT/2000/XPのOSローダーはNTLDRという名のプログラムだ。C:ドライブのルートディレクトリに隠しファイルとして存在する。
OSの起動プロセスを見ても分かるように、OSローダーの起動までに複数のプロセスを経由している。したがってMBRの段階でOSを選択する方法に比べると効率が悪い。複数のWindows NT/2000/XPを選択起動する場合は、ここまでの起動プロセスが同じなので、効率が悪いことはないが、Windows NT/2000/XP以外のOSをここから起動するためには、パーティションブートセクタに戻る必要があるためだ。
Windowsではデュアルブート/マルチブートを積極的にはサポートしていないし、Windows以外のOSもサポートしていないので、このような設計となったものと思われるが、その機能は非常に限られている上に使い勝手もよくない。筆者としては市販のOSセレクタの利用をお勧めしたいが、無料で使えることと、DOS/Windows 9xとWindows NT/2000/XPのデュアルブート程度ならこれでも実用になることから、この後の「その2 実践編」では主にNTLDRを使ったデュアルブート/マルチブートシステムを紹介する。なおNTLDRの働きについては「参考」の「3 NTLDRとBOOT.INI」を参照していただきたい。
以上でデュアルブート/マルチブートの原理を説明した。これが理解できていれば、実際にデュアルブート/マルチブートシステムを構築することは難しくない筈だが、雑誌などには間違った原理を解説しているものがよく見受けられる。こうしたよくある誤解については「参考」の「4 よくある誤解」を参照していただきたい。