Ubuntu Live diskからのGRUBの修復(UEFI)

初:2018-07-14

別ディスクに別OSをインストールしたりして色々いじくり回したせいか、 突然GRUB2がコマンドシェルで起動するようになってしまった。
GRUBシェル上からinitrd.imgを指定してbootさせてもBusyBoxがでて止まってしまう。
こういう場合、Live USB(またはCD/DVD)上からGRUBを再インストールするのが定石のようだが、 よく紹介されているのはUEFI以前のもので微妙に詰まったのでUEFI環境での解決策をここに記録する。
その肝はEFIパーティションをマウントすることに尽きる。

まず何より復旧のためのUbuntu Liveディスク(インストールディスク)が必要となる。
自分は4GBぐらいのUSBに16.04LTSのLiveディスクを焼いた。
Liveディスクを起動したら、gpartedなどでディスク構成を確認する。
自分の場合はsdaが(EFIパーティションがある)メインのディスクで、 sda1がEFIパーティション、sda4が復旧したいUbuntu 18.04 LTSのあるパーティションとなっていた。
以下ではこれらをプレースホルダで[ubuntu disk]=sda、[efi partition]=sda1、[ubuntu partition]=sda4と書いておくので環境に合わせて適宜変更すること。

システムとEFIの場所がわかったらこれらをマウントしていく

sudo -s
mount /dev/[ubuntu partition] /mnt
mount --bind /proc /mnt/proc
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
/proc、/dev、/sysは起動時の情報なので今のライブ環境からbindしている。
EFIパーティションを次の場所にマウントする。(マウントポイントが無ければ作る)
mkdir /mnt/boot/efi
mount /dev/[efi partition] /mnt/boot/efi
後はchrootでルートディレクトリを変更してgrub-installをすれば良い。
chroot /mnt
grub-install /sda/[ubuntu disk]
update-grub2
UEFIの環境であれば細かく指定しなくてもgrub-installで大丈夫だと思う。 少なくとも自分はこれでできた。
Live環境からのせいかWindowsブートローダが検出されていなかったので、 自分の場合は復旧後に再度sudo update-grub2を行った。


トップ