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
}