Windowsをブートさせるためにインストールしているos-proberがgrubのLinux起動メニューを重複して作ってしまう問題の解決
os-prober
os-prober
はインストールしておくだけで,
grub-mkconfig -o /boot/grub/grub.cfg
した時にWindowsを検知して起動メニューに追加してくれる優れものです.
と言うわけで数年前からずっと使っていました.
問題
ところが近年少し困ったことが発生していました. それは重複したエントリを作ってしまうことです.
どういうことかと言うと,
ちょっと前のos-proberはWindowsしか検出しなかったのですが,
今はLinuxディストリビューションも検出するので,
/etc/grub.d/10_linux
が既にGentoo GNU/Linuxのブートメニューを作っていて不要なのにも関わらず,
/etc/grub.d/30_os-prober
の生成として新しくGentoo Linuxのメニューを重複して作ってしまいます.
発生原因がバージョンアップによるものなのかSSDの構成変化によるものなのかは不明です.
あまり困っていなかったので長いこと放置していました.
しかしちょっとだけ困っていて, これまではブートメニューに
- Gentoo GNU/Linux
- Advanced options for Gentoo GNU/Linux
- Windows Boot Manager
しか無かったのでWindowsを起動したい時には下キーを押しっぱなしにして, ディスプレイにメニューが表示されたらエンターを押せば良かったのですが, os-proberがその下にGentoo Linuxのメニューを作ってしまうと一度目視して上キーを2回押す必要があります.
ちょっとだけ面倒です.
雑な解決策は嫌
まず最初に考えたことは30_os-prober
のスクリプトファイルを弄ってLinuxに対応するcase
を消すことです.
ただこれはgrub-mkconfig
時にエラーとして表示されるのと,
本当にGentoo以外のLinuxディストリビューションをデュアルブートしたい時に
(そんな時は訪れそうもないですが…)
忘れててハマりそうなのでやめました.
os-proberのアップデートのたびに対応が必要になるかもしれませんし.
次に考えたことは,
/usr/lib/os-probes/mounted/20microsoft
の数字を大きくして一番下に置くとか,
/usr/lib/os-probes/mounted/90linux-distro
を消去することですが,
これもos-proberの再インストールのたびに対応が必要になります.
ちゃんと/etc/default/grubで設定できるようになっていました
ちゃんと調べた所GRUB_OS_PROBER_SKIP_LIST
変数を設定することで解決可能でした.
Gentoo Forums :: View topic - os-prober creating duplicate entry for main linux system
/etc/default/grub
は編集前提のファイルなのでここに設定をしても何も問題ありませんね.
私の場合は
GRUB_OS_PROBER_SKIP_LIST="2a3ebb02-b199-485e-bae3-9076dceae3e5@/dev/nvme1n1p2"
と記述しました. (UUIDだけで判別可能なのになんでパーティションの名前も必要なんだろう…)
これでgrub-mkconfig
でもSkipped Gentoo/Linux on /dev/nvme1n1p2 by user request.
と正常な表示が行われます.
もし別のディストリビューションをインストールしてもUUIDがスキップされないので気がつくので大丈夫です.
まあその時はまたWindowsが一番下に置かれない問題が発生しますが, そんなことは無さそうなのでその時はgrub-customizerのやってることを調べるとかでどうにかします.