如何在最新的10.12 macOS上以最佳方式实现Mac与Ubuntu的双系统启动?

我花了过去的三个晚上在网络的每一个角落搜索关于如何在最新的macOS 10.12 Sierra和Ubuntu上进行双启动的简明指南,但似乎有太多种方法被人们推荐,而在其他论坛上人们又反对这些方法。我的理想情况当然是通过苹果标准引导加载程序中的alt键来选择macOS或Linux。David Anderson发表了一篇关于这个问题的帖子,对我来说非常吸引,尽管我有点怀疑,因为没有评论或回答他的方法(不是质疑他的能力),大多数人还是建议使用rEFInd。
我当然可以接受这个,并且我已经阅读了Rod Smith网站上相关的文章,但由于每个新版本的macOS(特别是自El Capitan以来集成了SIP)似乎都改变了它处理引导过程的方式,而且大多数关于这个主题的文章都比10.11更旧,这让我感到有点迷失。我对rEFInd最担心的是其他用户抱怨的休眠功能故障。
我的设置包括一台2012年中期的非Retina MacBook Pro,运行在macOS 10.12.3上。据我目前所知,我计划做以下几件事:
- 在macOS中使用磁盘工具创建三个新的HFS+分区作为占位符(一个小的用于refind,一个主要的用于Ubuntu的根分区,一个用于交换分区)。 - 安装Ubuntu,重新格式化主Linux分区并选择交换分区(我需要改变引导加载程序的安装位置吗?)。 - 重启进入恢复模式,并安装rEFInd ./refind-install --ownhfs /dev/disk0sX,以便它能够找到现有的Ubuntu并在启动时跳过GRUB。
我读到在单独的HFS分区上安装rEFInd可以解决休眠问题。在这种情况下,我需要在Linux安装过程中将小的HFS分区选择/重新格式化为EFI系统分区吗(就像David Anderson建议的那样)?并且我应该为引导加载程序安装选择哪个卷?
在另一个帖子中,一位用户表示自从El Capitan以来,我们最好不要在单独的HFS上安装rEFInd,但没有说明原因。此外,支持这种说法的一个有力论点当然是rEFInd在其更新版本中默认将自己安装在标准EFI分区上。即使按照默认方式执行所有操作(包括休眠问题的风险),在安装Ubuntu时应该选择哪些分区?在这种情况下,我是否需要定义一个新的EFI系统分区,还是根本不需要?
正如你可能已经注意到的,我有很多问题,如果这篇文章对你来说看起来混乱,我提前向你道歉。我会非常感激任何形式的帮助。
谢谢! Tim

我遇到了和你一样的问题,因为我需要在机器人课程中使用Ubuntu 16.04。我主要遇到的问题是Ubuntu安装程序无法识别我的内部SSD()。我按照这里的教程进行操作,帮助非常大。现在我的MacBook同时运行着OSX和Ubuntu 16.04。 - Amanda Zhu
1个回答

我花了过去的三个晚上在网络的每一个角落搜索如何在最新的macOS 10.12 Sierra和Ubuntu上进行双系统安装的简明指南,但似乎有太多种方法被人们推荐,而在其他论坛上人们则不建议这样做。
你遇到了选择困难症——对于这个问题有太多选择导致了混淆。实际上,在这个特定问题上,很难说任何一个选项比其他选项更好,除非它符合某些非常具体的目标,其中大部分你都没有提及任何偏好,除了:
我的理想情况当然是通过苹果的标准引导加载程序中的alt键来选择macOS或Linux。
在这种情况下,你链接的解决方案是有道理的,尽管我怀疑它可能在某些地方过于复杂。(虽然我不能百分之百确定。)
请注意,当您按住Alt/Option键启动Mac时看到的屏幕不是引导加载程序;它是引导管理器。您仍然依赖于单独的引导加载程序(苹果的boot.efi文件用于启动macOS或GRUB用于启动Linux)来引导计算机。从某种意义上说,这是一个术语的小问题;但重要的是要理解引导管理器是用户界面工具,而引导加载程序将内核加载到内存并执行它们,因为在某些情况下,这种区别非常重要。不幸的是,人们往往对这种区别不太严谨。
每个新版本的macOS(特别是自El Capitan集成SIP以来)似乎都会改变其处理引导过程的方式,大多数关于此主题的文章都比10.11更旧,这让我感到有点迷茫。
是的,macOS引导的不断变化可能是一个问题。我建议您首先忽略任何建议在BIOS/CSM/legacy模式下安装Linux的内容。虽然有时候这样做是必要的,但现在很少需要这样做。总体而言,您还剩下两个选择:
  • 作为引导管理器使用什么 -- 在上面,你表达了对Mac内置的引导管理器的偏好。这个工具有一定的限制,但你知道它已经存在于计算机中。两个主要的替代方案是GRUB 2(由Ubuntu安装,但我看到很少讨论使用它来引导macOS)和rEFInd(显然你知道它是Mac上的一个流行选择)。rEFIt过去也是一个不错的选择,但已经多年没有更新了,所以rEFInd(我从rEFIt分叉出来的)是一个更好的选择。
  • 作为引导加载程序使用什么 -- 你提到的方法和任何使用GRUB作为引导管理器的方法都可能使用GRUB作为引导加载程序。rEFInd也可以做到同样的事情,但rEFInd还可以使用EFI stub loader,这是一个将Linux内核转变为自己的引导加载程序的内核特性。
