在 Retina MacBookPro 2015 上从外部 USB HDD 启动 Ubuntu

在 Retina MacBookPro 2015 上从外部 USB HDD 启动 Ubuntu

我已经在外部 USB HDD 上安装了 Ubuntu 15.04/x86_64,该磁盘有一个 GUID 分区表,并且 Ubuntu 是使用 EFI 启动管理器安装的。

我可以在 UEFI 模式下在某些 Windows PC 上成功启动 USB HDD,但它无法在我的新款 Retina MacBook Pro 2015 型号 (MacBookPro11,5) 上运行,当我按下“Option”键重新启动计算机时,启动项根本没有出现。

有点奇怪的是,我的 RMBP 确实支持 UEFI 2.0,它可以在 EFI 模式下从外部硬盘启动 Windows8/10。我不知道为什么 Ubuntu 不工作。

答案1

当 Windows 10 - 64 位在 EFI 模式下启动时,固件加载的文件位于/EFI/BOOT/bootx64.efi隐藏的 EFI 分区中。基本上,您将 grub 2 移动并重命名为该位置和名称。您的 Mac 认为它正在启动 Windows,但实际上它正在启动 grub 2。这并不是因为您有一台新的 Retina MacBook Pro 2015 型号 (MacBookPro11,5)。这也适用于我,我有一台 iMac 2007 型号 (iMac7,1)。

更新 1:

我承认上面的帖子措辞不当。当我提到 Windows 10 时,我正在查看使用 VirtualBox 在 2007 年 iMac 上以 EFI 模式完成的安装。Rod 的评论是正确的,和都EFI/BOOT/bootx64.efi存在EFI/Microsoft/Boot/bootmgfw.efi并且是相同的。我不确定 VirtualBox 使用哪个文件来启动虚拟机。

我的 iMac 上安装了 Windows 8.1 - 64 位,尽管 Apple 网站“使用 Boot Camp 在 Mac 上安装 Windows 的系统要求“仅指定 Windows 7 - 32 位。此安装使用旧式 BIOS/MBR 方案。

我想说的是,Windows 启动 Ubuntu 的解决方案(通过 GRUB 2)与拥有兼容 UEFI 的 Mac 无关。我成功测试了他的方法,可以启动安装在我内置硬盘上的 Ubuntu。这个事实可能会引起其他 Mac 用户的兴趣。

至于为什么此方法适用于 Windows 的情况的详细解释,我参考了统一可扩展固件接口规范,版本 2.5,2015 年 4 月。3.5.1.1 可移动介质启动行为,第 88-89 页,指定对于 x64 架构,固件将尝试使用位于 的文件从可移动媒体启动\EFI\BOOT\BOOTx64.EFI

更新 2:

这是对 Ron 关于 Mac 不符合 UEFI 标准的评论的回应。

在确定 Mac 是否具有 UEFI 时,我会查看文件/Applications/Utilities/Boot Camp Assistant.app/Contents/Info.plist。下面是从安装了 Yosemite OS X 10.10.4 和 Boot Camp Assistant 版本 5.1.4 (500) 的 Mac 中获取的列表。具体来说,我正在查看键后列出的数组PreUEFIModels。我假设如果 Mac 型号晚于数组中给出的型号,则可以且应该以 EFI/GPT 模式安装 Windows。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>32BitSupportedModels</key>
    <array>
        <string>MacBook7,1</string>
        <string>MacBookAir5,2</string>
        <string>MacBookPro10,1</string>
        <string>MacPro5,1</string>
        <string>Macmini5,3</string>
        <string>iMac12,2</string>
    </array>
    <key>BuildMachineOSBuild</key>
    <string>14D81</string>
    <key>CFBundleDevelopmentRegion</key>
    <string>English</string>
    <key>CFBundleDisplayName</key>
    <string>Boot Camp Assistant</string>
    <key>CFBundleExecutable</key>
    <string>Boot Camp Assistant</string>
    <key>CFBundleGetInfoString</key>
    <string>Boot Camp Assistant 5.1.4, Copyright © 2015 Apple Inc. All rights reserved</string>
    <key>CFBundleIconFile</key>
    <string>DA</string>
    <key>CFBundleIdentifier</key>
    <string>com.apple.bootcampassistant</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>Boot Camp Assistant</string>
    <key>CFBundlePackageType</key>
    <string>APPL</string>
    <key>CFBundleShortVersionString</key>
    <string>5.1.4</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>500</string>
    <key>DARequiredROMVersions</key>
    <array>
        <string>IM41.0055.B08</string>
        <string>IM42.0071.B03</string>
        <string>IM51.0090.B03</string>
        <string>IM52.0090.B03</string>
        <string>IM61.0093.B01</string>
        <string>MP11.005C.B04</string>
        <string>MB11.0061.B03</string>
        <string>MBP11.0055.B08</string>
        <string>MBP12.0061.B03</string>
        <string>MM11.0055.B08</string>
    </array>
    <key>DTCompiler</key>
    <string>com.apple.compilers.llvm.clang.1_0</string>
    <key>DTPlatformBuild</key>
    <string>6D504m</string>
    <key>DTPlatformVersion</key>
    <string>GM</string>
    <key>DTSDKBuild</key>
    <string>14D77</string>
    <key>DTSDKName</key>
    <string>macosx10.10internal</string>
    <key>DTXcode</key>
    <string>0630</string>
    <key>DTXcodeBuild</key>
    <string>6D504m</string>
    <key>LSApplicationCategoryType</key>
    <string>public.app-category.utilities</string>
    <key>LSMinimumSystemVersion</key>
    <string>10.9.0</string>
    <key>NSMainNibFile</key>
    <string>MainMenu</string>
    <key>NSPrincipalClass</key>
    <string>NSApplication</string>
    <key>PreESDRequiredModels</key>
    <array>
        <string>MacBook7</string>
        <string>MacBookAir5</string>
        <string>MacBookPro10</string>
        <string>MacPro5</string>
        <string>Macmini6</string>
        <string>iMac13</string>
    </array>
    <key>PreUEFIModels</key>
    <array>
        <string>MacBook7</string>
        <string>MacBookAir5</string>
        <string>MacBookPro10</string>
        <string>MacPro5</string>
        <string>Macmini6</string>
        <string>iMac13</string>
    </array>
    <key>PreUSBBootSupportedModels</key>
    <array>
        <string>MacBook7,1</string>
        <string>MacBookAir3,2</string>
        <string>MacBookPro8,3</string>
        <string>MacPro5,1</string>
        <string>Macmini4,1</string>
        <string>iMac12,2</string>
    </array>
    <key>Win7OnlyModels</key>
    <array>
        <string>MacBook7,1</string>
        <string>MacBookAir3,2</string>
        <string>MacBookPro5,5</string>
        <string>MacPro2,1</string>
        <string>Macmini4,1</string>
        <string>iMac10,1</string>
    </array>
</dict>
</plist>

答案2

嗯,有点愚蠢,但我设法让外部 USB HDD 启动。Ubuntu 默认在“EFI/ubuntu”下安装 EFI 启动文件,只需将其重命名为“BOOT”,然后将“grubx64.efi”复制到“bootx64.efi”,然后一切都按预期工作。

根据@RodSmith 的评论,上述解决方案有效,因为EFI/BOOT/bootx64.efiEFI 找到引导加载程序的后备名称就是如此。

如果有人可以详细解释 Apple EFI 行为,那将非常有用。

相关内容