Linux: GRUB2がGPTとMBRが混在したLVM論理ボリュームを認識できない

GRUB2が複数のパーティション方式のLVM物理ボリュームを持つLVM論理ボリュームを認識できない問題の対策について記載します。

1 GRUB2がGPTとMBRが混在したLVM論理ボリュームを認識できない

例えば、パーティション方式GPTのLVM物理ボリュームを使うLVM論理ボリュームがある場合に、新たにパーティション方式MBRのLVM物理ボリュームをLVM 論理ボリュームに追加すると、GRUB2がLVM論理ボリュームを起動時に認識できなくなります。

error: disk 'lvmid/<snip>' not found.
Entering rescue mode...
grub rescue>

0001_grub2-gpt-mbr-lvm.png

2 原因

これはGRUB2にGPT用のモジュールが組み込まれているが、MBR用のモジュールが組み込まれていないことが原因です。 MBR用のモジュールが組み込まれているが、GPT用のモジュールが組み込まれていないケースもあります。

LVM論理ボリュームがある場合、grub-installはLV PVのパーティション方式を調べて必要なモジュールを割り出し、grub-mkimageとgrub-bios-setupを実行します。

$ sudo grub2-install -v /dev/vda
<snip>
grub2-install: info: grub-mkimage <snip>
--compression 'auto'  'ext2' 'part_gpt' 'lvm' 'biosdisk'
.
<snip>
grub2-install: info: grub-bios-setup <snip> '/dev/vda'.
<snip>

grub-installが実行されるのはLinuxインストール時とGRUB2パッケージのアップグレード時です。

  • Linuxインストール時にはLVM論理ボリュームはGPTのみだったので、 grub-installはpart_gptだけをGRB2に組み込みこまれる。
  • インストール後にMBRのLVM物理ボリュームをLVM論理ボリュームを追加する。
  • 再起動後にpart_msdosが組み込まれていないGRUB2がLVM論理ボリュームを認識できなくなる。

3 対策

GRUB2の更新時に強制的に組み込むモジュールを選択できれば良いのですが、少なくともDebian系は指定することができません。

対策は3つあります。(3)が簡単だと思います。

  • (1) 最初のLVM物理ボリュームのパーティション方式に追加するLVM物理ボリュームで合わせる。ただし、最初のLVM物理ボリュームのパーティション方式は環境依存である。
  • (2) GPTのLVM物理ボリュームしかない状態で手動でgrub-mkimageと grub-bios-setupを実行して、part_gptとpart_msdosを組み込むようにする。ただし、GRUB2パッケージの更新によるgrub-installで上書きされるので、その都度、手動でgrub-mkimageとgrub-bios-setupを実行する必要がある。また、LVMのUUIDは環境依存である。
  • (3) LVM物理ボリュームが追加される度にgrub-installを実行する。