パソコン実習室
GRUB によるトリプルブートの実験
≪ previous next ≫

X.トリプルブート


X.1.現状の確認

X.1.1.起動の確認

 Windows XP, 2000 server をインストール済みのハードディスクに、Linux ES3 をインストールしたことで、一応のトリプルブートは可能となっている。
各 OS が正常に起動できるか確認しよう。

 grub の起動リストの順でいけば、上から Linux ES3, Windows 2000 server, Windows XP となっている。
すべて順調に起動できただろうか。

X.1.2.ドライブの確認 (Windows)

 起動が正常に行えたら、各 Windows (XP, 2ooo server) のドライブ状況を確認する。
それぞれ自 OS のドライブは C ドライブとなっていて申し分ないが、他方の Windows 用パーティションもドライブ (例えば E ドライブ) として認識されている。

 また、ディスクの管理で確認すると、他 Windows のパーティションが確認できるほか、Linux 用のパーティションも複数確認できる。
ただ、Linux 用に確保されたパーティションは、Windows のドライブとしては認識 (マイコンピュータに表示) されない。


X.2.トリプルブートの完成

 2 つの Windows が独立した C ドライブとして起動できるようなトリプルブートとするには、起動対象の Windows に "自パーティション以外に Windows システムは無い" と誤認識させなければならない。


X.2.1.最期の編集

 そこで、起動 OS 選択リストである grub.conf の編集と、パーティション 2 にインストールした Windows 2000 server の boot.ini ファイルの編集が必要になる。
 grub.conf では選択された Windows に応じて、パーティション タイプの動的な変更を、Windows 2000 server の boot.ini ではパーティション番号の変更を行う。

編集の手順は以下の通り。
Windows 2000 server の boot.ini, Linux ES3 の grub.conf の順に実施する。
  1. Windows 2000 server を起動する。
  2. C ドライブにある boot.ini を次のように変更する。
    ( 赤字の部分を "2" から "1" に変更 )
  3. [boot loader]
    timeout=30
    default=multi(0)disk(0)rdisk(0)partition(1)\WINNT
    [operating systems]
    multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows 2000 Server" /fastdetect
  4. PC を再起動する。
  5. Linux ES3 を起動する。
  6. /boot/grub ディレクトリにある grub.conf を次のように変更する。
    ( 赤字の部分を追加する )
  7. # grub.conf generated by anaconda
    #
    # Note that you do not have to rerun grub after making changes to this file
    # NOTICE: You have a /boot partition. This means that
    # all kernel and initrd paths are relative to /boot/, eg.
    #root (hd0,2)
    #kernel /vmlinuz-version ro root=/dev/hda12
    #initrd /initrd-version.img
    #boot=/dev/hda
    default=0
    timeout=10
    splashimage=(hd0,2)/grub/splash.xpm.gz
    title Red Hat Enterprise Linux ES (2.4.21-4.EL)
    root (hd0,2)
    kernel /vmlinuz-2.4.21-4.EL ro root=LABEL=/
    initrd /initrd-2.4.21-4.EL.img
    title windows 2000 server
    parttype (hd0,1) 0x07
    parttype (hd0,0) 0x00
    rootnoverify (hd0,1)
    chainloader +1
    title Windows XP
    parttype (hd0,0) 0x07
    parttype (hd0,1) 0x00
    rootnoverify (hd0,0)
    chainloader +1

【 参考 】
 因みに、grub.conf または boot.ini のどちらか一方のみの編集が終わった段階で 各 OS を起動すると、次のような状態になる。
  • Linux ES3
    正常起動。


  • Windows 2000 server
    下記メッセージが出てブートシーケンスは停止する。
    次のファイルが存在しないかまたは壊れているため、Windows 2000 を起動できませんでした。
    <windows 2000 root>\system32\ntoskrnl.exe
    上記のファイルをインストールし直してください。
    ※ grub.conf に先立って boot.ini を編集する理由はここにある。


  • Windows XP
    正常起動。


X.2.2.トリプルブートの確認

 さて、これで目指していたトリプルブートは完成する(はずである)。
次の点を確認する。
  • 3 種類の OS は正常に起動できるか。
     パーティション タイプの書き換えを行っているので、各 OS を順番に起動するテストを複数回実施する。
  • Windows XP と Windows 2000 server は、次の項目も確認する。
    • マイコンピュータに 他 Windows のパーティションが、ドライブとして表示されない。
      ( ハードディスクドライブは、C ドライブのみ表示 )
    • ディスクの管理では、他 Windows のパーティションは、"未割り当て" になっている。


X.2.3.編集の理由

 Linux ES3 の grub.conf と Windows 2000 server の boot.ini を編集したのは次の理由による。
  • Windows 2000 serve の boot.ini
     grub から起動された Windows 2000 server の ntldr は、boot.ini を参照して読み込むべきファイル (ntoskrnl.exe) の所在を知る。 それは次の位置を指している。
    編集前の指定位置 : multi(0)disk(0)rdisk(0)partition(2)\WINNT
     しかし、パーティション 1 のパーティション タイプが grub によって 0x00 (未使用領域) に書き換わっているため、Windows 2000 server が認識するパーティション番号は以下のように変わってしまう。
    partition(1) : Windows 2000 server が存在するパーティション
    partition(2) : Linux ES3 が存在するパーティション
    ※ Windows は使用中のパーティションをカウントして、パーティション番号を識別するようだ。
     この状態では "ファイルが存在しないかまたは壊れている" となって Windows 2000 server を起動できない。 エラーを回避し起動可能とするため、boot.ini のパーティション情報を次のように書きかえる。
    編集後の指定位置 : multi(0)disk(0)rdisk(0)partition(1)\WINNT

  • grub.conf の Windows 2000 serve ブロック。
    • parttype (hd0,1) 0x07
      自身のパーティション タイプを正常値 (0x07) に戻す。
    • parttype (hd0,0) 0x00
      Windows XP が存在するパーティションを未使用領域 (0x00) と偽る。
      この措置により Windows 2000 serve から Windows XP のパーティションが見えなくなる。

  • grub.conf の Windows XP ブロック。
    • parttype (hd0,0) 0x07
      自身のパーティション タイプを正常値 (0x07) に戻す。
    • parttype (hd0,1) 0x00
      Windows 2000 server が存在するパーティションを未使用領域 (0x00) と偽る。
      この措置により Windows XP から Windows 2000 serve のパーティションが見えなくなる。

  • grub.conf の Linux ES3 ブロック。
    ここは何も変更しない。
     grub はパーティション テーブルの位置でパーティション番号を識別する(ように思える)。 grub は指定のパーティション (hd0,2) をルート パーティションとして認識し、以後カーネル等のロードはこのルートパーティションから行う。
    ※ (hd0,2) はパーティション 3 に相当。
     以後、Linux のシステムが組み上げられマウントされて使用可能になる。
    したがって、Linux ES3 に関係のないパーティション タイプが 0x00 (未使用領域) であっても、何の影響も受けない。




≪ previous [[ GRUB によるトリプルブートの実験 ]] next ≫