Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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/efi --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/efi/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 linuxをしたらうまく行きました。

この操作が完了したらまた上の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を先にブートするようにできました!
これで普通に使えると思います。ありがとうございました。

[追記] Failed to start Load Kernel Modulesとなったとき

ある日、起動しようとすると今度は Failed to start Load Kernel Modulesが起きて動作しませんでした。
書いてあるとおりにrootのパスワードで入ると、ほとんどのサービスが起動できておらずネット接続等もできない状態であることが分かりました。

image.png

いろいろ調べてみると、どうやらシステム上で認識されているlinuxのバージョンとインストールされているlinuxのバージョンが違っているようです。

Screenshot from 2019-12-03 11-16-05.png

この場合、bootがうまくマウント出来ていない可能性があるようです。 参考

この方法が正しいのかは分かりませんが、boot以下を削除して以下のようにlinuxを再インストールすることでうまく行きました。

まずはインストールメディアから起動し、上記のSTEP1でarch-chrootまでします。

ルートの中身を消して

# cd boot
# rm -r *
# pacman -S linux base base-devel

で、あとはSTEP2、STEP3をやれば終了です。
\boot自体はrootパーテーションに、\boot\efiにgrubという構成にしていて混乱して時間がかかってしまいました。当たり前ですがbootパーテーションはefiの部分だけでなくて\bootに置くことを徹底することをおすすめします。

gpioblink
色々手をつけすぎた沈没系プログラマーです。やること多くなりすぎると、とりあえず寝て進捗出ないのが日常。ツールの使い方だけでなく、理論もできるだけ取得したいと思ってます。
zli
会津大学公認の技術系サークル LT会や勉強会などを定期的に行なっています
https://www.facebook.com/ZliOfficial/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away