os-prober が Arch Linux に間違った UUID を返す

os-prober が Arch Linux に間違った UUID を返す

昨日まではすべて正常に動作しており、os-prober は Arch Linux インストール用のメニュー エントリを正常に生成していました。しかし、今日 Arch を起動しようとしたところ、使用しようとした UUID でルート ファイル システムが見つからないというエラーが発生しました。少しいじった後、UUID を使用するのではなく、ルートを実際のパーティション "/dev/sda7" に手動で変更することで Arch を起動できるようになりました。

os-prober が Arch Linux インストールでのみこの無効な構成を生成する原因は何なのか疑問に思っていました。openSUSE および Windows 7 インストールでは問題なく動作します。もう 1 つ注目すべき点は、Arch Linux のブート ラインの末尾に「rw quiet」が追加されたことです。これは以前は行われていなかったことであり、その変更が UUID が正しくない理由と関係があるのではないかと疑問に思っています。

以下に、Arch Linux のメニュー エントリを投稿します。ご覧のとおり、os-prober には正しい UUID を含む --set-root= 'some UUID' 部分がありますが、後で Linux を起動すると、-root=UUID='some other incorrect UUID' になります。

念のため言っておきますが、このマシンには Ubuntu、Arch Linux、openSUSE、Windows 7 がインストールされていますが、Ubuntu をメイン OS として使用し、GRUB とその構成を管理できるようにしています。すべてのオペレーティング システムは最新バージョンです。

menuentry 'Arch (on /dev/sda7)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-b9522736-878c-49e3-b30d-ad65589aa1d9' {
    insmod part_msdos
    insmod ext2
    set root='hd0,msdos7'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7  b9522736-878c-49e3-b30d-ad65589aa1d9
    else
      search --no-floppy --fs-uuid --set=root b9522736-878c-49e3-b30d-ad65589aa1d9
    fi
    linux /boot/vmlinuz-linux root=UUID=ad4103fa-d940-47ca-8506-301d8071d467 rw quiet
    initrd /boot/initramfs-linux.img
}

ご覧のとおり、最初の 2 つの UUID は最後のものと異なります。最初の 2 つは正しく、最後の 1 つは間違っています。最後の UUID を '/dev/sda7' に置き換えると、問題なく起動します。これを行うために grub.cfg を手動で編集しましたが、os-prober が自動的に動作するようになることを望みます。ありがとうございます。

答え1

さて、OS が MBR/EFI に grub をインストールしたものではない場合でも、os-prober が各オペレーティング システムのそれぞれの/bootディレクトリの異なる grub.cfg ファイルを調べる方法についての情報が、この問題を解決するのに役立ちました。

以前の Arch Linux のアップデートにより、/boot ディレクトリに grub.cfg ファイルが残っていたことが判明しました。詳しくは述べませんが、Arch で grub-mkconfig を実行するための適切なものがインストールされていなかったため、代わりに grub.cfg に何らかのテンプレートが含まれていました。これは os-prober がスキャンしていたファイルであり、不適切な UUID を持つファイルでした。私がしなければならなかったのは、Arch Linux で os-prober をオフにすることでした/etc/default/grub。その後、 を実行してsudo grub-mkconfig -o /boot/grub/grub.cfg、Arch 用の適切な grub.cfg ファイルを作成し、Ubuntu の os-prober がこれを適切に使用するようになりました。openSUSE でも同じ手法を使用します。

注目すべき点は、os-prober がこれらのメニュー エントリをすべて独自に生成するのではなく、各 OS のそれぞれの grub.cfg ファイルから取得することで、ディストリビューションごとに異なるデフォルトを設定できる点です。これにより、スプラッシュ付きの静かなブートや、ブート プロセス全体を表示するなど、さまざまなパラメーターが可能になります。

助けてくれてありがとう!

関連情報