前提
通常の方法
Arch Wikiに載ってる通り、GRUB_DEFAULT=savedとGRUB_SAVEDEFAULT=trueを/etc/default/grubに設定する。
しかし自分の環境では、それらを設定してもWindowsの方(os-proberで追加した)しか保存されなかった。
以前のエントリを記録する方法
/boot/grub/grubenvに保存される。
保存は/etc/grub.d/00_headerに定義されてたsave_entryを/etc/grub.d/10_linuxなどで呼び出す。
tl;dr
grub.confのどこかにset blsuki_save_default=trueを書く。
UKIが原因だと気づくまで
linuxのブートエントリを復元
生成された/boot/grub/grub.cfgをみて、windowsのmenuentryはあるが、linuxのものがないことに気づく。
すると10_linuxだけ実行可能ファイルでない。
grubを再インストールすると、10_linuxが実行可能ファイルになり、grub.confにエントリが追加された。
カーネルパニック
これで起動するとカーネルパニックになった。
メッセージはroot file systemが見つからない。
これが/dev/nvme0n1p3のように指定されてた。
UUIDで指定されない原因
10_linuxを見たりしたがわからなかった。
info grubを見てると、initrdが見つかったらそこから取るとあるので、initrdが見つからないことが問題みたい。
mkinitcpio -Pしても/boot/にない。
実行ログや/etc/mkinitcpio.d/みてるとukiというのを代わりに作ってるらしい。
UKIで保存する方法の調査
GRUBからのUnified Kernel Image (UKI)の起動はukiコマンドでやってるみたい(/etc/grub.d/15_uki)。
なので普通のmenuentryではない。
これでやる方法を色々調べると、ukiコマンド自体とても新しい(2025 8月)らしい。
そのパッチで、save entryとかの文字列があって、grubのドキュメントで検索をかけてみたら、blsuki_save_defaultという環境変数があったら、保存するらしい。
grub-editenvで追加してみたが何も変わらず。
infoを読むと、setコマンドで定義できるとある。
ので、とりあえず15_ukiを編集して、set blsuki_save_default=trueでgrub-mkconfigしたら、期待通りに動いた。
新しい機能っぽく誰の記事もヒットしなかった。
本当はGRUB_SAVEDEFAULTを反映させるべきだと思う。
Comments
Reply to this post (misskey) to leave a comment.
Reply