我有一台 Intel Mac (MacMini) 和一个外部 USB 驱动器。在内部驱动器上,我有一个安装了 OSX 的分区,还有一个安装了 Ubuntu+Grub2 的分区。在外部驱动器上,我有一份完整的 OSX 分区副本和一份完整的 Ubuntu 分区副本(两者的 UUID 都与原始分区不同)。
我使用 rEFIt 进行双启动。内部 OSX 和 Linux 以及外部 OSX 出现在 rEFIt 菜单中并且可以启动。我希望能够启动的外部 Linux 不见了。创建 Linux 备份后,我在内部 Linux(它找到了所有 4 个安装)和外部 Linux(通过 chroot - 它找到了除内部 Linux 之外的所有安装)上执行了 update-grub。这并没有解决问题。
当我尝试使用内部 Grub 启动外部 Linux 时,收到错误消息:
error: no such device: <the UUID of the external Linux partition>
error: no such partition.
error: you need to load the kernel first.
当我ls
在内部 Grub 菜单中输入时,它会列出内部驱动器上的所有分区,但(hd1)
完全缺失。
我尝试使用 同步外部驱动器上的分区表gptsync
,但它声称不存在 GPT。gdisk
但是确实找到了一个,并且手动与fdisk
的输出进行比较让我感觉它们是同步的。(Linux 分区包含在两个表中。)
编辑:
我将 rEFInd 刻录到 CD 上并进行了实验。结果:
当我按 C 键从 CD 启动 Mac 时,它会短暂显示 rEFInd 的灰色背景,但随后会立即从内部安装启动 grub。我可以通过从 rEFIt 中选择 rEFInd 来解决这个问题。然而,这让我对在 OSX 中安装 rEFInd 信心不足。
rEFInd 显示了它应该显示的所有选项。正如所料,Grubs 仍然无法从外部磁盘启动 Linux。
当我使用 rEFInd 从外部磁盘启动 Linux 内核时,它确实启动了,但启动后发现内部分区已挂载为
/
。根据这文章中说,复制分区后唯一需要做的更改是在 grub 中。由于我没有使用 grub,所以我不明白。
答案1
您首先应该了解原生 EFI 模式启动和 BIOS/CSM/旧模式启动之间的区别。基于 Intel 的 Mac 具有 EFI 固件,而 OS X 以 EFI 模式启动。此固件包含一个 BIOS 仿真器(称为兼容性支持模块或 CSM;有时也称为“旧模式”支持),使它们能够启动 BIOS 模式的引导加载程序。Apple 打算将其用于启动 Windows;但许多人也使用此 BIOS/CSM/旧模式支持来启动其他操作系统,包括 Linux。不过,Linux 支持 EFI 模式启动以及 BIOS 模式启动,因此使用 Mac 的 CSM 通常是不必要的,甚至是一种复杂情况。另一方面,在某些型号上,在 BIOS 模式下启动时,硬件在 Linux 中的运行效果比在 EFI 模式下启动时更好。
在 Mac 上从外部媒体启动是一个不确定的提议,尤其是在 BIOS/CSM/传统模式下。很可能这就是你遇到的问题。我不知道 BIOS 模式下的问题有什么“灵丹妙药”解决方案。最有可能奏效的解决方案是切换到 EFI 模式启动。为此,我建议你从废弃的 rEFIt 切换到我维护的它的分支,重新索引。除其他功能外,rEFInd 还增加了使用 EFI 存根加载器直接启动 Linux 内核的支持(包括自 3.3.0 以来的大多数发行版提供的内核)。如果您从下载页面上提供的 USB 闪存驱动器或 CD-R 映像启动 rEFInd,它可能会从您的内部和外部驱动器启动 Linux(以及从两个位置启动 OS X)。如果可行,请安装 rEFInd在 OS X 中并安装用于存放 Linux 内核的文件系统(通常是 ext4fs)的驱动程序。结果应该是能够直接启动任一操作系统,绕过 GRUB。
如果这一切都有效,我建议删除丑陋和危险的混合型 MBR,Apple 的 EFI 使用它作为触发器来激活其 CSM。(该gptsync
实用程序创建或修改混合 MBR。)请阅读该链接以了解混合 MBR 是什么以及它为什么会成为问题。
编辑:
事实上,当您使用“C”直接启动 rEFInd CD-R 时,它无法正常工作,但从 rEFIt 启动时却可以正常工作,这并不能说明 rEFInd 在安装在硬盘或 USB 闪存驱动器上时正常工作的可能性有多大。不幸的是,从 EFI 中的光学介质启动相当复杂,而且 Apple 似乎也给自己带来了麻烦。因此,以这种方式启动可能有点冒险,特别是因为我(rEFInd 的开发人员)只有一台古老的 Mac 可以用来测试。从硬盘(或从 USB 闪存驱动器)启动更有可能成功。
根据您的描述,我怀疑您未能更新/etc/fstab
复制的文件系统上的文件。/etc/fstab
按照该过程操作时,需要更新以引用分区的新 UUID。如果您碰巧有一个/boot/refind_linux.conf
文件,那么它也必须更新。(您可能没有该文件,但如果您稍微超出了我的指示或过去使用过 rEFInd,您可能会有该文件。)