2007/09/08

The file /boot/boot/grub/stage1 not read correctly.

以前メインマシンで/dev/hdaにCFカードを、/dev/sdaにSATAディスクをつけてUbuntu 7.04を入れたけれど、なぜかインストーラーが中断してgrubが使えず、手動でliloを選択するしかありませんでした。

このままliloでも困らないけれどgrubが入らない理由がわからなかったので、検証用に元々Ubuntu 7.04なPCにCFカードとアダプターSD-IDE2CF-B1 を追加して、Ubuntu 7.04を再導入しました。

やはりメインマシンと同じように導入時には、grubの実行時にインストーラーがエラーを表示して手動でliloを選択しました。導入後に grub-install を実行すると /boot/grub/stage1 が正しく読めないというメッセージが表示されてしまいます。

調べていく中で、"fdisk /dev/hda" でみたところパーティションのIdがFATのままでした。 ファイルシステムはext3になっているし、インストーラーでもext3を選択したのだけれど、インストーラーで失敗したのはこれが関係していそうです。

デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         695      250176    6  FAT16
とりあえずインスーラーの問題なのかどうか調べるのは後にして、手動でIdを"83"に変更して、grub-install を実行すると、エラーなく実行できました。

ここまでの結果を元にメインマシンをgrubに対応させてみました。

$ sudo /sbin/fdisk /dev/hda

コマンド (m でヘルプ): p

Disk /dev/hda: 256 MB, 256204800 bytes
15 heads, 48 sectors/track, 695 cylinders
Units = シリンダ数 of 720 * 512 = 368640 bytes

デバイス Boot      Start         End      Blocks   Id  System
/dev/hda1   *           1         695      250176    6  FAT16

コマンド (m でヘルプ): t
Selected partition 1
16進数コード (L コマンドでコードリスト表示): 83
領域のシステムタイプを 1 から 83 (Linux) に変更しました

コマンド (m でヘルプ): w
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。

警告: 領域テーブルの再読込みがエラー 16 で失敗しました: Device or resource busy。
カーネルはまだ古いテーブルを使っています。
新しいテーブルは次回リブート時に使えるようになるでしょう。

警告: DOS 6.x 領域を作成、または変更してしまった場合は、
fdisk マニュアルの追加情報ページを参照してください。

$ cat device.map 
(hd0)   /dev/hda
(hd1)   /dev/sda
(hd2)   /dev/sdb
(hd3)   /dev/sdc
(hd4)   /dev/sdd

$ cat /boot/boot/grub/menu.lst
default         0
timeout         10

title           Ubuntu, kernel 2.6.20-16-generic
root            (hd0,0)
kernel          /vmlinuz-2.6.20-16-generic  root=/dev/md0 ro quiet splash
initrd          /initrd.img-2.6.20-16-generic
savedefault

$ sudo grub-install --root-directory=/boot /dev/hda
Installation finished. No error reported.
This is the contents of the device map /boot/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/sda
(hd2)   /dev/sdb
(hd3)   /dev/sdc
(hd4)   /dev/sdd
hd1からhd4はRAID5で全部md0として動くけど、md0とかっていう表記はないんだよねぇ。 大丈夫かなぁ、と不安になったけれど、ここで再起動して無事にCFカード(hda)のMBRから起動しました。

0 件のコメント: