GRUBのページ

GRUBとは?

GNU GRUBはGNUのブートローダです. メニューから起動するOSを選べるのはもちろん,強力なコマンドラインコンソー ルを備えています.この非常に強力なコマンドラインが他のブートローダに対する最大のアドバンテージ になると思います.あらかじめ設定しておかなくても,簡単にOSをブートできます. しかも,bash等のような補完が聞くのでとても快適です.GRUBの入ったブートフロッピーがあると, 不測の事態に重宝します. hurd,Linux,FreeBSD,NetBSD,OpenBSDは自力で,他のOSもチェインローダを使って ブートできます.Linux/98でも使われています.8.4GB以上の場所にあるOSも起 動できます.さらに0.5.95からReiserFSにも対応しています.0.91からはさらに JFSとXFSに対応しました.

*注意!!! 以下の例ではハードディスクのマスタブートレコード(以下MBR)にGRUBを インストールしています.万一インストールに失敗したときのために MBRを復旧できる準備をしておいてください. DOSやWindowsのMBRをそのまま使っている人はフロッピーからブートして `fdisk /mbr'を実行すれば元のMBRに戻ります.

以下の例はWindows98を使っていたときに書いたものです. 現在のgrubはNTFSは読めないので,FAT,ext2,ext3,ReiserFS,XFS,JFS,FFS, minixfsのgrubが対応しているいずれかのパーティションにインストールしてく ださい.

MBRではなくて,パーティションブートセクタにインストールする方法もありま す(MS系OSのパーティションブートセクタにはインストールしないように!). 特に,PC-98では「固定ディスク起動メニュー」があるのでこちらのほうがい いでしょう. この場合は,GRUBをインストールしたパーティションをfdiskでアクティブ に設定してください.MS系のOSをインストールするなどしてMBRをつぶされても, アクティブパーティションを設定しなおすだけでOKです(AT互換機の場合). LILOをパーティションブートセクタにインストールした場 合と同様ですね.

また,GRUBをインストールするとウィルスチェッカがブートレコードが書き換えられたと警告を出してくることがありますが, 無視しましょう.

バイナリからインストール(unix, Windows)

まず,ftpサイトからgrub-*-pc.ext2fsと,grub-*-i386-pc.tar.gz を拾ってきます(これらにはドキュメントが含まれていないのでソースgrub-*.tar.gzも取って来たほうがよい). *の部分はバージョン名が入ります. 前者はext2のフロッピーイメージなので,rawrite.exeやddでフロッピーに書き込みます. 後者はコンパイル済みバイナリで,適当なパーティションの/に展開します.

次に,/boot/grub/menu.lst(この名前はGRUBのinstallコマンドを使うなら変更可能です)を編集します. 以下にサンプルを示します.#から行末まではコメントです.

#5秒間何もしないと自動的にデフォルトエントリ
#(デフォルトでは一番上のエントリ,この場合Windows98)が起動
timeout 5
#CPASLOCKとControlキーの入れ替え
setkey capslock control
setkey control capslock

#1台目のハードディスクの2つ目のパーティションからWindows98の起動
title Windows98
root (hd0,1)
chainloader +1

#1台目のハードディスクの最初のパーティションからLinuxの起動
#カーネルは,/vmlinuz
title Linux
root (hd0,0)
kernel /vmlinuz root=/dev/hda1

#1台目,3つ目パーティションからFreeBSDの起動
#カーネルは,/kernel
title FreeBSD
root (hd0,2,a)
kernel /boot/loader

#1台目のフロッピードライブから起動
title boot from fd0
root (fd0)
chainloader +1

GRUBではハードディスクドライブはhd0, hd1, hd2...の様に表します.SCSI とIDEの区別無く,BIOS から見た1台目のHDDがhd0,2台目のHDDがhd1になります.FDDも同様に1台目からfd0, fd1...にな ります.

パーティションも0から数えます.したがって, `hd0,1'は一台目のハードディスクの2番目のパーティションを表します.

