Tips記事
» 2002年07月31日 00時00分 UPDATE

GRUB(MBR)が破損してカーネル読み込みができない

[木田佳克,ITmedia]

 「MBR」(マスターブートレコード)とは、PCが起動した際にハードディスク上に記録されている希望するOSを起動させるためのプログラム。この領域が破損してしまうと、OSが起動できなくなってしまう。そのため、何らかの対策を行っておくのがよいが、その1つにはあらかじめ復旧可能な起動用フロッピーを作成しておく方法が挙げられる。

 次のステップで復旧させるまでの手順を紹介しよう。

1. GRUB用の起動フロッピーを作る

# dd if=/usr/share/grub/i386-redhat/stage1 of=/dev/fd0 count=1
読み込んだブロック数は 1+0
書き込んだブロック数は 1+0
# dd if=/usr/share/grub/i386-redhat/stage2 of=/dev/fd0 seek=1
読み込んだブロック数は 234+1
書き込んだブロック数は 234+1

 なお、GRUBがソースコンパイル状態、あるいはTurbolinux8の環境では、上記の「i386-redhat」ディレクトリ名が「i386-pc/」になっていることに注意したい。

 ここで書き込まれたイメージファイルは、それぞれstage1がMBR、stage2がGRUBのバイナリになる。

・Red Hat Linuxの場合
# ls -l /usr/share/grub/i386-redhat/stage*
-rw-r--r-- 1 root root    512 9月 6 2001 /usr/share/grub/i386-redhat/stage1
-rw-r--r-- 1 root root   120000 9月 6 2001 /usr/share/grub/i386-redhat/stage2

・Turbolinux8の場合
# ls -l /usr/share/grub/i386-pc/stage*
-rw-r--r-- 1 root root    512 4月 26日 19:57 /usr/share/grub/i386-pc/stage1
-rw-r--r-- 1 root root   105344 4月 26日 19:57 /usr/share/grub/i386-pc/stage2

 また、stage2ファイルが/boot/grub/ディレクトリ下にあるかどうかも確認しておこう。万が一見つからない場合には、次のようにしてコピーしておけばよい。

# ls /boot/grub

# cp /usr/share/grub/i386-redhat/stage2 /boot/grub

2. 作成した起動用フロッピーで再起動(# reboot)

 フロッピーで起動されたGRUBのコマンドラインでは補完機能が効く。「grub>」のプロンプトの表示後は、次のように入力していこう。例えば「(hd0,」まで入力して「Tab」キーを押すと、ファイルシステムの一覧が表示され、「kernel /」の入力後に「Tab」を押せば候補が表示される。

 なお、ここでは次のような環境を想定している例だ。

ルートパーティション:/dev/hda1
カーネルイメージ:/boot/vmlinuz-2.4.18-10k
RAMイメージ:/boot/initrd-2.4.18.img

grub> root (hd0,0)
grub> kernel /boot/vmlinuz-2.4.18 root=/dev/hda1 ro
grub> initrd /boot/initrd-2.4.18.img  ←SCSIのHDDの場合は、initdを読み込む必要がある。
grub> boot

 GRUB上では日本語キーボードが認識されていない。このため次の記号については、対応を参考にして入力すればよいだろう。

入力文字()=GRUB上の入力「Shift」+「9」「Shift」+「0」「^」

3. HDD(MBR)へのGRUBインストール

 フロッピーでの起動が確認できれば、次にHDDのマスターブートレコードへGRUBを書き込む作業だ。GRUB上で直接書き込むか、Linux起動後のコマンドラインで実行するかの2通りがある。

・Linuxコマンドラインでの例

# which grub-install
/usr/sbin/grub-install

# /usr/sbin/grub-install /dev/hda
Installation finished. No error reported.
This is the contents of the device map /boot/grub/device.map.
Check if this is correct or not. If any of the lines is incorrect,
fix it and re-run the script `grub-install'.

(hd0) /dev/hda
(hd1) /dev/hdb

・GRUBコマンドラインでの例

grub> install=(fd0)+1 (hd0) (hd0,1)/boot/grub/stage2 0x8000 p

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