• 作成:

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のやってることを調べるとかでどうにかします.