d.sunnyone.org
sunnyone.org

ページ

2015-11-08

失われたUEFIブートエントリを取り戻す(Ubuntu インストールメディアから)

ある夕暮れ。VT-xを有効にすべくBIOS設定画面をいじっていて、再起動しようと思って「Reset」ボタンを押したら、再起動ボタンではなくFactory Resetボタンだった。設定が工場出荷時に戻されるのはまぁ戻せばいいのだけど、問題はブートエントリまで消されてしまったために、Ubuntuが起動できなくなってしまったということだ。

危険なResetボタン

update-grubすれば万事OKよね、と思っていたがそうでなかったので、UbuntuのUSBメモリを使って復旧する手順を記録しておく。

復旧手順

「Rescue a broken system」でレスキューモード起動

 Ubuntu 14.04 Server のUSBメモリをUEFIで起動すると、grubメニューが現れる。その中の「Rescue a broken system」を選んで起動する。

Serverなのは手元にあっただけで、Desktopなら普通のliveブートできるからもうちょっと楽かもね。

rootをインストール先にしてshell起動

言語だとかを選びウィザードを進めていくと、ルートファイルシステムを選ぶ画面が現れるので、Ubuntuをインストールしたパーティション、例えば/dev/sda6を選択後、「Execute a shell in /dev/sda6」を選んで、シェルを起動する。

efibootmgrでエントリが存在しないことを確認

efibootmgr あるいは efibootmgr -v(-vは詳細情報を表示)と叩くと、記録されたブートエントリの一覧が確認できる。

以下は例。長いID他が出ているが本筋ではないので省略した。
# efibootmgr -v
BootCurrent: 0015
Timeout: 0 seconds
BootOrder: 0000,0012,0013,0014
Boot0000* Windows Boot Manager HD(2,fa800,82000,(略))File(\EFI\Microsoft\Boot\bootmgfw.efi)WIND
OWS.........x...B.C.D.O.B.J.E.C.T.=.(略)
Boot0010  Setup FvFile((略))
Boot0011  Boot Menu FvFile((略))
Boot0012* Built-in Storage Device VenMsg((略))
Boot0013* USB Device VenMsg((略))
Boot0014* Network VenMsg((略))
Boot0015* Onetime Boot Device VenMsg((略))
Boot0016* VaioNextBoot Device VenMsg((略))
UbuntuやLinuxらしき項目は見つけられない。

/boot/efiにEFIパーティションをマウント

ブートローダが格納されているパーティションを/boot/efiにマウントする。今回は/dev/sda2なので以下の通り。
# mount /dev/sda2 /boot/efi
パーティションがどこなのかは、fdisk -lやparted /dev/sdX print、efibootmgr -vの出力、/etc/fstabの記述などから判断する。

grub-installによる復旧

grub-installでブートローダをインストールする。
# grub-install --bootloader-id ubuntu /dev/sda
もっとローレベルにefibootmgr -cでもできると思うが、試していない。

efibootmgrによる確認

efibootmgr -vを実行し、ubuntuの行があること、その行がBootOrderの先頭にあることを確認する。
# efibootmgr -v
BootCurrent: 0015
Timeout: 0 seconds
BootOrder: 0001,0000,0012,0013,0014
Boot0000* Windows Boot Manager HD(2,fa800,82000,(略))File(\EFI\Microsoft\Boot\bootmgfw.efi)WIND
OWS.........x...B.C.D.O.B.J.E.C.T.=.(略)
Boot0001* ubuntu HD(2,fa800,82000,(略))File(\EFI\ubuntu\shimx64.efi)
Boot0010  Setup FvFile((略))
Boot0011  Boot Menu FvFile((略))
Boot0012* Built-in Storage Device VenMsg((略))
Boot0013* USB Device VenMsg((略))
Boot0014* Network VenMsg((略))
Boot0015* Onetime Boot Device VenMsg((略))
Boot0016* VaioNextBoot Device VenMsg((略))

これで再起動して、Grubメニューが出てきたら成功。

参考:Restore Ubuntu UEFI Boot Entries after BIOS Update
---

このブートエントリ飛ばしちゃった問題は某co-edoで起きていたのだけど、うっかり復旧しようとしてたら確実にこれで時間を使いきっていた。あきらめて正解であった。

0 件のコメント:

コメントを投稿