
昨日まではすべてうまくいき、os-proberはArch Linuxインストール用のメニュー項目を正常に作成しました。しかし、今日、Archを実行しようとしたときに、使用しようとしていたUUIDでルートファイルシステムが見つからないというエラーが発生しました。わずかな修正の最後にUUIDを使用する代わりに、ルートディレクトリを物理パーティション「/dev/sda7」に手動で変更してArchを起動できました。
私はos-proberがArch Linuxのインストールに対してのみ間違った設定を生成する原因になっているのだろうか? openSUSEとWindows 7のインストールではまだうまくいきます。注目すべきもう一つのことは、Arch Linuxのブートラインの最後に「rw Quiet」を追加することです。これは以前に行ったことではなく、これがUUIDが間違った理由に関連しているかどうか疑問に思います。
以下に、Arch Linuxのメニュー項目を公開しています。ご覧のとおり、os-proberの--set-root = 'some UUID'部分には正しいUUIDがありますが、後でLinuxを起動するときに-root = UUID = 'some other valid 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は最後のUUIDとは異なります。最初の2つは右で、最後のものは間違っていました。最後のUUIDを「/dev/sda7」に置き換えると正常に起動します。これを行うには、grub.cfgを手動で編集しましたが、os-proberが自動的に再び動作するようにしたいと思います。ありがとうございます。
答え1
/boot
さて、os-proberがMBR / EFIにgrubをインストールするファイルではない場合でも、各オペレーティングシステムの対応するディレクトリでさまざまなgrub.cfgファイルを見つける方法についての情報がこの問題を解決するのに役立ちました。
Arch Linuxの以前の更新により、grub.cfgファイルが/ bootディレクトリに固定されていることがわかりました。あまり詳しく説明せず、Archにgrub-mkconfigを実行するための適切なエントリがインストールされていないため、grub.cfgにいくつかのテンプレートがありました。 os-proberがスキャンしているファイルですが、ファイルのUUIDが正しくありません。私がしなければならないのは、Arch linuxでos-proberをオフにすることです/etc/default/grub
。その後、を実行しsudo grub-mkconfig -o /boot/grub/grub.cfg
、Ubuntuのos-proberが正しく使用するArch用に正しいgrub.cfgファイルが構築されました。 openSUSEでも同じ技術を使います。
1つの注目すべき点は、os-proberがこれらのメニュー項目を独自に生成するのではなく、各オペレーティングシステムの対応するgrub.cfgファイルからメニュー項目を取得するため、各ディストリビューションに異なるデフォルト値を持つことができることです。スプラッシュで開始するか、フルスタートプロセスインジケータ
ご協力ありがとうございます!