今回は、HDLMで構成されたRHELサーバにて、GRUB設定ミスによってOSが起動できなくなったため、レスキューモードからGRUBを再構築して復旧するまでの手順をまとめました。
🧭 背景と環境構成
- OS:RHEL 8.6
- ブート:UEFI(EFIパーティションあり)
- マルチパス構成(HDLM利用)
- /:
/dev/mapper/mpathb5 - /boot:
/dev/mapper/mpathb2 - /boot/efi:
/dev/mapper/mpathb1
🛠 発生した問題
Liveレスキューモードで起動後、GRUB構成ファイルを生成しようとすると次のエラーが発生:
grub2-editenv: error: cannot rename the file /boot/grub2/grubenv.new to /boot/grub2/grubenv: No such file or directory.
🔎 原因
/boot/grub2/grubenv は実体ファイルではなく、/boot/efi/EFI/redhat/grubenv へのシンボリックリンク。
そのため、EFIパーティションがマウントされていないと grubenv を更新できない状態となっていた。
✅ 復旧作業の流れ
1. 必要なパーティションをマウント
mount /dev/mapper/mpathb5 /mnt/sysroot
mount /dev/mapper/mpathb2 /mnt/sysroot/boot
mount /dev/mapper/mpathb1 /mnt/sysroot/boot/efi
mount --bind /dev /mnt/sysroot/dev
mount --bind /proc /mnt/sysroot/proc
mount --bind /sys /mnt/sysroot/sys
2. chroot でルート環境へ入る
chroot /mnt/sysroot
3. grubenv を作成(EFIがマウントされている前提)
grub2-editenv /boot/grub2/grubenv create
4. grub.cfg を再生成
grub2-mkconfig -o /boot/grub2/grub.cfg
5. GRUBブートローダを再インストール(UEFI)
grub2-install \
--target=x86_64-efi \
--efi-directory=/boot/efi \
--bootloader-id=redhat \
--recheck
6. アンマウントして再起動
exit
umount /mnt/sysroot/boot/efi
umount /mnt/sysroot/boot
umount /mnt/sysroot/dev
umount /mnt/sysroot/proc
umount /mnt/sysroot/sys
umount /mnt/sysroot
reboot
📌 補足メモ
grubenvは GRUB の変数管理ファイル。ないと一部の機能(メニュー保存など)が使えない。- EFI環境では grubenv の実体は
/boot/efi/EFI/redhat/配下にある。 - grubenv に書き込めない場合、EFIパーティションのマウント漏れが原因であることが多い。
✅ まとめ
EFI + マルチパス(HDLM)構成では、Live環境から復旧する場合でも/boot と /boot/efi を正しくマウントしてから chroot に入ることが重要でした。
同様の構成でGRUBが壊れたとき、この記事が参考になれば幸いです。


コメント