将 grub2 安装到 usb 驱动器,以便在 UEFI 模式下启动到安装在硬盘上的 Ubuntu 13.04 x64

将 grub2 安装到 usb 驱动器,以便在 UEFI 模式下启动到安装在硬盘上的 Ubuntu 13.04 x64

我一直在尝试找到一种方法将 grub2 安装到 usb 驱动器,这样我就可以在 UEFI 模式下将 PC 启动到 Ubuntu,而无需以任何方式修改 UEFI 固件设置或用 grub 替换预装的 Windows 7 x64 引导加载程序。这是从 Ubuntu 13.04 x64 live-dvd 会话运行时,gparted 给出的内部 SSD 驱动器的当前 gpt 分区布局:

/dev/sda1 100mb fat32 /boot (efi system partition)

/dev/sda2 128mb --- /msfres (Windows 7 reserved partition)

/dev/sda3 100gb ntfs (Windows 7 system partition)

/dev/sda4 10gb ext4 (Ubuntu root '/' partition)

到目前为止,我已尝试在 UEFI 模式下启动我的 live-dvd,为 Ubuntu 创建一个根分区(如上所示),然后告诉安装程序将 grub 放在一个 512mb usb 笔式驱动器(/dev/sdi)上,我之前已在 gparted 中对其进行了格式化,如下所示:1)创建 gpt 分区布局;2)创建单个主分区;3)将分区格式化为 fat32;4)将分区标志设置为“/boot”。

我指示 Ubuntu 安装程序将 grub 安装到 /dev/sdi1(我上面创建的分区 - 因为前面的 1mb 是未使用的空间)。但是,当我在完成 Ubuntu 安装程序后重新启动 PC 时,插入 USB 笔,固件启动菜单将笔检测为 UEFI 设备,但随后继续启动 Windows 7 - 没有 Ubuntu 或 grub 菜单。

我尝试使用 Google 寻找解决方案,虽然有许多网站详细介绍了如何在 UEFI 系统上双启动 Windows 和 Linux,但它们都假设您能够修改 UEFI 固件设置或替换 Windows 7 引导加载程序(这两个选项对我来说都不可用,因为我没有这台电脑)。

因此,有人可以给我一个详细的、逐步的方法,将 grub2 安装到 USB 笔上,以便我可以以 UEFI 模式启动到 Ubuntu 分区,而无需更改任何系统固件设置或修改/替换现有的 Windows 7 引导加载程序?

系统主板是华硕 Z87-K(BIOS 版本 0412),SSD 是 120GB OCZ-Vertex3(固件版本 2.15)

更新:事实证明,我的 UEFI 固件确实启用了安全启动(因为 Windows 7(和其他处于“实时模式”的操作系统)启动正常,所以我以为它被关闭了)。如果我误导了大家,我深表歉意!由于我不拥有这台电脑,我无法关闭安全启动,所以我现在不得不放弃安装 Ubuntu 的尝试。尽管根据 Canonical 文档,Ubuntu 12.04.2 及更高版本应该能够在启用了安全启动的 PC 上启动吗?由于我无法禁用安全启动来缩小阻止我成功启动 Ubuntu 的问题范围,因此我将保留这个问题,但我尝试的任何未来安装都将在我自己的硬件上完成,因此我可以自由地进行更深入的实验。

再次感谢所有回复的人!

答案1

您不能使用启动标志设置两个 /boot 分区!/boot 分区中只有一个启动标志,用于 grub2 - 因此只需在分区 /dev/sda1 中停用启动标志即可

之后在 /dev/sdi 的 /boot 分区中激活启动标志 - 确定吗?这是正确的吗?您在 /dev/sdi 中有一个 /boot 分区?因此您需要激活启动标志(只需使用 gparted 即可)。

正如你所说... grub2 已经安装在 /dev/sdi 中了吗?如果没有,请按照以下步骤操作(这是必要的,因为你修改了启动标志):

sudo grub-install /dev/sdi

sudo 更新-grub2

在此之前,您的所有机器都是通过 /dev/sda1 启动到 /dev/sda3 的 Windows 7 - 但现在启动标志已被停用并设置为 /dev/sdi 的 /boot 分区 - 并且您的机器现在应该启动到您的 USB 驱动器的安装。

仅当您的机器在 UEFI 模式下无法启动 USB 驱动器时,您才应该在 BIOS 设置中禁用 UEFI 模式并启用 EFI 模式。

答案2

