GRUB chainloderによるマルチブートの設定

Momonga Linux/マルチブート環境 を参考に、GRUBを二段階使うことで複数のLinuxディストリビューションによるマルチブート環境を作りました。ここで、二台めのHDD (/dev/hdb) にインストールしたLinuxの起動に少しはまりました。

具体的には、以下のようなパーティション構成を作りました。

MBRGRUBをインストールして、最初に /dev/hda2 に記述したブートメニュー (menu.lst) が表示されます。ここでGentooを選択すると、/dev/hdb6 にインストールしたGRUBをchainloaderを使って起動するという作りにしています。

最初、Ubuntu用 (/dev/hda2) の /boot/grub/menu.lst を以下のように記述しました。

# Ubuntu 6.10
title           Ubuntu, kernel 2.6.17-11-generic
root            (hd0,1)
kernel          /vmlinuz-2.6.17-11-generic root=/dev/hda5 ro quiet splash locale=ja_JP
initrd          /initrd.img-2.6.17-11-generic
quiet
savedefault
boot

# Gentoo chainloader
title Gentoo
rootnoverify (hd1,5)
chainloader +1

この状態で起動し、「Gentoo」を指定すると、以下のようなメッセージが出て起動に失敗しました。

Error 18: Selected cylinder exceeds max supported by BIOS

どうやら /dev/hdb6 をBIOS経由で読みに行って失敗している様子。本来はBIOSを経由せずにGRUBから直接読みにいけるはず…と思って GRUBのマニュアル を参照したところ、以下のように書かれていました。

13.3.31 root

Set the current root device to the device device, then attempt to mount it to get the partition size (for passing the partition descriptor in ES:ESI, used by some chain-loaded boot loaders), the BSD drive-type (for booting BSD kernels using their native boot format), and correctly determine the PC partition where a BSD sub-partition is located.
(略)

13.3.32 rootnoverify

Similar to root (see root), but don't attempt to mount the partition. This is useful for when an OS is outside of the area of the disk that GRUB can read, but setting the correct root device is still desired. Note that the items mentioned in root above which derived from attempting the mount will not work correctly.

上記の内容を完全には理解できていませんが、起こっている現象と比べて、以下のように解釈しました。

試しに、最初のmenu.lst中の rootnoverify (hd1,5) の部分をroot (hd1,5) に変えてみたところ、正常にブートする (実際には、/dev/hdb6 にインストールしたGRUBのメニュー画面が現れる) ことを確認しました。