*BSDのパーティションはパーティション(*BSDで言うスライス)の後にアルファベットで指定します. `hd0,2,a'は一台目のハードディスクの3番目のスライスのa(ルート)パーティションを表します. また,この場合はパーティションの部分を省略できます. その場合は最初の*BSDパーティションを持つスライスを探します. `hd0,a'は一台目のハードディスクのaパーティションを持つ最初の*BSDスライスのaパーティションを表します.

chainloaderに指定している`+1'は`0+1'の省略形で 最初の1ブロック分を表します. パーティションの最初にはパーティションブートセクタがあるので, 上の例ではWindows98の場合はhd0,1のパーティションブートセクタ, フロッピーの場合はfd0のブートセクタを表します.

最後に,先ほど書き込んだフロッピーでブートしてgrubのメニューが出てきたらcをタイプしてコマンドラインに降り, setup (hd0) (hd0,1)などと打ち込めば完了です. ここで,最後の(hd0,1)の部分には,バイナリイメージを展開したパーティションを指定してください.

ソースからインストール(unix)

僕の環境ではPGCC1.13でコンパイルしとき動かなかったので,GCC2.7.2.3等の 安定したものを使ってください(egcs-2.91.66でも大丈夫でした). それと,binutilsのバージョンにも注意したほうが良いみたいです. インストールは普通にconfigure, make, make installするだけです.

次に/boot/grub/menu.lstを作ります.上記の「バイナリからインストール」と同様にしてください.

ここで,いよいよMBRに書きこみます.make installでgrub-installコマンドがインストールされるのでこれを使います.

grub-install /dev/hda

パーティションブートセクタに書き込むときは

grub-install /dev/hda1 <-1台目のハードディスクの最初のパーティションに書き込む.

GRUBが使うファイルはデフォルトでは/boot/grubに置かれます./bootが/と違うパーティションのときは --root-directoryオプションを使ってください. 例えば

grub-install --root-directory=/boot /dev/hda

またこのときは,--root-directoryオプションで指定した場所の/boot/grubにmenu.lstを置いてください.

以上で終わりです.たったこれだけです.

8.4GB以上のパーティション

バージョン0.5.94からlbaも非lbaも1つのステージ1でOKになりました. したがって何もする必要はありません.以下の記述は古いです.

バージョン0.5.92からステージ1がint 13h 4xに対応し,ステージ1.5なしでス テージ2を8.4GB以上の場所に置けるようになりました(stage1のかわりに stage1_lbaという別のステージ1を使います). ステージ2からロードされるファイルは以前から 8.4GB以上に対応しています.特別なことは必要ありません.

GRUBブートフロッピーのススメ

さて,以上のように強力なGRUBですが,こいつを入れたブートフロッピーを用意 しておくと便利です.何かの拍子にブートローダが壊れたときでも,OSをブート できます.

作り方はinfoのFAQに書いてありますが, ftpサイトにフロッピーのイメージ(0.93の場合,grub-0.93-i386-pc.ext2fs)があるので, これをrawrite.exeかddでフロッピーに直接書き込んでも良いでしょう.(この場合,メニューが出ます.不要と思うなら フロッピーの/boot/grub/menu.lstをリネームするなり削除するなりしてください). このフロッピーで起動するとメニューが出ずに直接コマンドライン に行きますが,tabで補完が効くので非常に快適です.基本的にMS系なら chainloaderコマンドでそのパーティションの+1を指定します. FreeBSDでは,rootコマンドでルートを設定してkernelコマンドで/boot/loader を指定(直接カーネルを指定しても良いのですが,カーネルのインタフェースが 変わる可能性を考えて,こちらのほうがベターです), Linuxの場合はさらに,kernelコマンドでroot=/dev/hda1のようにルートパーティションをカーネ ルのパラメータとして渡してやる必要があります.ほかのカーネルパラメータが 必要な場合もスペースで区切って並べてください.initrdが必要な場合はinitrdコマン ドで指定してください.要は上のサンプルファイルに書いてあるようなことをコ マンドラインから打ち込むわけです.必要な設定が終わったところで,bootコマ ンドを実行すると起動します.

ホームページに戻る