请注意,GRUB既是引导管理器又是引导加载程序。而rEFInd则从技术上只是一个引导管理器;但是EFI存根加载程序(从技术上来说是一个引导加载程序而不是引导管理器)的存在使得rEFInd能够像Linux内核的引导加载程序一样工作。
关于rEFInd,我最担心的是其他用户抱怨的休眠功能故障。
这个问题在一段时间前确实很严重,但是我没有看到最近有任何关于它的投诉,所以我相信在refind-install中的当前默认设置已经解决了这个问题。正如你所建议的,将rEFInd安装到一个单独的HFS+分区是一种被报道的解决方案,所以如果你将rEFInd安装到ESP然后遇到问题,你可以尝试这个方法。
即使在安装完成后,您仍然可以更换引导管理器和加载程序。对于这个特定的问题,如果您决定使用rEFInd,可以通过设置一个大约200 MiB的分区来降低风险。最初不要在其上放置文件系统。使用默认设置安装rEFInd,它将被放置在ESP上。如果遇到问题,您可以在小的备用分区上放置一个HFS+文件系统,并重新安装rEFInd。如果问题得到解决,那就太好了。如果没有解决,您可以按照链接页面上描述的方法的变体,在小的HFS+分区上安装GRUB 2。

安装Ubuntu,重新格式化主Linux分区并选择交换分区(我需要更改引导加载程序的安装位置吗?)

如果Ubuntu安装程序以EFI模式运行,它将把GRUB 2安装到ESP上。如果甚至有一个提示询问引导加载程序的安装位置,在EFI模式下会被忽略。
值得一提的是,如果您打算使用rEFInd和EFI存根加载程序,您可以通过进入“试用安装”模式启动Ubuntu安装程序,打开终端窗口,并键入ubiquity -b来启动。 -b选项告诉安装程序不要安装GRUB。这将最大程度地减少未来发生引导冲突的可能性,并且会阻止GRUB在每次内核更新以修改其配置文件时运行耗时的脚本(如果您在引导过程中不包含GRUB,则不会使用这些脚本)。

我读到在单独的hfs分区上安装rEFInd可以解决休眠问题。在这种情况下,在Linux安装期间,我是否需要选择/重新格式化小的hfs分区作为EFI系统分区(就像David Anderson建议的那样)?

不需要。从技术上讲,ESP 必须使用 FAT文件系统。实际上,Mac的固件在启动引导加载程序时无论分区是否标记为ESP或标准HFS+分区都不会关心。

我还要指出的是,我不明白在你提供的说明中为什么要创建第二个ESP。也许我漏掉了什么。
即使我按照默认方式进行一切操作(包括休眠问题的风险),在安装Ubuntu时应该选择哪些正确的分区?在这种情况下,我需要定义一个新的EFI系统分区吗,还是根本不需要?
不,ESP旨在由计算机上的所有操作系统共享。然而,在Mac上,Apple只用它来进行固件更新,据我所知;其引导加载程序位于其“恢复HD”卷上。
话虽如此,你确实可以创建多个ESP;这样做是合法的,并且据我所知,所有的EFI都支持这样的配置。只是这样做几乎没有意义。

9我非常钦佩你花了这么多时间给一个陌生的网友写一篇详细的回答,对此我非常感激。结果证明我确实过于考虑了,所以我将选择标准安装rEFInd,只需为Ubuntu和交换分区创建两个新分区,并在不使用GRUB的情况下安装Ubuntu。再次感谢你的回答和出色的工作! - tmaier