/etc/default/grub
を以下のように、
# press ESC key to display menu.
- GRUB_TIMEOUT_STYLE=menu
+ GRUB_TIMEOUT_STYLE=hidden
編集後、sudo grub-mkconfig -o /boot/grub/grub.cfg
して、GRUBメニューを非表示にしようとした。すると、UEFI画面をぐるぐる回ってOS起動できなくなってしまった。
以前、同じような現象を遭遇した。それはGRUBメニューのデフォルト(GRUB_DEFAULT=
)が起動システム(OS)でなく、UEFI画面UEFI Firmware Settings
を選択していたために、GRUBメニュー非表示にしただけの変更でOSが起動できなくなってしまっていたのだった。
Ubuntu系ならBoot Repairで修復可能
その時は、原因・解決方法が良く分からなかったので、ブートローダ GRUBを Ubuntu Boot Repair その1 - OSの起動に関する問題を修復するアプリの紹介・インストールと起動 - kledgebにあるとおり、 Boot Repair をインストールして、実行することで修復した。
sudo add-apt-repository ppa:yannubuntu/boot-repair
sudo apt install -y boot-repair
boot-repair
Boot Repair を起動したら、おすすめの修復
またはRecommended repair
を選択、確認はい
、またはYes
で修復実行、そして完了となる。
万が一、上手くいかない場合、以下のやり方(sdb
はディスク、X
はパーティション番号で環境毎に異なる)でいけるらしいが試してない。 Boot Repair は実行ログを出力できるので、確認してみるのも良いかも知れない。
sudo mount /dev/sdbX /mnt
sudo mount --bind /dev /mnt/dev/
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt
grub-install /dev/sdb
grub-install --recheck /dev/sdb
update-grub
exit
sudo umount /mnt/sys
sudo umount /mnt/proc
sudo umount /mnt/dev/pts
Arch Linux系はBoot Repairで修復不可
そして、今回、
Alter Linux上で、同事象に再遭遇した。原因は分かっていた。しかし、/boot
、ルート
となるパーティションをmount
して、chroot
(Acrh Linuxだとarch-chroot
)して修復作業するのは、怖かった。 Boot Repair を実行した。しかし、Please enable a repository containing the [grub2] packages in the software sources of Alter Linux (sdb2). Then try again
のようなエラーが出て修復できなかった。
これは自力で直すしかないと腹を括ってググって How to Reinstall the Boot Loader in Arch Linux - Jeremy Morgan’s Tech Blogを発見。
Alter LinuxのインストールメディアからLive USBで実行した。そのためか、efi
のパスが違っていたり、os-prober
がsudo
を付けないと失敗した1。ともあれ、以下の手順で/etc/default/grub
をGRUB_TIMEOUT_STYLE=menu
に戻して、復活した。
$ sudo mkdir /mnt/arch
$ sudo mount -t auto /dev/sda2 /mnt/arch
$ sudo arch-chroot /mnt/arch
# mount -t auto /dev/sda1 /boot/efi
# sudo os-prober
# vim /etc/default/grub
# grub-mkconfig > /boot/grub/grub.cfg
# grub-install --efi-directory=/boot/efi --target=x86_64-efi /dev/sda
# exit
$ reboot
GRUBメニュー非表示
まあ、これに凝りて、GRUBメニュー非表示にするときは、GRUB_DEFAULT=
も確認、変更すべきだし、
Grubで前に起動したシステムを記憶する | Terakinizers’ Tellsのように、
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
としてしまっても良いだろう。ちなみにGRUBメニュー非表示にしても# press ESC key to display menu.
と書いてあるとおり、ESC
キーを押せばGRUBメニューに入れる2。速すぎると、UEFIブートメニューを出してしまう端末もあるので、タイミングが難しい。
UEFIブートメニューの削除
UEFIブートメニューもOSインストールを繰り返すとゴミが溜まっていく一方なのでメモしておく。
$ efibootmgr
BootCurrent: 0001
Timeout: 1 seconds
BootOrder: 0001,0007,0008
Boot0001* alter HD(1,GPT,eed94499-e964-cd49-b330-c61ef647edfa,0x1000,0x96000)/File(\EFI\ALTER\GRUBX64.EFI)
Boot0007* UEFI OS HD(1,GPT,eed94499-e964-cd49-b330-c61ef647edfa,0x1000,0x96000)/File(\EFI\BOOT\BOOTX64.EFI)0000424f
Boot0008* UEFI: Sony Storage Media 0100, Partition 2 PciRoot(0x0)/Pci(0x14,0x0)/USB(3,0)/HD(2,GPT,a9a0241c-393d-4b59-84dc-6d8754fd648e,0x3f9d64,0x40000)0000424f
efibootmgr
3で確認。sudo efibootmgr -b 表示された4桁数字 -B
で削除。これ次にOSをインストールするときやLive USBを起動するときに見易くなる。
-
root
なのにos-prober
を実行するとERROR: mkdir /var/lock/dmraid
と失敗。 ↩︎ -
焦ってるとそういうことをググろうとか、思いつかないのよねぇ。 ↩︎
-
efibootmgr その1 - UEFIブートマネージャーを操作するコマンドの紹介・UEFIブートマネージャーに登録されているエントリーの一覧を表示する - kledgebなど参考されたし。 ↩︎