Posted at

UEFIブートでGrubが消えたときにやること(matebook x pro)

ArchLinuxとWindows10のデュアルブートで、Windowsの大型アップデートとかでGrubが消えるたびに再インストールしているのでメモ

ほとんどの情報は既出ですが、BIOSの操作とか、文字が小さい問題とか、matebook特有のことも書いていきます(といっても大したことないけど)


STEP0: ホントにgrubが消えたのか確認

手持ちの「Matebook X Pro」には、insydeH20が入っています。F2でBIOS設定画面の表示で、F12でデバイスを選択してbootできます。

F12を押しながら電源を入れた画面で、まずは本当にgrubがなくなっているか確認してみました。

Screenshot from 2019-11-09 08-08-56.png

Grubがない -> STEP1へ

Grubがある -> STEP4に進む。うまくいかなかったら、STEP1をやったあと、STEP3。それでもダメならSTEP2もしてみる


STEP1: USBブートでの設定とSSD内のLinuxに入るまで

まずはUSBからArchLinuxを起動する。起動する方のWindowsで、archのisoを落としてきて balenaEtcher で焼いちゃいます。


キーボードの配列がおかしい

loadkeys jp106


文字が小さすぎる!

デフォルトで入っているコンソールフォントの中で、一番大きいものを指定します。多分これ。

setfont latarcyrheb-sun32


SSDのLinuxをマウントしていく

lsblkで容量とかフォーマットを見てそれっぽいものをマウントするらしい。(ここでマウント漏れとかが出るから、fstabでの確認[次項]はしたほうがいい!

mount /dev/nvme0n1p6 /mnt

mount /dev/nvme0n1p7 /mnt/home


fstabを開いてホントにそれでいいか確認

/etc/fstab に元のマウント情報が含まれているのでマウントが合ってるか確認しておきます。マウントし忘れてて穴にハマったりした。。

$ cat /mnt/etc/fstab

# Static information about the filesystems.
# See fstab(5) for details.

# <file system> <dir> <type> <options> <dump> <pass>
# /dev/nvme0n1p6
UUID=abedad77-97c7-42f2-a2e6-0f7d010651f6 / ext4 rw,relatime 0 1

# /dev/nvme0n1p1 LABEL=SYSTEM
UUID=DE8B-DACA /boot/efi vfat rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,utf8,errors=remount-ro 0 2

# /dev/nvme0n1p7
UUID=c949921b-691f-495e-b637-61dfb72bbac9 /home ext4 rw,relatime 0 2

というわけではい、今回の場合は /dev/nvme0n1p1/boot/efiにマウントするのを忘れていたみたいです。マウントしておきます。

mount /dev/nvme0n1p1 /mnt/boot/efi


マウントした環境に入って作業する

arch-chroot /mnt


STEP2: grub-installでUEFIを復活!

まずはUEFIのメニューにgrubが復活するようにやっていきましょう!!といってもこれを実行するだけです。

grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=arch_grub

No error reported.で終了すれば成功です!

もし、grub-install: error: cannot find EFI directory. 的なエラーが出た場合は、 「fstabを開いてホントにそれでいいか確認」に戻って正しくマウントできているか確認してみてください。

ここまでの作業が終わったら一旦再起動して確認してみましょう。F12のメニュー上にgrubが出ていると思います。それを選択して、通常通りarchが起動するようならSTEP4、起動しないならSTEP3に進んでください。


STEP3: grub-mkconfigでgrubの設定ファイルを更新

STEP2までで成功しない場合は、grubの設定自体がうまくいってないのかも。。

そんな場合は、次のコマンドでうまくいくはずです。

grub-mkconfig -o /boot/grub/grub.cfg

ただし、僕の場合、これをそのままやっても「Windowsしか起動できないgrub」ができてしまいました。

Screenshot from 2019-11-09 08-52-15.png

これの原因は、grub-mkconfigがLinuxを認識できていないからです。

具体的には、起動するために、下のような「vmlinuz-linux」含むimgファイルが必要でした。

# pwd

/boot/efi
# ls
EFI grub initramfs-linux-fallback.img initramfs-linux.img intel-ucode.img vmlinuz-linux

僕はかろうじて\bootのバックアップをとっていたので、そこからコピーしました。未確認ですがこれをインストールするには、 pacman -S kernelをすればいいらしいです。(ソースは忘れました。。)

この操作が完了したらまた上のgrub-mkconfigを実行して設定ファイルを更新します。


STEP4: bootの優先順位をあげる

これでメニューからarchを立ち上げられるようになりましたが、普通に起動してもwindowsのほうが起動順序が高くてgrubに行きません。僕が知る限り、matebookのBIOSから起動順序の変更はできなそうなので、コマンドでやってみます。

# efibootmgr 

Timeout: 0 seconds
BootOrder: 0001,0002,2001,2002,2003
Boot0000* EFI USB Device (TOSHIBA)
Boot0001* Windows Boot Manager
Boot0002* arch_grub
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network

# efibootmgr -o "0002,0001,2001,2002,2003"
Timeout: 0 seconds
BootOrder: 0002,0001,2001,2002,2003
Boot0000* EFI USB Device (TOSHIBA)
Boot0001* Windows Boot Manager
Boot0002* arch_grub
Boot2001* EFI USB Device
Boot2002* EFI DVD/CDROM
Boot2003* EFI Network

で、arch_grubを先にブートするようにできました!

これで普通に使えると思います。ありがとうございました。