我正在尝试使用 grub2 创建多启动情况。请原谅我,因为我在这方面还很陌生。但是,我觉得我已经很接近了,只是缺少从 EFI 分区启动的能力。以下是我的情况的详细信息:
- /dev/sba 上的 Ubuntu 版本 15.10 64 位 –高清1
- /dev/sdc 上的 Windows 10 64 位 –hd0
- 从 EFI 分区启动 OS X 64 位。在 /dev/sdb 上 –高清2
每个操作系统都位于单独的硬盘上。
一切启动顺利独立即(没有)grub。我能够成功启动 Ubuntu 和 Windows 10。我遇到的问题是启动 OS X 驱动器上的 EFI 分区。在互联网上进行大量研究后,我为 EFI 分区想出了以下 grub2 菜单。
menuentry "OSX" {
insmod chain
insmod part_gpt
insmod search_fs_uuid
search --fs-uuid --no-floppy --set=root 8366-0C13
chainloader /EFI/CLOVER/CLOVERX64.efi
}
这已加载到40_custom
文件中。加载后,我运行sudo grub-mkconfig -o /boot/grub/grub.cfg
,然后sudo update-grub
菜单正常显示,但当我选择 Yosemite 项目时,出现错误。
- Windows 10 和 Ubuntu 项目启动正常。
- hd2 第 1 部分的 UUID 为 8366-0C13
- 该
CLOVERX64.efi
文件确实存在于该位置。
如果我运行 ls 命令,分区和所有文件都会正常显示。
我在运行 OSX 菜单项时收到的错误是invalid signature
。我尝试将最后一行更改为boot
而不是chainloader
,然后出现错误you need to load the kernel first
。我研究了内核,但目前没有找到任何答案。这完全是一个测试系统,所以我不太担心系统崩溃。
如果有人有任何想法,请告诉我。
答案1
LiveWireBT 是正确的,但答案有点不同。与 LiveWireBT 一样,我认为这是安全启动问题。问题是,据我所知,Clover 并不明确支持安全启动;即使它支持,Apple 也不支持,因此 Apple 的引导加载程序未使用安全启动密钥签名。Clover 的工作原理是启动 EFI 应用程序,如果安全启动处于活动状态,则需要对它们进行签名,因此,如果通过 Clover 启动的任何程序未使用固件中提供的密钥进行签名,则它们都将失败。
解决此问题的简单方法是禁用固件中的安全启动。禁用安全启动后,将不会进行安全启动检查,一切都将正常运行。这种方法的问题在于,您不会获得安全启动的任何好处,这意味着恶意软件理论上可以控制您计算机的预启动环境,这将很难修复。据我所知,此类攻击在野外仍然很少见(可能不存在),但它们是可能的。
一个中等复杂度的解决方案是使用我的重新索引。rEFInd 支持安全启动,但它与 GRUB 的实现方式不同,因此即使后续程序没有明确支持安全启动,它们也会使用 Shim。因此,如果从 rEFInd 启动 Clover,Clover 将能够启动使用 Shim 可识别的密钥签名的程序。要使此方法有效,您需要使用自己boot.efi
的密钥对 Clover、Clover 的驱动程序和 Apple 的驱动程序进行签名,这将增加一些设置和维护负担。
最复杂的解决方案是将计算机当前的安全启动密钥集替换为您自己的密钥集。此密钥集可以包括 Microsoft 的密钥,但也可以包括您自己的密钥,您可以使用这些密钥来签名 Clover、Clover 的驱动程序和 Apple 的密钥boot.efi
。然后,这些密钥都应该在安全启动处于活动状态时启动。您可以通过 GRUB、rEFInd 或其他任何程序启动。(您甚至可以将 Clover 设置为主引导加载程序,并使用它在 Windows、GRUB 和 OS X 之间进行选择。)主要缺点是更换密钥是一个相当复杂的过程。我将详细介绍这里,如果您有兴趣尝试,或者至少阅读一下以评估是否要尝试。此外,如果您选择这种方式,您可能必须在更新 Clover、Apple 引导加载程序和其他程序时定期签署更新的二进制文件。这会给正在进行的系统维护增加一点负担,就像 rEFInd 解决方案一样。
答案2
编辑:刚想起来 Clover 是一个 Hackintosh 引导程序,而不是官方的 Apple 引导程序和 Mac,这是我写这个答案时所预料的。
invalid signature
听起来您的 OSX 安装需要安全启动链,就像 Windows 平台上的安全启动一样。我不确定这是否适用于此处,但通常使用hfs-bless
或 Macsbless
命令来允许在 Mac 上对非 OSX 安装进行 EFI 启动。类似于 Linux Foundations 预加载器如何弥补未签名的 EFI 加载器的差距,bless
理论上应该启用外部加载器 (GRUB) 来启动 OSX。
hfs-bless
可在麦克泰尔电力收购协议。
顺便说一句chainloader
应该是正确的,并且sudo grub-mkconfig -o /boot/grub/grub.cfg
和sudo update-grub
是相同的,只需做一个whereis
找到路径并update-grub
在编辑器中查看。
答案3
我尝试在 BIOS 启动系统上执行相同操作,但遇到了类似的错误。我找到的针对这种情况的说明和示例不清楚。您使用的是 UEFI 模式 GRUB2,还是 BIOS 安装?BIOS 安装可能无法链式加载到 EFI。如果是 BIOS 模式,可以尝试以下方法:尝试在 MBR 或分区上链式加载引导加载程序。顺便说一句,如果您使用的是多启动系统,最好在每个磁盘上安装一个引导加载程序以防万一。我喜欢有 3 个引导加载程序,这样当一个出现故障时,我可以轻松切换。