デベロッパー:Linux How-To 2005年10月07日 01:02 更新
ハードディスクにGRUBをインストールする

 Red Hat Linux 7.2の場合,インストールと同時にGRUBがハードディスクのMBRにインストールされた状態にできる。このため,Red Hat Linux 7.2だけを標準的に利用するのであれば,GRUBの再インストールの必要性はない。

 しかし,誤って/sbin/liloを実行したり,make bzliloを実行したりするとGRUBが上書きされLILOに置き換わってしまう。また,複数のOSをデュアルブートするために既存OSのブートローダーをGRUBに置き換えたいこともあるかもしれない。そのような場合には,GRUBをハードディスクにインストールし直す必要がある。この操作は意外と簡単だ。

 まずは,先に作っておいた起動用フロッピーディスクから起動し,GRUBコマンドのプロンプト状態にしよう。そして,次のようにしてsetupコマンドを実行すればよい。

grub> root (fd0)
grub> setup (hd0)

 この操作だけで,フロッピーディスク(fd0)にインストールされているGRUB構成が1台目のハードディスク(hd0)にインストールされる。ちなみにこの際,起動用フロッピーディスク内のgrub.confファイルもハードディスク上にコピーされるため,起動用フロッピーディスク内でテストしたメニュー環境も反映される。

 基本的にはこれでよいのだが,今回の例のように1台目がWindowsXP,2台目がLinuxというパターンではうまくいかない。なぜならば,GRUBがWindowsXPで利用しているNTFSに対応していないためだ。実は,ハードディスク上のGRUBは,起動順番に沿ってstage1,stage1_5,stage2と呼ばれる3つの部分に分かれる。そして,stage1とstage1_5の部分はMBRに格納されるが,stage2の部分はファイルシステム自体に格納されるのだ(Fig.9)。

 GRUBはNTFSに対応しないため,この状態ではstage2を読み込むことができない(というよりも,先のsetup (hd0)の実行時にstage2の書き込みに失敗する)。

One Point!stage2は,実際にファイルシステム上から参照することができる。Red Hat Linux 7.2では,/boot/grub/stage2というファイルが存在することを確認できるだろう。当然このファイルを削除した場合には,GRUBは起動できなくなることを意味する。注意しよう。

Fig.9■ハードディスク上のGRUBの構成
Fig.9

 そこでやや変則的であるが,2台目のハードディスクであるext2ファイルシステムにstage1,stage1_5,stage2を記述し,1台目のハードディスクから起動するものの,実際にはstage2のファイルは2台目のハードディスクに存在するものを参照するよう設定すればよい(Fig.10)。

Fig.10■ext2(ext3)ファイルシステム上のstage2を使う
Fig.10

 このような構成にするには,まず最初に起動用フロッピーディスクから起動し,その内容をハードディスクの2台目(hd1)にも書き込む。

grub> root (fd0)
grub> setup (hd1)

 次に,1台目のハードディスク(hd0)のMBRへFig.10に示したように,stage 1_5,stage2を2台目のハードディスクの第1パーティション((hd1,1))に存在するものを利用するよう指定する。そのためには,次のようにinstallコマンドを用いればよい。

grub> install (hd1)+1 d (hd0) (hd1,0)/grub/stage2 p (hd1,0)/grub/menu.lst

 installコマンドは,先頭から順に「stage1_5の場所」,「文字d」,「stage_1の場所」,「stage2の場所」,「文字p」,「メニューファイルの場所」を指定する。

 上記では,stage1_5はhd1の先頭の次のセクタ(+1のセクタ)を利用し,stage2はhd1の1番目(0)にある/grub/stage2,そして設定ファイルはhd1の1番目(0)にある/grub/menu.lstを使うよう指定している。

 Linux上からは,stage2menu.lstのファイルは/boot/grubディレクトリに見えるが,GRUB上からは/grubディレクトリとして見えるので先頭の/bootを省略指定すればよい。

 このように,2台目からGRUBの起動ファイルを読み込むことで体裁はよくないものの,1台目のハードディスクの第1パーティションがGRUBに対応していない場合でも,GRUBを利用することができる。

One Point!上記のように書き換えた場合,メニュー項目はLinux上の/boot/grub/menu.lstファイルが使用される。メニュー項目を書き換えたければ,Linuxを起動しmenu.lstファイルを編集すればよいことになる。

One Point!stage1_5のファイルは,stage2を置いたファイルシステムの種類によって「e2fs_stage1_5」,「ffs_stage1_5」,「reiserfs_stage1_5」,「fat_stage1_5」,「minix_stage1_5」,「vstafs_stage1_5」のいずれかのファイルが使われる。そのため,今回のように別フォーマットのディスクからstage2のファイルを読み出す場合,stage1_5のファイルを明示的に書き込む場合もある(今回は,stage1_5をstage2と同じハードディスクから読み込んでいることから問題はない)。明示的にstage1_5を書き込むには,embedコマンドを使い,例えば「embed /boot/grub/e2fs_stage1_5 (hd0)」のように指定する。

 もちろんこれらの作業は,ハードディスクの1台目がNTFSであるから問題なのであり,WindowsXPがインストールされているディスクとLinuxがインストールされているディスクとを入れ替えられれば,setupコマンドで書き込むだけで済む。

 また,GRUBではmapコマンドを使いディスクを入れ替えたり,hideコマンドを使ってディスクを隠したりすることも可能だ。これらを利用すれば,より柔軟な環境構築が可能となるだろう(筆者はまだ試していないが,GRUBのマニュアルによるとDOSやWindowsを2台目のハードディスクから起動したい場合には,mapコマンドによるディスクの入れ替えが必要なようだ)。

 なおハードディスクのMBRにGRUBをインストールし損ねると,最悪の場合OSの起動に失敗することもある。このため,十分に起動用フロッピーディスクで動作を確認した上でMBRに書き込むようにしよう。特にLinux以外のOSでは,最悪の場合OSの再インストールが必要となるケースもあるため注意が必要だ。

icon まとめ

 今回は,Red Hat Linux 7.2の環境を3回に分けて紹介してきた。今回のGRUBは,基本的にmenu.lstファイルの設定次第でさまざまなOSを起動できることが分かったはずだ。

 GRUBを導入するメリットは多々あるが,筆者としてはGRUBコマンドプロンプトが用意されていることで,万が一設定を誤ってしまった場合の修復が容易である点に大きな価値を見い出した。

 本稿は,記事の特性上Linuxをベースとした解説になっているが,WindowsやFreeBSDなど,他のOSでもデュアルブートする予定があるならばその便利さは計りしれない。

 Red Hat Linux 7.2を使っているならば,grub-installコマンドでGRUBの起動ディスクを簡単に作ることが可能だ。GRUBを活用しないとしても,起動用ディスクだけは作成しておくのがよいだろう。障害発生時などに役立つことは間違いない。

関連リンク
ボタン レッドハット
ボタン Red Hat Linux 7.2製品情報(レッドハット)

[大澤文孝,ITmedia]

5/5 space