14.04 USB 安装 GRUB2 问题

14.04 USB 安装 GRUB2 问题

我使用运行 XP 的旧戴尔电脑将 14.04 x64 安装到 Corsair Voyager GTX 128 GB 上。该驱动器在那台戴尔电脑上运行良好。我将其移至松下 Toughbook(较新的 UEFI、Win7 x64、禁用 UEFI、启用 CSM、传统启动等),它也运行良好。但是,我认为 GRUB2 启动顺序很奇怪。在 GRUB 选项中,它仍然显示启动到 XP Professional(原始主机笔记本电脑)的选项。此外,查看 GRUB 命令,如果我将其安装到双硬盘计算机中以将 sdX 更改为正确的设备,grub 将如何知道?

另一个问题是,当尝试在新的 Dell Alienware R13(UEFI、Win 8.1 x64、UEFI 禁用、传统启动、AHCI 模式)上使用它时,它总是无法正确启动。在启动过程中,它似乎试图root从主机 SSD 而不是 USB 启动……但 USB 未显示在输出中grub> ls,所有输出都是未找到文件系统。

最终目标是在此 USB 上安装可运行的 14.04,使其可以在 BIOS 和传统启动的 UEFI 主机笔记本电脑上运行。您觉得如何?

更新——在sudo update-grub启用了旧版 UEFI Win7 Toughbook 之后,它确实更新了 grub,但更新到了 Win7 选项。grub 如下所示:

    setparams: 'Ubuntu'

            recordfail
            load_video
            gfxmode $linux_gfx_mode
            insmod gzio
            insmod part_msdos
            insmod ext2
            set root='hd0,msdos1'
            if [ x$feature_platform_search_hint = xy ]; then
              search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos1 --hint-baremetal=ahci0,msdos1 <UUID1>
            else
              search --no-floppy --fs-uuid --set=root <UUID1>
            fi
            linux         /boot/vmlinuz-3.16.0-30-generic root=<UUID> ro quiet splash $vt_handoff
            intrd          /boot/initrd.img-3.16.0-30-generic

更新 2--- 根据 @Rod Smith 的建议,我使用 Rufus 构建了一个 16.04 安装程序,果然,它可以在 BIOS 和 EFI 模式下在戴尔上启动。我猜是驱动程序问题。现在将它安装到我的好棒上。

答案1

这里发生了几件事。我会尽力解决所有问题。

中央管理学院

兼容性支持模块 (CSM) 为在基于 EFI 的计算机上启动 BIOS 引导加载程序(以及操作系统)提供支持。这也称为“旧版”支持。因此,可以使用三个名称来指代同一件事——BIOS、CSM 和旧版。请注意,您不能在基于 EFI 的计算机上禁用 EFI——计算机上的固件一个 EFI,句号。(在一些较旧的 x68/x86-64 EFI 实现中存在部分例外,例如技嘉的混合 EFI,但它们在固件历史中只是一个脚注。)您最多可以告诉它忽略 EFI 模式引导加载程序——在许多计算机上,即使您这样做,它也更多地被视为建议而不是命令;在某些情况下,计算机仍可能启动 EFI 模式引导加载程序。另一方面,禁用 CSM 通常更可靠;这通常会阻止任何 BIOS 模式引导加载程序在计算机上运行。

大多数搭载 Windows 8 及更高版本的计算机默认配置为以 EFI 模式启动仅有的。它们还默认配置了安全启动。因此,如果您想要一个通用启动介质,它应该支持 BIOS 模式和 EFI 模式启动,并且支持后者的安全启动。这是可能的,但设置起来可能相当繁琐。本网站上有几个问题/答案涉及此主题:

GRUB 启动选项

