我将 GNU/Linux(目前是 Fedora 26,但之前是 Linux Mint 18.2 Sonya)安装在外部硬盘驱动器上,旁边还有我用于存储的 NTFS 分区,并且它可以在我用来安装它的计算机上完美启动。但是,当我尝试在具有不同硬盘驱动器配置的另一台计算机上启动时,它找不到操作系统分区并将我转储到 GRUB Rescue 并显示错误消息error: unknown filesystem
。
hdX,msdosY
我怀疑这是因为 GRUB 使用诸如(X
并且Y
是似乎与标签相对应的整数sXY
,例如sda1
是X
字母和Y
整数)来搜索分区,因为menuentry
my 中的 sgrub.cfg
在设置变量时使用它们root
– 假设这grub.cfg
是MBR 中内容的来源。我的/etc/default/grub
不包含GRUB_DISABLE_LINUX_UUID=true
.
我的问题的解决方案是否可以让 GRUB 使用 UUID 搜索分区 - 如果是这样:我将如何让它这样做?
编辑:这是menuentry
从我的启动 Fedora 的完整内容grub.cfg
:
menuentry 'Fedora (4.11.8-300.fc26.x86_64) 26 (Twenty Six)' --class fedora --class gnu-linux --class gnu --class os --unrestricted $menuentry_id_option 'gnulinux-4.11.8-300.fc26.x86_64-advanced-c1bcc95a-66a8-4bd3-ae64-42be8d83137e' {
load_video
set gfxpayload=keep
insmod gzio
insmod part_msdos
insmod ext2
set root='hd1,msdos2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd3,msdos2 --hint-efi=hd3,msdos2 --hint-baremetal=ahci3,msdos2 --hint='hd1,msdos2' 3483e8e8-38ab-4b47-aec4-1cb475c285d8
else
search --no-floppy --fs-uuid --set=root 3483e8e8-38ab-4b47-aec4-1cb475c285d8
fi
linux16 /vmlinuz-4.11.8-300.fc26.x86_64 root=UUID=c1bcc95a-66a8-4bd3-ae64-42be8d83137e ro rhgb quiet LANG=en_GB.UTF-8
initrd16 /initramfs-4.11.8-300.fc26.x86_64.img
}
我还更喜欢任何不涉及手动编辑的解决方案,grub.cfg
因为所做的任何更改都会在更新 GRUB 时被覆盖。
编辑 2:当我把一切都与 GPT 和 Fedora 26 配合使用后,我决定切换回 Linux Mint,因为那是我最初选择的发行版。然而,事实证明这不起作用。在使用几个不同的发行版(Debian、Ubuntu、CentOS 和 openSUSE)进行测试后。所有基于 RPM 的发行版都有效,而基于 Debain 的发行版都无效。 openSUSE 提供了一个启用/禁用 SecureBoot 支持的选项,当它在禁用的情况下安装时,我得到了与基于 Debian 的发行版相同的结果。
这对我来说没有任何意义,因为我可以验证我测试的至少两台计算机已明确禁用 SecureBoot,但如果没有 SecureBoot 支持,我既无法启动基于 Debain 的发行版,也无法启动 openSUSE。
(澄清一下:在我将硬盘驱动器更改为使用 GPT 之前,RPM 发行版也无法启动。)
答案1
错误:未知的文件系统。
它在一个系统上工作,但在另一个系统上不起作用,这意味着您的 grub 可能不会通过 uuid 搜索分区。
我怀疑这是因为 GRUB 使用 hd0、msdos5 等标签搜索分区,因为我的 grub.cfg 中的菜单条目使用它们 - 假设 grub.cfg 是放入 MBR 中的内容的来源。我的 /etc/default/grub 不包含 GRUB_DISABLE_LINUX_UUID=true。
这证实了我的第一印象。顺便说一句,hd0,msdos5 不是一个标签,而是一个过时的磁盘规范,现在...根据许多因素,hd0 可能是系统中的任何驱动器...更重要的是,当您切换计算机时。
我有以下内容:
linux /boot/vmlinuz-3.16.0-4-amd64 root=UUID=<someUUID> ro quiet nomodeset
我使用它是nomodeset
因为有些主板不喜欢 Linux 改变模式。
检查根分区是否有 uuid 并在 grub 中使用它,如上所述。
答案2
感谢 @TomYan 让我注意到 EFI 分区,一个相对简单的解决方案变得显而易见。
首先,我备份了外部硬盘驱动器上的所有数据,然后完全重新格式化它并使用 GPT 代替fdisk
以前的 MBR。完成此操作后,剩下的就是在 UEFI 模式下重新安装发行版。现在它可以在我迄今为止尝试过的所有计算机上完美启动。
编辑:这只能解决启动基于 RPM 的发行版时的问题。