为 OS X 添加 grub 菜单

8 partitioning boot grub2 macosx grub-efi

我在 MacBook Pro 上安装了 Ubuntu 16.04 Desktop,现在无法启动 OS X。我的磁盘分区表是:

Device         Start       End   Sectors   Size Type
/dev/sda1         40    409639    409600   200M EFI System
/dev/sda2     409640 392401823 391992184 186.9G Apple HFS/HFS+
/dev/sda3  392402944 490233855  97830912  46.7G Linux filesystem
Run Code Online (Sandbox Code Playgroud)

我在 /etc/grub.d/40_custom 中添加了 menuentry 如下:

menuentry "OS X" {
        insmod hfsplus
        set root=(hd0,gpt2)
        multiboot /boot
}
Run Code Online (Sandbox Code Playgroud)

并运行 update-grub,然后重新启动。

现在我可以看到“OS X”的条目,但是当我选择它时,它说:

error: disk 'hd0,gpt2' not found.
Press any key to continue...
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

小智 11

将以下代码添加到 /etc/grub.d/40_custom 文件对我来说效果很好:

menuentry "OS X" {
    insmod hfsplus
    search --set=root --file /System/Library/CoreServices/boot.efi
    chainloader /System/Library/CoreServices/boot.efi
}
Run Code Online (Sandbox Code Playgroud)

然后运行

sudo grub-mkconfig -o /boot/grub/grub.cfg
Run Code Online (Sandbox Code Playgroud)

在 iMac 17,1(Macbook 视网膜 2015 年末)、Ubuntu 16.04 LTS、Mac OS El Captain 上测试


小智 3

确保以下命令列出了 /boot/efi 分区:cat /etc/fstab 如果 /boot/efi 不存在,您将无法启动到 Mac OS X,如果它存在,您必须像这样在 grub 中添加菜单项:

  1. 使用您最喜欢的文本编辑器以 root 身份打开文件 /etc/grub.d/40_custom。终端示例:gksudo gedit /etc/grub.d/40_customsudo vi /etc/grub.d/40_custom
  2. 然后在文件末尾添加以下行:

    menuentry "MacOSX" {
      # Search the root device for Mac OS X's loader.
      search --file --no-floppy --set=root /usr/standalone/i386/boot.efi
      # chainload the loader, pass parameters like -v directly
      chainloader (${root})/usr/standalone/i386/boot.efi #-v
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 保存并退出

  4. 像这样更新 grub 配置:sudo update-grub

我一步一步回答,这样任何找到这个答案的人都可以轻松地重现这些步骤。这是在 Ubuntu 16.04 上测试的,Ubuntu 以 EFI 模式安装。Mac OS X:El Capitan、Mac mini。