我搜索了一段时间,除了安装 rEFInd 之外,并没有找到其他答案……我想将其作为最后的手段。如果这是唯一的答案,那么它就是唯一的答案。我只是想确定一下。
我使用 17.04 ISO 创建可启动 USB 驱动器时没有遇到任何问题,而且我的 MacBook Pro 也可以从该 USB 驱动器启动并实时运行 17.04 时没有遇到任何问题。
我想要做的是将 17.04 安装到另一个 64 GB 的 USB 驱动器上,能够从该 USB 启动,并运行 17.04,就像它安装在我的硬盘上一样。
为了做好准备,我在实时环境中使用 Gpartd 在 64 GB USB 驱动器上创建了一个 GUID 分区表,在驱动器的开头创建了一个 EFI 系统分区(FAT32 标记为 ESP 和 Boot),创建了一个交换分区(主 linux-swap),并创建了主分区(主 ext4)。
我启动了 17.04 安装程序,指示它将 GRUB 放在 ESP 上,并将根文件系统安装到 ext4 分区。一切运行正常,但当然,MacBook Pro 的启动管理器无法识别它。它仍然可以很好地识别安装 USB 棒。
任何帮助都将不胜感激。就像我说的,我宁愿避免使用 rEFInd,因为我喜欢尽可能少地更改系统。但是,我很满意这是唯一的答案。
答案1
问题在于,在 EFI(基于 Intel 的 Mac 使用)下,可移动磁盘的启动方式与内置磁盘不同,并且 Ubuntu 安装程序设置为安装内置磁盘,而不是可移动磁盘。详细说明:
- 内部磁盘通过将引导加载程序(
grubx64.efi
至少在 Ubuntu 的情况下是默认的)放在EFI 系统分区 (ESP)磁盘的 ,通常位于以EFI
操作系统命名的 子目录中。也就是说,对于 Ubuntu,GRUB 称为EFI/ubuntu/grubx64.efi
。对于 Fedora,它是EFI/fedora/grubx64.efi
。对于 Windows,它是EFI/Microsoft/Boot/bootmgfw.efi
。由于文件名因操作系统而异,因此需要告知计算机要启动哪个文件名,并且该信息存储在 NVRAM 中。与其他 Linux 发行版一样,Ubuntu 使用名为 的工具efibootmgr
来操作 NVRAM。 - 可移动磁盘以与内部磁盘类似的方式启动,但由于可移动磁盘通常用于从一台计算机携带到另一台计算机(例如,作为操作系统安装程序或紧急实用程序磁盘),因此它们不能依赖于计算机 NVRAM 中存储的信息。相反,它们使用后备文件名,
EFI/BOOT/bootx64.efi
适用于 x86-64/AMD64/x64 系统。基于 EFI 的计算机可以使用磁盘 ESP 上的后备文件名来启动可移动媒体。
有一些曲折和注意事项。最值得注意的是,Mac 还可以使用默认的 macOS 引导加载程序文件名从 HFS+ 卷启动System/Library/CoreServices/boot.efi
;为了支持基于 UEFI 的 PC 实现安全启动,Ubuntu 通过一个名为 Shim 的程序启动,该程序存储为可EFI/ubuntu/shimx64.efi
移动磁盘上的后备文件名或被赋予后备文件名。然后,Shimgrubx64.efi
以一种允许安全启动工作的方式启动。在 Mac 上,这两个问题都不是需要考虑的因素,因为 Mac 可以从标准 EFI 引导加载程序位置启动,并且 Mac 不使用安全启动。不过,您可能会遇到对这些因素的引用,如果您想创建可以在基于 UEFI 的 PC 上启动的东西,您可能需要添加 Shim 以支持安全启动。
另一个复杂因素是 Ubuntu 的安装程序将 GRUB 放在它找到的第一个 ESP 上。这很可能是您的内置硬盘,而不是外置磁盘。因此,您的主 Ubuntu 安装可能位于外置磁盘上,但 GRUB 可能位于内置磁盘上。如果没有 GRUB 或其他引导加载程序,Ubuntu 将无法启动,因此您的外置磁盘需要其他东西才能启动。
简而言之,您的任务是使用备用文件名将引导加载程序放在外部磁盘上。有很多选择;请参阅我的Linux 的 EFI 引导加载程序页面,了解可用内容的概述以及安装说明。不过,两个选项可能最容易安装:
- GRUB-- 如果您可以找到现有的 GRUB 安装,则应该能够将其复制到外部磁盘 ESP 上的后备引导加载程序位置。正如我所说,您的 GRUB 可能存储为
EFI/ubuntu/grubx64.efi
(以及shimx64.efi
在同一位置)内部磁盘的 ESP;但是,我不能 100% 肯定这一点。找到 GRUB 后,您应该能够将其复制到外部磁盘的 ESP 下的后备文件名下 - 即,将该目录中的所有文件复制到外部EFI/BOOT
磁盘的 ESP 上,并将shimx64.efi
或重命名grubx64.efi
为bootx64.efi
。这应该会使外部磁盘可被 Mac 的引导管理器发现并引导。 - 重新索引-- 您可以
.zip
从rEFInd 下载页面。然后,您可以运行该refind-install
脚本,并向其传递--usedefault {device_file}
选项,例如sudo ./refind-install --usedefault /dev/disk1s1
使用后备文件名将其安装到/dev/disk1s1
(我假设是您的可移动磁盘的 ESP;但也可以是其他名称)。如果您从 Ubuntu 执行此操作,它应该复制正确的文件系统驱动程序以读取安装内核的 Linux 文件系统。如果您从 macOS 执行此操作,它应该复制 ext4fs 驱动程序。如果要复制所有文件系统驱动程序,可以将选项添加--alldrivers
到refind-install
。这有时很有帮助,但不必要的驱动程序会增加 rEFInd 发生故障的风险,甚至可能导致挂起。无论如何,完成此操作后,外部磁盘应该是可启动的,如果包含正确的文件系统驱动程序,则在您启动时,rEFInd 应该会出现并为您提供启动 Linux 或任何其他已安装的选项。请注意,这会将 rEFInd 安装到外部磁盘,而不是内部磁盘。
请注意,如果您以这种方式将 rEFInd 安装到外部磁盘,该磁盘将成为有用的紧急启动工具。启动时,rEFInd 会主动扫描所有媒体上的引导加载程序,这在启动过程受到某种损坏时非常有用。rEFInd 还可以启动紧急 EFI 工具(如果已安装)、调整 SIP 设置等。GRUB 可以执行其中的一些操作,但默认情况下未配置为执行任何操作。
如果您将 rEFInd 安装到内部磁盘(我相信您在问题中提到的就是这种安装方法),rEFInd 应该能够启动外部磁盘,前提是安装了正确的文件系统驱动程序。但这无法帮助您在另一台计算机上启动外部磁盘,只能在您安装 rEFInd 的 Mac 上启动。