なにかの拍子にEFIブートのgrubの項目が消えてしまった。 復旧方法を調査中。うまくいっていないようなので、あくまでメモとして残しておく。
1. Linuxで復旧
grubが起動できないので、当然ながら対象のLinuxも起動できない。 なので、USBライブメディアでLinuxを起動し、chrootでインストール済の環境に入ってgrubを復旧する。
インストール済のLinuxに関連するパーティション、具体的には/, /boot/, /boot/efi
などをマウントしておく。
chroot環境を準備する。
mkdir chroot sudo mount --bind /media/root ./chroot sudo mount --bind /media/boot ./chroot/boot sudo mount --bind /media/esp ./chroot/boot/efi sudo mount --bind /proc ./proc sudo mount --bind /dev ./dev sudo mount --bind /dev/pts ./dev/pts sudo mount --bind /sys ./sys sudo mount --bind /sys/firmware/efi/efivars ./chroot/sys/firmware/efi/efivars
sudo chroot ./chroot /bin/bash --login -i grub-install /dev/nvme0n1 # ディスク名は適宜変更 exit
以上。
ただし、当方のマシンではなぜかこれをしても、項目が消えてしまった。原因不詳。
2. Windowsで復旧
Windowsのbcdeditで復旧する。
管理者権限でターミナルを起動。
EFIブートの項目を列挙
bcdedit /enum firmware /v
descriptionがWindows Boot Managerとなっているものの、identifierを確認し、メモする。
この項目をコピーする。
bcdedit /copy {identifier} /d "Ubuntu"
注:powershellの場合はbcdeditの直後に--%
を追加してbcdedit --% /copy ...
とする。
再びEFIブートの項目を列挙
bcdedit /enum firmware /v
descriptionがUbuntuとなっているものの、identifierを確認し、メモする。
bcdedit /set {identifier} path \EFI\ubuntu\grubx64.efi