1

I've installed Ubuntu 15.04/x86_64 on an external USB HDD, the disk has a GUID partition table, and the Ubuntu was installed with EFI boot manager.

I can successfully boot the USB HDD on some Windows PCs in UEFI mode, but it doesn't work on my new Retina MacBook Pro 2015 model (MacBookPro11,5), when I reboot the computer with "Option" key pressed, the boot entry simply didn't show up.

It's a bit weird that my RMBP does support UEFI 2.0, it can boot Windows8/10 from external HDD in EFI mode. I've no idea why Ubuntu doesn't work.

  • Do not know Mac. But Ubuntu on a PC only installs boot loaders to drive seen as sda. I have tried installing to an ESP on my sdb drive and it says it is installing to sdb, but overwrites my /efi/ubuntu folder in sda. Do you have an /EFI/ubuntu folder in your external drive? And external drives in UEFI use /EFI/Boot/bootx64.efi. That file may be a copy of Windows own /EFI/Microsoft/Boot/bootmfgw.efi file. You can copy shimx64.efi to /EFI/Boot and rename it to bootx64.efi. But it will use a tiny grub.cfg in /EFI/ubuntu which is just a configfile to find the real grub.cfg in your install. – oldfred Jul 20 '15 at 17:45
  • This is the expected behavior. When you hold down the option key at startup, the firmware does not look at the EFI partition. One reason is that this partition is FAT formatted. Another, is the files and directories have the wrong names and folder structure. – David Anderson Jul 20 '15 at 17:46
  • As a person who already has ubuntu installed on an external disk on a Mac, let me ask you: How do you what to boot ubuntu? Do you want to use Grub 2 or boot directly to ubuntu? Do you want to use rEFInd as a boot manager? Do you want to just use bless to switch booting to ubuntu? It is not a question of how to do it, but rather which way do you prefer. – David Anderson Jul 20 '15 at 17:53
  • @DavidAnderson, I just want to boot a EFI Ubuntu installation I've made on another machine on an external USB HDD, don't want to bother with rEFIt or rEFInd. – Windoze Jul 20 '15 at 18:07
  • AFAIK, no Mac supports EFI 2.x (aka UEFI). This is confusing because Apple's internal version number has exceeded 2.0, but it's still following EFI 1.x standards in many areas, so it's not really EFI 2.x/UEFI. I have a late 2014 MacBook Air with firmware that reports itself as "Apple 1.10," for instance. That said, Apple has incorporated some EFI 2.x/UEFI features in its firmware, so it's really something of a hybrid. – Rod Smith Jul 21 '15 at 13:15
1

When Windows 10 - 64 bit boots in EFI mode, the file the firmware loads is located at /EFI/BOOT/bootx64.efi in the hidden EFI partition. Basically you moved and renamed grub 2 to this location and name. Your Mac thinks it is booting Windows when in fact it is boot grub 2. This is not because you have a new Retina MacBook Pro 2015 model (MacBookPro11,5). This also working for me and I have a iMac 2007 model (iMac7,1).

Update 1:

I admit the above post is badly worded. When I refered to Windows 10, I was looking at an installation done in EFI mode using VirtualBox on my 2007 iMac. Rod's comment is correct, both EFI/BOOT/bootx64.efi and EFI/Microsoft/Boot/bootmgfw.efi exist and are identical. I am not sure which file VirtualBox uses to boot the virtual machine.

I have Windows 8.1 - 64 bit installed on my iMac even though Apple's web site "System requirements to install Windows on your Mac using Boot Camp" specifies only Windows 7 - 32 bit. This installation uses the legacy BIOS/MBR scheme.

The point I was trying to make was that Windoze's solution to booting Ubuntu (via GRUB 2) has nothing to do with having a UEFI compliant Mac. I successfully tested his method to boot Ubuntu installed on my internal hard disk. This fact my be of interest to other Mac users.

As for a detail explanation of why this method works for Windoze's case, I refer to the the Unified Extensible Firmware Interface Specification, Version 2.5, April, 2015. Section 3.5.1.1 Removable Media Boot Behavior, on pages 88-89, specifies for the x64 architecture the firmware will attempt to boot from removable media using the file located at \EFI\BOOT\BOOTx64.EFI.

Update 2:

This is in response to Ron's comment about Mac's not being UEFI compliant.

When determining if a Mac has an UEFI, I look at the file /Applications/Utilities/Boot Camp Assistant.app/Contents/Info.plist. Below is a listing taken from my Mac with Yosemite OS X 10.10.4 and Boot Camp Assistant version 5.1.4 (500) installed. Specifically, I am looking at the array listed after the key PreUEFIModels. I have assumed that if a Mac model is later than one given in the array, Windows can and should be installed in EFI/GPT mode.

<?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>
  • Are you sure your 2007 iMac can boot Windows in EFI mode correctly? AFAIK Mac supports UEFI 2 since later 2013, I've tried to install Windows 8 with EFI on a MacBook Pro early 2013(MacBookPro11,1) and it didn't work, had to use to BIOS/Hybrid mode. – Windoze Jul 21 '15 at 3:50
  • The EFI/BOOT/bootx64.efi name is not the Windows boot loader name; that boot loader's official name is EFI/Microsoft/Boot/bootmgfw.efi. That said, Microsoft tends to copy its boot loader to EFI/BOOT/bootx64.efi, which is the fallback filename. Presumably Microsoft does this because there are a lot of flaky EFIs and circumstances in which the NVRAM entry can be lost, so having a boot loader at EFI/BOOT/bootx64.efi is helpful insurance. Another boot program can easily (and legally) take that name, though. – Rod Smith Jul 21 '15 at 13:18
1

Well, kind of stupid but I managed to make the external USB HDD boot. Ubuntu installs the EFI boot files under "EFI/ubuntu" by default, simply rename it to "BOOT", and copy "grubx64.efi" to "bootx64.efi" then everything works as expected.

According comments from @RodSmith, above solution works as EFI/BOOT/bootx64.efi is the fallback name where EFI finds a bootloader.

It could be very useful if someone can explain Apple EFI behaviors in details.

  • You do not explain where you found the this answer. I found this site: UEFIBooting. – David Anderson Jul 20 '15 at 20:25
  • @DavidAnderson, I've found some info by random searching over the internet, don't remember if the page you mentioned is in the list, also tried a lot of modify-and-reboot cycles :lol: – Windoze Jul 21 '15 at 3:53
  • A standard Ubuntu installation stores its boot loader at EFI/ubuntu/grubx64.efi on the ESP and creates an NVRAM entry for that name. When you move the disk to another computer, the NVRAM entry will be missing on the new computer, so this won't work. The EFI/BOOT/bootx64.efi name is a fallback filename that's used to make bootable removable disks (OS installers, emergency utilities, etc.). EFIs are supposed to look to this name if no other EFI entries work or if the user requests a boot from an external medium. – Rod Smith Jul 21 '15 at 13:12
  • Please mark your answer as correct. This will help others with the same problem find your solution. If someone posts a better answer, you can always change the one marked correct. Also, if you are interested, I did post where in the UEFI specification your answer can be found. – David Anderson Jul 21 '15 at 21:20

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.