日記(日記とは言っていない)

https://zenn.dev/23prime に移行しました。

GRUB2 のブートメニューに Ubuntu が表示されなくなった時のアレ

ある朝目覚めると GRUB2 のブートメニューに Ubuntu が表示されなくなっていました.

あれ?と思ったのですが,そういえば夢でカーネルのアップグレードをしたような…

※詳しくないので,やったことのメモだけです.

一応大まかに環境とか

マシン : Lenovo ThinkPad X260
OS1 : Windows 10 Pro 64bit
OS2 : Ubuntu 16.10 64bit
GRUB2 : 2.02 ~beta2

とりあえず GUI ツールで修復してみる

というわけでおなじみ?の boot-repair 君の出番です.

以前 Windows 側がブートされなくなった時にコイツで簡単に修復できました.

今回は Ubuntu のインストール時に使用したライブメディア(USB メモリ)がそのままだったので,利用しました.

USB からブートしたら,

$ sudo add-apt-repository ppa:yannubuntu/boot-repair
$ sudo apt-get update
$ sudo apt-get install boot-repair
$ boot-repair

すると起動するので,「おすすめの修復」を実行 → リブートします.

…が,残念,状況は変わりませんでした.

手動でブートしてみる

grub> プロンプトからブートしてみます.

GRUB2 のブートメニューが表示されたら "C" をタイプすると,プロンプトが起動します.
おなじみのコマンドもけっこう使えるようです.

Ubuntu は sda5 にあったはずなので,見てみます.

grub> ls
(hd0) (hd0, gpt7) (hd0,gpt6) (hd0,gpt5) (hd0,gpt4) (hd0,gpt3) (hd0,gpt2) (hd0,gpt1)

この (hd0, gpt5) が sda5 に対応します.

grub> cat (hd0,5)/etc/issue
Ubuntu 16.10 \n \l

ありました.
/boot を覗いてみます.

grub> ls (hd0,5)/boot/

するものの…空です.

そういえば boot-repair が sda4 以下に /boot を構成とか言ってたような…

grub> ls (hd0,4)/boot/
grub/ System.map-4.8.0-27-generic abi-4.8.0-27-generic config-4.8.0-27-generic initrd.img-4.8.0-27-generic grub.bak/ memtest86+.bin memtest86+.elf memtest86+_multiboot.bin vmlinuz-4.8.0-27-generic vmlinuz-4.8.0-27-generic.efi.signed efi/

いました. ブートしてみます.

grub> linux /boot/vmlinuz-4.8.0-27-generic root=/dev/sda4
grub> initrd /boot/initrd.img-4.8.0-27-generic
grub> boot

………コケました.

同じパーティションじゃなきゃダメなのかな?
/boot 以下を sda4 から sda5 へ移して,

grub> ls (hd0,5)/boot/
grub/ System.map-4.8.0-27-generic abi-4.8.0-27-generic config-4.8.0-27-generic initrd.img-4.8.0-27-generic grub.bak/ memtest86+.bin memtest86+.elf memtest86+_multiboot.bin vmlinuz-4.8.0-27-generic vmlinuz-4.8.0-27-generic.efi.signed efi/

ここから,

grub> linux /boot/vmlinuz-4.8.0-27-generic root=/dev/sda5
grub> initrd /boot/initrd.img-4.8.0-27-generic
grub> boot

で,一応ブートされました.

GRUB2 ブートメニューに Ubuntu を表示させる

ブートできるのは分かったので,応急処置的にメニューへ表示させます.

/etc/grub.d/40_custom に

menuentry "Ubuntu" {
set root=(hd0,5)
linux /boot/vmlinuz-4.8.0-27-generic root=/dev/sda5
initrd /boot/initrd.img-4.8.0-27-generic
}

とか書いてカーネルのバージョンを指定してやって, /etc/default/grub

GRUB_DEFAULT=n

でデフォルトのハイライトをお好みで設定して,

$ sudo update-grub

したら,一応表示されたので,さしあたりおkということで.
すぐまた困りそうだけど,その時のことはその時考えます.