GRUB 的启动菜单由名为 的文件控制grub.cfg,该文件通常位于/boot/grub目录中。此配置文件通常由 GRUB 附带的脚本生成,并针对特定安装进行定制。因此,当您在硬盘上装有 Windows XP 的系统上安装到 USB 闪存驱动器时,您的grub.cfg文件将包含该 Windows XP 安装的条目,并且该条目将保留在其他计算机上,尽管该条目将变得无用。当您在update-grub包含 Windows 7 的系统上运行时,Windows 7 条目将替换 Windows XP 条目,因为脚本找到了 Windows 7 但没有找到 Windows XP。有几种方法可以解决此问题:

  • update-grub在 USB 驱动器上除 Ubuntu 之外没有安装任何操作系统的系统上运行该命令。
  • 使用GRUB 定制器工具来编辑grub.cfg。(我不能 100% 肯定它能让你删除不需要的条目,因为我自己从未使用过此工具。)
  • 手动编辑grub.cfg。(这通常不是一个好主意,因为存在错误的风险,但在某些情况下可能是必要的。)
  • 切换到 GRUB 以外的引导加载程序。大多数此类引导加载程序都需要手动编辑其配置文件 - 但这些文件比 更简单,因此更容易编辑grub.cfg。我自己的rEFInd 启动管理器每次启动时都会检测操作系统,这使得它更少地依赖配置文件,并且更能适应当前系统。另一方面,rEFInd 是一个仅适用于 EFI 的工具——大多数引导加载程序都是如此。因此,如果您切换,您可能需要不同的 BIOS 模式和 EFI 模式引导加载程序。(这不一定是一个很大的缺点;GRUB 的 EFI 模式和 BIOS 模式版本可能很难共存。)

请注意,您尝试的任何解决方案都可能因 GRUB 或 Linux 内核的更新而失效,因为生成配置文件的脚本会在每次内核或 GRUB 更新后运行。(内核更新不会触发从另一个引导加载程序切换回 GRUB,但 GRUB 更新可能会。)

缺少 USB 驱动器

一些 EFI 包含一项称为“快速启动”或类似功能(或完全不同——名称缺乏标准化令人沮丧)的功能,该功能可禁用 USB 初始化,或至少将其削减到最低限度。可能是此功能在您的 Dell Alienware 系统上处于活动状态,并阻止 GRUB 访问 USB 闪存驱动器。这将导致您描述的症状。如果是这样,解决方案是在固件设置实用程序中禁用此功能。某些系统提供对 USB 初始化的细粒度控制,因此您可能也会寻找有关该选项的选项。

如果系统对不同 USB 端口的处理方式不同,也可能会出现类似的问题。例如,USB 2 和 USB 3 端口的初始化方式可能不同。如果是这样,将 USB 驱动器从一个端口移到另一个端口可能会有所帮助。

我对这个解释的一个疑问是,系统显然能够加载 GRUB 本身,大概是从 USB 驱动器加载的。这表明 USB 访问处于活动状态,这与我的假设相悖。也许它足够活跃,可以加载初始引导加载程序,但不让 GRUB 访问 USB 驱动器。另一种可能性是 GRUB 是从其他地方加载的,例如您的硬盘。还有一种可能性与您的 Ubuntu 版本有关……

Ubuntu 14.04...真的吗?

尽管 Ubuntu 14.04 仍受官方支持,但它已经有点过时了,很可能在大多数现代硬件上完全失败。这是因为新硬件通常需要新的驱动程序,而较旧的 Ubuntu 14.04 可能缺少这些驱动程序。因此,您可能希望使用 16.04.2、16.10 甚至最近发布的 17.04 测试版,而不是 Ubuntu 14.04。

这也有可能造成您的戴尔无法启动;GRUB 中可能存在错误或缺少驱动程序,导致其无法访问 USB 驱动器。

设备名称

对此不必太过担心。Ubuntu 通过 UUID 值来识别磁盘,UUID 值是文件系统的唯一 128 位标识符。因此,如果安装 Ubuntu 的 USB 驱动器从(例如)切换/dev/sdb/dev/sdc,系统应该可以继续启动并正常工作。

我已经提到过这条规则的一个例外:如果计算机使用新型 USB 控制器,旧版 Ubuntu 14.04 可能无法识别 USB 设备。也可能存在其他例外,例如,如果计算机硬盘上的文件系统的 UUID 与 USB 驱动器上的文件系统的 UUID 相同 - 但这种冲突是非常除非你故意克隆文件系统或复制其 UUID,否则不太可能。问题可能还有其他原因导致,但我没有立即想到其他原因。

相关内容