Ubuntu: Boot Ubuntu from external USB HDD on Retina MacBookPro 2015


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.


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 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>  


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.

Note:If u also have question or solution just comment us below or mail us on toontricks1994@gmail.com
Next Post »