This document was edited: 2009-09-14

マルチブートへの道

Windows から Linux への本格移行にあたって、当初はマルチブート環境を確立することにする。パーティション操作は GParted の Live CD 版を使い、ブートセレクターは GRUB を使う。

Windows パーティションの丸ごとコピー

まずは「退路の確保」ということで、メイン OS である Windows 2000 がインストールされた第 1 パーティション(hda1)を丸ごとコピーした。実際には、このようなことは必要ではなく、第 2 ~ 4 パーティションに Linux 用のパーティションを用意すればいいだけだ。ただ僕なりの「細かいこだわり」のため、第 1 パーティションに Linux を、第 2 に Windows を、(第 3 には MS-DOS を)、第 4 をデータ用に、というパーティション構成にしたかったのが理由。元々は、第 1 に Windows、第 2 がデータ、第 3 が MS-DOS だったので、このままでは第 4 に Linux を入れるしかない。

パーティション従来予定
1Windows 2000 (NTFS)Linux(論理パーティション)
2データ (NTFS)Windows 2000 (NTFS)
3MS-DOS (FAT16)MS-DOS (FAT16)
4(未使用)データ (NTFS)

このようにしたかった理由はいくつかあるが、主なものを挙げると、HDD は外周(前のセクター)の側の方がアクセススピードが速いので、主に使用する OS を前のパーティションにインストールしたかったこと。反対に、データ用のパーティションはそのような要請がないので、最も内周(後のセクター)の側の方を使いたかったということ。また、パーティション番号順にセクター領域が確保されているように整合性をとりたかった。

パーティションの操作(作成・削除、場所の左右移動、サイズの変更、パーティションのコピー)は GParted の Live CD 版を使った。まず、第 4 パーティションを作成して、そこに第 2 のデータ用パーティションの内容をコピーして移す(このコピー作業は普通に Windows 上でファイルコピーして行った)。次に、第 2 パーティションを一旦削除してから、第 1 の Windows パーティションを Gparted の機能でパーティションの丸ごとコピーを行う(コピーのパーティションは第 2 パーティションになる)。そしてこの第 2 パーティションに boot フラグを付ける。最後に第 1 パーティションを削除する。

以上で、従来の Windows が丸ごとコピーされて、第 1 パーティションを破壊しても、「退路は確保」されていることになる。ただし、このままでは第 2 パーティションの Windows が起動できないので、次に述べる、GRUB による起動方法の確立が必要となる。

GRUB による Windows の起動

基本的には GRUB を使って第 2 パーティションにある Windows 2000 を起動するには、

root (hd0,1)
chainloader +1

とすればいい。GRUB 自身はこれだけで Windows 2000 の OS ローダーである NTLDR にバトンを渡すことができる。

ところで問題となるのは、NTLDR の挙動についてである。NTLDR は boot.ini の内容に基いて OS 本体をロードしようとするので、複数のパーティションに Windows 系 OS をインストールしている場合にはやっかいなことになる。というのも、boot.ini ではパーティションを 1 ~ 4 の番号で識別する(GRUB の場合は、0 ~ 3)が、このパーティション番号は MBR のパーティション情報ではなく、Windows で認識できるフォーマット(NTFS か FAT)のパーティションに限定して番号付けしたものだからである。このことを予め計算に入れた上で、boot.ini の内容を修正しておく必要が出てくる。またその上、起動したい方のパーティションに boot フラグ(active フラグ)を付けておく必要がある(この作業は GParted でもできる)。

そして、複数の Windows パーティションを完全に切り替えて、他の Windows のパーティションが見えないようにするには、GRUB で起動するときに、

parttype (hd0,0) 0x00
parttype (hd0,1) 0x07
root (hd0,1)
chainloader +1

というような形で、パーティションタイプを変更するというような小細工が必要となる。この小細工では、NTLDR の目を誤魔化すために、他の Windows パーティションを未使用領域であると偽っているので、Windows のディスクの管理機能や、GParted でその未使用領域を操作しないように注意する必要がある。元の状態に戻すには、parttype (hd0,0) 0x07 というようなコマンドで本来の NTFS の領域にパーティションタイプを指定し直さなければならない。また、boot.ini におけるパーティション番号の変化を計算に入れることにも注意を要する。

ところで、今回の僕の作業においては、Windows 用パーティションを複数確保するわけではなく、第 2 パーティションにコピーしたパーティションだけ残して、第 1 のは削除してしまうので、このような小細工は必要がなくなる。つまり、先に GParted で第 1 パーティションを削除した上で GRUB で起動するならば、boot.ini の修正も必要はなく、当初掲げた通り、

root (hd0,1)
chainloader +1

だけで ok である。


<Linux>