外部 USB 驱动器上的 Linux 无法在其他计算机上启动

外部 USB 驱动器上的 Linux 无法在其他计算机上启动

我将 GNU/Linux(目前是 Fedora 26,但之前是 Linux Mint 18.2 Sonya)安装在外部硬盘驱动器上,旁边还有我用于存储的 NTFS 分区,并且它可以在我用来安装它的计算机上完美启动。但是,当我尝试在具有不同硬盘驱动器配置的另一台计算机上启动时,它找不到操作系统分区并将我转储到 GRUB Rescue 并显示错误消息error: unknown filesystem

hdX,msdosY我怀疑这是因为 GRUB 使用诸如(X并且Y是似乎与标签相对应的整数sXY,例如sda1X字母和Y整数)来搜索分区,因为menuentrymy 中的 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 的发行版时的问题。

相关内容