USB驱动器上的MacBook Pro和Ubuntu 17.04

我一直在寻找一段时间,并没有真正找到这个问题的答案,除了安装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,因为我希望尽可能少地对系统进行更改。 但是,我很高兴这是唯一的答案。

问题是在EFI(基于Intel的Mac使用)下,可移动磁盘的启动方式与内部磁盘不同,Ubuntu安装程序设置为安装内部磁盘但不安装可移动磁盘。 详细说明:

  • 内部磁盘通过在磁盘的EFI系统分区(ESP)上放置引导加载程序(在Ubuntu的情况下至少是grubx64.efi ,至少默认情况下)来引导,通常位于以OS命名的EFI子目录中。 也就是说,对于Ubuntu,GRUB称为EFI/ubuntu/grubx64.efi 。 对于Fedora,它是EFI/fedora/grubx64.efi 。 对于Windows,它是EFI/Microsoft/Boot/bootmgfw.efi 。 由于文件名因操作系统而异,因此需要告知计算机要启动的文件名,并将该信息存储在NVRAM中。 与其他Linux发行版一样,Ubuntu使用名为efibootmgr的工具来操作NVRAM。
  • 可移动磁盘以与内部磁盘类似的方式启动,但由于可移动磁盘通常意味着从一台计算机传送到另一台计算机(例如,作为OS安装程序或紧急实用程序磁盘),因此它们不能依赖存储在计算机中的信息。 NVRAM。 相反,他们使用回退文件名存储启动加载器对于x86-64 / AMD64 / x64系统使用EFI/BOOT/bootx64.efi 。 基于EFI的计算机可以使用磁盘ESP上的回退文件名启动可移动媒体。

有一些曲折和警告。 最值得注意的是,Mac也可以使用System/Library/CoreServices/boot.efi的默认macOS引导加载程序文件名从HFS +卷启动; 为了支持基于UEFI的安全启动PC,Ubuntu通过称为Shim的程序启动,该程序存储为EFI/ubuntu/shimx64.efi或在可移动磁盘上给出回退文件名。 然后,Shim以一种使安全启动工作的方式启动了grubx64.efi 。 这些问题都不是您在Mac上的一个因素,因为Mac可以从标准EFI启动加载程序位置启动,而Mac不使用安全启动。 但是,您可能会遇到对这些因素的引用,如果您想创建可在基于UEFI的PC上启动的内容,则可能需要添加Shim for Secure Boot支持。

另一个复杂因素是Ubuntu的安装程序将GRUB放在它找到的第一个ESP上。 这可能是您的内部硬盘,而不是外部磁盘。 因此,您的主要Ubuntu安装可能位于外部磁盘上,但GRUB可能位于内部磁盘上。 如果没有GRUB或其他一些启动加载程序,Ubuntu将无法启动,因此您的外部磁盘在启动之前需要其他东西。

简而言之,您的任务是使用回退文件名将引导加载程序放在外部磁盘上。 这有很多选择; 请参阅我的EFI Boot Loaders for Linux页面,了解可用的内容以及安装说明。 但是,有两个选项可能最容易安装:

  • GRUB – 如果您可以找到现有的GRUB安装,则应该能够将其复制到外部磁盘的ESP上的后备引导加载程序位置。 正如我所说,你的GRUB可能存储在内部磁盘ESP上的EFI/ubuntu/grubx64.efi (以及shimx64.efi在同一位置); 但是,我不能100%肯定。 一旦找到GRUB,您应该能够在后备文件名下将其复制到外部磁盘的ESP – 也就是说,将该目录中的所有文件复制到外部磁盘的ESP上的EFI/BOOT并重命名为shimx64.efigrubx64.efibootx64.efi 。 这应该使外部磁盘可由Mac的启动管理器发现并可引导。
  • rEFInd – 您可以从rEFInd下载页面下载rEFInd .zip文件。 然后,您可以运行refind-install脚本,并在--usedefault {device_file}传递--usedefault {device_file}选项,如sudo ./refind-install --usedefault /dev/disk1s1 ,使用回退文件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上。