我在 MacBook 2,1 上安装了 Ubuntu 17.04 和 Mac OS X 10.5。我以前安装过 Ubuntu 16.04,然后这些方向。
当我升级到 17.04 时,我出于各种原因进行了全新安装,其中之一就是要转换为 UEFI。在安装过程中,我选择了原始的 EFI 系统分区,创建了一个保留的 BIOS 区域、一个 / 分区和一个/home
分区。
一开始,它运行良好,然后,在我选择 Mac 作为启动选项后,它却无法启动到 Ubuntu。当我在启动时按下 Option 键时,它仍然会给我通常的选项,启动到它所谓的“Windows”(实际上是 Ubuntu),但它根本无法启动。我重新安装了它,没有更改 EFI 分区和删除 BIOS 区域。同样的问题仍然存在,虽然我可以使用 rEFIt 启动到 Ubuntu,但我宁愿不这样做。我尝试过使用单独的/home
分区和不使用单独的分区。我做错了什么?
如果必须的话,我愿意清除所有内容,包括 Mac 分区,然后完全重新开始。但如果可能的话,我想避免这种情况。
以下是输出efibootmgr
BootCurrent:0080 超时:5 秒 BootOrder:0080,0000 Boot0000* ubuntu Boot0080* Mac OS X BootFFFF*
答案1
我也遇到过这种情况,所以我可以给你一点提示。
再次安装 Refind
这看起来很傻,但是在 Mac 上安装 refind 确实可以修复安装 Refind 的 efi 分区,并且可能会将启动顺序更改为 EFI 分区,以便您可以在它们之间切换。
如果可以:从 Ubuntu 更改启动顺序。Ubuntu 中有一个名为 efibootmgr 的工具,您可以使用它来更改启动顺序。
写作efibootmgr
将给你这样的输出:
BootCurrent: 0080
Timeout: 5 seconds
BootOrder: 0080,0001
Boot0000* EFI partition
Boot0001* Mac OS X
Boot0080* Mac OS X
Boot0081*
Boot0082*
BootFFFF*
应用此命令将把 bootorder 设置为 efi 启动,因此它将直接启动到 Refind:
sudo efibootmgr -o 0000
答案2
以下是一些关键的观察结果:
- 您的计算机上已安装 EFI 模式的 GRUBEFI 系统分区 (ESP)。
- 您的计算机上有 BIOS 模式版本的 GRUB主引导记录 (MBR),但它指向不再存在的代码,因此它充其量是无用的,并且如果意外启动可能会导致启动失败。
- 你有一个混合型 MBR,这会激活 Mac 的兼容性支持模块 (CSM)。换句话说,您的计算机配置为可能以 BIOS/CSM/legacy 模式启动,尽管这还远未确定会发生。
- 您的
grub.cfg
文件包含以下条目应该启动 OS X;然而,我不能保证这些条目确实能起作用。 - 您的 EFI 已配置为默认启动 GRUB。(这从
efibootmgr
Boot Repair 输出的第 642-648 行的输出中可以清楚看出。)但是,您的描述听起来好像这并没有发生。
一些额外的关键背景信息:
- 所有操作系统都需要引导加载程序才能启动。这些程序会将内核加载到内存中并开始执行。GRUB 是 Ubuntu 的默认引导加载程序,但还有其他引导加载程序。(请参阅我关于这个主题的页面了解有关 Linux 的 EFI 模式引导加载程序的信息。)
- 除了引导加载程序之外,启动管理器可能至关重要。引导管理器会显示菜单或其他类型的用户界面,使用户可以选择要启动的引导加载程序(或有时是其他预引导工具)。大多数 EFI(包括 Apple 的 EFI)都包含简单的引导管理器。除了作为引导加载程序之外,GRUB 还提供引导管理器功能。rEFIt、rEFInd 和 gummiboot/systemd-boot 是第三方引导管理器的示例,它们不是引导加载程序。(不过,Linux 内核包含自己的引导加载程序,因此这些程序可以充当 Linux 内核的引导加载程序。)
- Mac 的内置启动管理器有点奇怪。在大多数基于 EFI 的计算机上,
efibootmgr
Linux 中的实用程序显示内置启动管理器选项。但在 Mac 上,内置启动管理器似乎从其他来源获取信息,我不确定该来源是什么。因此,配置它以执行您想要的操作可能很棘手,或者至少需要我所缺乏的知识和程序。Mac 通常(但并非总是)遵守第一次进入在启动顺序中(BootOrder
正如所报告的efibootmgr
),但是当您在启动时按 Alt/Option 时获得的菜单则完全是另一回事;并且对于您来说,甚至第一个条目也会被忽略。 - Mac 可以使用 EFI 模式或 BIOS 模式引导加载程序进行引导。EFI 模式是原生模式,一般来说更可取;但在大多数 Mac 上,BIOS 模式或多或少是引导 Windows 7 及更早版本所必需的。BIOS 模式引导要求磁盘使用混合 MBR。就我个人而言,我建议在 Mac 上使用 EFI 模式引导 Linux,尽管这条规则也有例外。
因此,你现在的情况是应该配置为使用 GRUB 作为启动管理器的双启动;然而,听起来好像 Mac 可能不是遵守 EFI 启动管理器中设置的启动顺序,如 所述efibootmgr
。
您可以通过多种方式进行:
- 使用 rEFInd-- 如果你安装我的rEFInd 启动管理器从 OS X,它应该进行设置,以便它能够接管并使您能够启动 OS X 或 Ubuntu,通过 GRUB 或通过使用其 EFI 存根加载器启动内核来启动 Ubuntu。(rEFInd 也可能会显示一个不起作用的 Ubuntu BIOS 模式启动选项。您可能希望将其从菜单中删除。)
- 将 GRUB 恢复为默认引导加载程序/引导管理器-- 这可能有点棘手。正如我所说,应该现在可以正常工作了。您可以尝试以下两种方法来实现此目的:
- 您可以使用
bless
OS X 中的命令让系统将 ESP 上的引导加载程序识别为默认引导加载程序。步骤如下:- 启动至 OS X
- 打开终端窗口。
- 类型
mkdir /Volumes/ESP
。 - 输入
sudo mount -t msdos /dev/disk0s1 /Volumes/ESP
。这会将您的 ESP (/dev/sda1
在 Ubuntu 中,应该/dev/disk0s1
在 OS X 中) 安装到/Volumes/ESP
。 - 输入
sudo bless --mount /Volumes/ESP --setBoot --file /Volumes/ESP/efi/ubuntu/grubx64.efi --shortform
。这将“祝福” GRUB,使其成为默认的引导加载程序。
- 有一个流程,概述这里,在 HFS+ 卷上安装任意引导加载程序(例如 GRUB),这似乎比标准 EFI 程序在 Mac 上效果更好。您可以尝试使用 Ubuntu 的 GRUB 使用此方法,但您几乎只能靠自己了。
- 您可以使用
- 让 Mac 的启动管理器显示 GRUB 选项,保留 OS X 作为默认选项-- 此选项可能需要执行类似于将 GRUB 移动到 HFS+ 卷的过程,然后使用 OS X 中的启动选择器更改默认设置。然后,您应该能够使用 Mac 的内置启动管理器来选择您的操作系统。
在任何在这些情况下,你最好将混合型 MBR 换成传统的保护型 MBR。原因在我的混合 MBR 页面,也就是说,混合型 MBR 外观丑陋,危险的,因此应仅在绝对需要时使用,但对于您而言(可能)不需要。如果您需要在 BIOS 模式下启动 Ubuntu,则只需要混合 MBR。您可以使用 将您的混合 MBR 转换为保护性 MBR gdisk
,如下所示:
gdisk
在磁盘上启动,就像sudo gdisk /dev/sda
在 Ubuntu 中一样。- 键入
p
以查看分区表,确保您在正确的磁盘上工作。 - 键入
x
以进入专家菜单。 - 键入
n
以创建新的保护 MBR。 - 再次输入
p
以验证您没有意外更改任何内容。 - 键入
w
以保存您的更改。系统将要求您验证此更改。提供它。
您可以在一切按您希望的方式启动之前或之后执行此操作。
过去,大多数基于 Intel 的 Mac 上的 Ubuntu 双启动器都使用 rEFIt,因为它适用于大多数常见配置。rEFIt 不再维护,但我将其分叉到 rEFInd。rEFInd 也运行良好,但需要注意的是,事情已经发生了足够多的变化(rEFInd 与 rEFIt 以及“常见配置”的含义),您可能需要调整一些 rEFInd 配置选项。对于您来说,您可能需要编辑以refind.conf
编辑dont_scan_files
、dont_scan_dirs
或dont_scan_volumes
隐藏不需要的或不起作用的启动选项;或者取消注释scanfor
并确保hdbios
不是用于隐藏无功能的 BIOS 模式启动选项的选项之一。
从我上面介绍的选项中可以看出,将 rEFInd 从等式中剔除意味着将 GRUB 添加到等式中,而要使其工作需要克服一些额外的困难,因为 Ubuntu 并未设置为自动克服这些困难。(在某些方面,这是 rEFInd 的优势——它的安装脚本克服了 Ubuntu 安装工具没有克服的困难。)您当然可以使用 GRUB 代替 rEFInd 和 EFI 存根加载器,但您必须准备好付出额外的努力。
如果您不想要 rEFIt 或 rEFInd 的原因是您通常启动 OS X,请注意,您可以减少 rEFInd 的超时值(可能减少到-1
,这会导致立即启动到默认操作系统)并将默认值(通过default_selection
)设置为 OS X。