GRUB2からLVMにインストールしたGRUB2をチェーンロードする
一台のマシンに複数のディストリビューションをインストールしているので、特定のディストリビューションでインストールしたGRUBからブートするのは無理が出てきた。そこで、1段目のGRUBではディストリビューションを選択して、各ディストリビューションの管理する2段目のGRUBでカーネルを選択してブートする構成にすることにした。/boot以外のパーティションはLVMを使って構成している。
最初は各ディストリビューションのrootパーティション(LVM)にgrub-setupコマンドを使用してチェーンロード用のPBRを書き込もうとしたのだが、
$ sudo grub-setup /dev/mapper/vg1-Mint64 grub-setup: warn: Attempting to install GRUB to a partitionless disk or to a partition. This is a BAD idea.. grub-setup: error: embedding is not possible, but this is required when the root device is on a RAID array or LVM volume.
と言われて失敗してしまう。
そもそもPBRにインストールする必要は本当にあるのかと考え直したところ、直接GRUBのイメージをロードして起動し直してやればいいのではないかと気づいた。(起動しないで設定だけ読む手も考えられるが)
GRUB2の本体はcore.imgらしいので、起動に必要そうなモジュールを2段目のGRUBに埋め込んで作り直す。
$ sudo grub-mkimage -p '(vg1-Mint64)/boot/grub' -O i386-pc -o /boot/grub/core.img biosdisk ext2 part_msdos lvm
-pオプションでパーティションの名前を埋め込んでやるのは重要で、これを怠ると起動時に
grub rescue>
となり停止することになる。どのパーティションから設定やモジュールを読めばいいのかが分からなくなっているのだと考えられる。
そして1段目のGRUB2にチェインロードのためのメニューを作成する。
menuentry "Linux Mint 64 bit (on /dev/vg1/Mint64)" { insmod ext2 insmod lvm set root=(vg1-Mint64) multiboot /boot/grub/core.img }