Ubuntu24.04とWindowsのデュアルブートに設定してあるマシンで、起動後のgrub2選択画面が表示されずに毎回Windowsが起動してしまう。変化点としてWindows側でのWindows Updateが考えられる。こちらを復旧させた際の備忘を記載する。

USB起動する

Ubuntu24.04が起動可能なUSBメモリを作成して、マシンをUSBメモリから起動させる。筆者Dellマシンの場合は起動直後にF12キーを連打し、One time boot selectionで表示されるUSBメモリ名称を選択すれば行えた。その後USBメモリのGRUB2選択画面で、一番上の通常Ubuntuを選択し、普通に起動。

Try or install ubuntuから、installではなくTryを選択する。

grub-install

terminalから下記を実行

sudo mkdir /mnt/boot
sudo mount /dev/sda2 /mnt/boot
sudo mkdir /mnt/ubuntu
sudo mount /dev/sda5 /mnt/ubuntu
  • /dev/sda2 : /boot/efiが存在するパーティション。通常500MB程度。
  • /dev/sda5 : Ubuntuの/がマウントされているパーティション。通常、数十ギガバイト。

この時点で、/mnt/boot/配下を確認し、shimx64.efi / grubx64.efiが存在していれば正常と思われる。Windows Updateの影響かはわからないがWindowsしか起動しなくなった当初/boot/efi/EFI/ubuntuがフォルダではなくファイルとなっていた

cd /mnt
ls /boot/efi/EFI/ubuntu/ -l
total 4378
-rwxr-xr-x 1 root root     108 Dec 22 08:40 BOOTX64.CSV
-rwxr-xr-x 1 root root     126 Dec 22 08:40 grub.cfg
-rwxr-xr-x 1 root root 2656136 Dec 22 08:40 grubx64.efi
-rwxr-xr-x 1 root root  856280 Dec 22 08:40 mmx64.efi
-rwxr-xr-x 1 root root  966664 Dec 22 08:40 shimx64.efi

このubuntuフォルダは後にgrup-installコマンドでインストールできるため、その際は他のファイルを誤って削除しないように細心の注意を払いながら、なぜかフォルダではなくファイルとなっていたubuntuファイルを削除し、再インストールした。

cd /mnt/boot/efi/EFI
rm -rf ubuntu

上記手順は、次に示すgrub-installを試したうえで「/mnt/boot/efi/EFI/ubuntuが作成できない」などのメッセージが出た際に行えばよい。通常行う必要はないが、それを言えばこの復旧も通常行う必要はないわけで何等かの臨機応変な対応は求められるだろう。

sudo grub-install --efi-directory=/mnt/boot --boot-directory=/mnt/ubuntu/boot /dev/sda
Installing for x86_64-efi platform.
Installation finished. No error reported.

USB起動しているUbuntuから、マシンにインストールされているUbuntuの復旧を行うためgrub-installに追加でオプションを指定している。--efi-directory=/mnt/bootは、末尾にスラッシュを余剰でつけてしまうとgrubがインストールされる階層がおかしくなったため注意。末尾のスラッシュ込みで正しく指定できていると、No error reportedのメッセージとともに/boot/efi/EFI/ubuntu/の内容が正常例と同じ状態になっていることが確認できる。

update-grub2でgrub.cfgを更新

現時点でgrubのインストールは行えている。なんの変化点でどこまで破損しているか次第だがgrub.cfgという設定ファイルを下記の方法で更新した。

sudo mount --bind /sys /mnt/ubuntu/sys
sudo mount --bind /proc /mnt/ubuntu/proc
sudo mount --bind /dev /mnt/ubuntu/dev
sudo chroot /mnt/ubuntu
update-grub2
exit
sudo mkdir /mnt/boot/efi/grub/
sudo cp /mnt/ubuntu/boot/efi/grub/grub.cfg /mnt/boot/efi/grub/grub.cfg

BIOSセットアップからshimx64.efiを指定

マシン次第だが、DellノートPCではここまでの手順で手を加えていた/boot/efi/EFI配下のフォルダ一覧を参照して当該ブートオプションでどのefiファイルを使用するかを選択することができた。この際、grub-installで復旧させてやったshimx64.efiを指定してオプションを作成し、Windows Boot Managerよりも先に起動されるように選択することで、以前の状態に戻すことができた。