直到昨天,一切都正常,並且 os-prober 成功地為 Arch Linux 安裝產生了選單條目。然而今天,當我嘗試啟動 Arch 時,我收到一個錯誤,指出在它嘗試使用的 UUID 處找不到根檔案系統。經過一番修改後,我能夠透過手動將根目錄更改為實際分割區「/dev/sda7」而不是使用 UUID 來啟動 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 invalid UUID'。
澄清一下,我在這台機器上安裝了 Ubuntu、Arch Linux、openSUSE 和 Windows 7,但我使用 Ubuntu 作為主作業系統並允許它管理 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
}
正如您所看到的,前兩個 UUID 與最後一個不同。前兩個是正確的,最後一個是錯誤的。如果我將最後一個 UUID 替換為“/dev/sda7”,則它可以正常啟動。我已手動編輯 grub.cfg 來執行此操作,但我希望 os-prober 恢復自動工作。謝謝。
答案1
好吧,關於 os-prober 如何查找每個作業系統各自/boot
目錄的不同 grub.cfg 檔案的信息,即使該作業系統不是將 grub 安裝到 MBR/EFI 的作業系統,也幫助我解決了這個問題。
事實證明,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 自己產生這些選單項,而是從每個作業系統各自的grub.cfg 檔案中提取,這樣您就可以為每個發行版擁有不同的預設值,因此允許使用不同的參數有安靜的啟動與飛濺,或顯示整個啟動過程等。
感謝各位的幫助!