💥

ポータブルSSDにArch Linuxを入れるときはブートローダの場所に気を付けよう

TL:DR;

私が使っているラップトップをWindowsとArch Linuxのデュアルブートにした.

デュアルブートといっても,1つのSSDにこれらを共存させるのは何かの拍子にぶっ壊れてしまう危険性がある. そこで,ポータブルSSDにArch Linuxをインストールし,取り付けている間はArch,外すとWindowsが起動するような環境とすることにした.

インストールは問題なく完了し,何度か再起動をしてSwayの導入まで進めた.

が,一度Windowsへ戻ると二度とBIOS(UEFI)がArchを認識しない状態になってしまった.

全部Arch Wikiに書いてた

適当にググりながらヒットしたのがこのページ.やはりArch Wikiは聖書

Unified Extensible Firmware Interface#ファームウェアのメニューにUEFIブートローダーが表示されない - ArchWiki

一部のファームウェアはカスタムのブートエントリをサポートしていません。そのようなファームウェアはハードコードされたブートエントリからしか起動しません。

つまり,/boot/EFI/hoge/とかにEFIバイナリを置いても,一部の環境では認識してもらえてないかもよ!とある.

もちろん対処法もあり,/boot/EFI/boot/bootx64.efiに置くとたいていの場合認識してもらえるそうだ.生成されたEFIバイナリを手でコピーしてもいいが,grub-installコマンドに--removableフラグが用意されているのでそれを使えばOK.

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

このページにはもう一つ,efibootmgrのバグの可能性が書いてある. 対処法はefibootmgr-e 3(EDD 3.0を強制する)というフラグを渡すというものだが,grub-installには直接このフラグを渡せない.

そこで,efibootmgrをラップする./usr/local/bin/efibootmgr

/usr/local/bin/efibootmgr
#!/bin/sh
exec /usr/bin/efibootmgr -e 3 "$@"

と書き,chmod +x /usr/local/bin/efibootmgrとする.こうすることで,grub-installでも-e 3フラグが渡された状態で実行される.

これらの手順を同時に実行したため,根本的解決がどちらで行われたかは分からなかったが,(ほぼArch Wikiの書き写しだけど)参考になれば.

参考文献

Unified Extensible Firmware Interface - ArchWiki

Arch Linuxのインストール

Linuxの起動の流れ #Linux - Qiita