您快完成了。可移动媒体(如 USB)将从可启动的 EFI 分区启动(每个设备都有一个可启动的 EFI 分区,而不是全部),使用 bootloacer /EFI/Boot/bootx64.efi(适用于 x64 架构)。只需将您的 /EFI/ubuntu/grubx64.efi 复制到 /EFI/Boot/bootx64.efi,并在 /EFI/ubuntu/grub.cfg 中复制一份 grub.cfg,它就可以启动了。当然,必须设置 grub.cfg 才能像您希望的那样启动硬盘。只需从硬盘安装中复制 grub.cfg 即可,但每次更新内核时都需要重新复制,因此您可以将 /EFI/ubuntu/grub.cfg 设置为几行,导入维护的 /boot/grub/grub.cfg(我认为 13.04 就是这样)。 *对于安全启动,请对 /EFI/Boot/bootx64.efi 使用 shim.efi,并在 /EFI/Boot 中保留已签名的 grubx64.efi 副本。grub.cfg 位于同一位置 /EFI/ubuntu。您的实时媒体使用此机制进行启动,因此如果它有效,则此方法有效。

答案3

没有“/boot 标志”这样的东西。GParted 确实parted有一个“启动标志”(没有前导斜杠),但这个术语充其量是令人困惑的。GParted/ parted“启动标志”实际上是一种在分区上设置类型代码以将其标识为EFI 系统分区 (ESP),固件从中读取引导加载程序。与 dschinn1001 所说的相反,你应该不是将 Linux/boot分区的类型代码设置为 ESP 代码。在单个磁盘上拥有多个 ESP 是合法的,尽管 Windows 对此类设置过敏,所以我不建议这样做。ESP 必须具有 FAT 文件系统(技术上是 FAT32,尽管 FAT16 在实践中经常有效),因此除非您的 Linux/boot分区使用 FAT,否则您应该不是在分区上设置 GParted/ parted“启动标志” /boot

从技术上讲,在 USB 闪存驱动器上安装 GRUB 是可行的,但有一点限制。问题在于 GRUB 的硬编码配置,它为您提供了两个选项:

  • 您可以这样构建 GRUB,使其grub.cfg在与二进制文件相同的目录中查找grubx64.efi(即在 USB 闪存驱动器上)。不过,这通常只在一台计算机上工作,因为它grub.cfg包含各种特定于系统的详细信息。
  • 您可以构建 GRUB,使其grub.cfg在您的硬盘上查找。这可能适用于更多计算机,但它要求每台计算机grub.cfg上都有一个工作文件,并且在每个系统上的相同位置。因此,它不会在所有计算机上工作,只适用于以类似方式配置的计算机。

Ubuntu 构建的grubx64.efi二进制文件以第二种方式工作。请注意,ubfan1 的过程假设使用第一种方法构建 GRUB,因此它只适用于定制的 GRUB 二进制文件(或从 Fedora 或其他以这种方式工作的发行版中获取的 GRUB 二进制文件)。另一方面,如果系统配置正确,ubfan1 的过程可能以第二种方式工作——但复制grub.cfg到 USB 闪存驱动器将毫无意义。

如果你正在寻找一个通用的紧急启动盘,GRUB 并不是最好的解决方案——至少,除非超级 GRUB 2 磁盘是否支持 EFI 或者其他人制作了类似的东西。目前,应急 EFI 启动盘的最佳选择是我的rEFInd 启动管理器。此程序会在计算机上建立其他 EFI 引导程序列表,使您可以引导其中任何一个。这样,您就可以从硬盘上安装的任何引导加载程序(GRUB、ELILO、Windows 引导加载程序等)进行引导,即使您丢失了 EFI NVRAM 条目。不过,引导加载程序必须正确配置。

由于 Linux 内核自 3.3.0 版起包含内置 EFI 引导加载程序,因此 rEFInd 也可以直接启动它们。问题在于 rEFInd 需要确定要传递给内核的选项——最重要的是,您的 Linux 根文件系统是什么。如果内核位于根文件系统中(即,如果没有单独的/boot分区),或者 rEFInd 特定的配置文件 ( refind_linux.conf) 与内核位于同一目录中,rEFInd 可以确定这一点。Ubuntu 通常不使用单独的/boot分区,因此 USB 闪存驱动器或 CD-R 上的 rEFInd 通常可以直接启动 Ubuntu,并且应该比 GRUB 更灵活,更易于设置以备紧急情况使用。(rEFInd 页面包括下载链接用于 CD-R 和 USB 闪存驱动器映像。)如果您有一个更复杂的设置,并且您碰巧记得根文件系统的名称(或您需要启动的任何其他内核选项),您可以通过按两次 F2 或 Insert 来编辑或添加它们,这将打开一个行编辑器,以便您可以修改内核的选项。

相关内容