💥
ポータブルSSDにArch Linuxを入れるときはブートローダの場所に気を付けよう
TL:DR;
- EFIバイナリを
/boot/EFI/boot/bootx86.efi
に入れておくといい grub-install
が内部で使っているefibootmgr
になんかバグがあるっぽいefibootmgr
に別途フラグを与えて実行することで回避可能
私が使っているラップトップを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.
このページにはもう一つ,efibootmgr
のバグの可能性が書いてある.
対処法はefibootmgr
に-e 3
(EDD 3.0を強制する)というフラグを渡すというものだが,grub-install
には直接このフラグを渡せない.
そこで,efibootmgr
をラップする./usr/local/bin/efibootmgr
に
と書き,chmod +x /usr/local/bin/efibootmgr
とする.こうすることで,grub-install
でも-e 3
フラグが渡された状態で実行される.
これらの手順を同時に実行したため,根本的解決がどちらで行われたかは分からなかったが,(ほぼArch Wikiの書き写しだけど)参考になれば.