How to boot Ubuntu on a mac from external USB storage?

45,036

Solution 1

Well, I spent a second whole day on it and now I've cracked it.

I sincerely hope some other poor soul gets some value out of this.

Here's a recipe that works (at least, on my iMac with Ubuntu 14.04):

  • Boot with bootable USB, install Ubuntu
  • Partition your USB as follows:
    • 200MB EFI boot partition
    • 200MB ext2, mount to /boot
    • Swap space if you want it
    • One or more other partitions to hold Ubuntu proper (e. g. ext4 on /)
  • Complete the install, reboot to OS X
  • Get gdisk (pkg installer for OS X) and rEFInd binaries
  • execute "diskutil list" from the console and note the device name, and the EFI partition (e. g. /dev/disk3, /dev/disk3s1)
  • Follow the gdisk recipe at http://www.rodsbooks.com/ubuntu-efi/ under "Fixing the installation" point 6
  • Install rEFInd on your USB's EFI partition. From the refind directory:

    ./refind-install -–usedefault /dev/disk3s1
    

    (you can drag the file into command prompt to get full path)

Then when you reboot, you can "EFI Boot" to rEFInd, and there should be an option to boot GRUB/linux.

I have documented this in more detail here: http://coljac.net/2014/stuff/installing-ubuntu-onto-a-bootable-usb-stick-or-other-device-on-a-mac/

Solution 2

If you prefer not to change your Mac's default boot loader and have your USB key bootable from any Mac here is the solution I found:

  • start the Ubuntu live version by selecting "Try Ubuntu without installing"
  • prevent any bootloader installation by starting the installer via the ubiquity --no-bootloader command via Terminal
  • erase and install Ubuntu on your destination USB drive
  • restart your Mac and start the grub command line using the Ubuntu live USB and pressing 'c' when the GRUB bootloader shows up
  • perform a manual boot of the installed Ubuntu system
  • fix the EFI partition:

    • install required packages:

      $ sudo apt-get update
      $ sudo apt-get install mactel-boot hfsprogs gdisk grub-efi-amd64
      
    • use gdisk and mkfs.hfsplus to replace the existing partition with an Apple HFS/HFS+ one

    • replace the existing entry UUID=... /boot/efi vfat defaults 0 1 in your /etc/fstab file with UUID=<your usb EFI partition uuid> /boot/efi auto defaults 0 0
    • run sudo mount /boot/efi
    • create the required directories and files:

      $ sudo mkdir -p "/boot/efi/EFI/$(lsb_release -ds)/"
      $ sudo bash -c 'echo "This file is required for booting" > "/boot/efi/EFI/$(lsb_release -ds)/mach_kernel"'
      $ sudo bash -c 'echo "This file is required for booting" > /boot/efi/mach_kernel'
      
    • install GRUB:

      $ sudo grub-install --target x86_64-efi --boot-directory=/boot --efi-directory=/boot/efi --bootloader-id="$(lsb_release -ds)"
      
    • bless the bootloader code:

      $ sudo hfs-bless "/boot/efi/EFI/$(lsb_release -ds)/System/Library/CoreServices/boot.efi"
      
    • create the GRUB configuration:

      $ sudo sed -i 's/GRUB_HIDDEN/#GRUB_HIDDEN/g' /etc/default/grub
      $ sudo sed -i 's/GRUB_TIMEOUT=10/GRUB_TIMEOUT=0.1/' /etc/default/grub
      $ sudo grub-mkconfig -o /boot/grub/grub.cfg
      

The system is now bootable from any Mac by simply pressing and holding the "Option" key at startup.

Image of the Mac boot menu with Ubuntu entry

I detailed the instructions here: Ubuntu installation on USB stick with pure EFI boot (Mac compatible)

Solution 3

I skipped the whole gdisk thing as mentioned in the solution. This alone worked for me

./refind-install -–usedefault /dev/<EFI-disk-of-external-storage-where-ubuntu-is-installed>

Solution 4

My story (can be useful to someone with the same problem - so it's my turn to help the community): I’ve installed Ubuntu on external USB 3.0 hard drive on an iMac late 2013. I created the following partition scheme on that external drive:

EFI (200MB FAT), BOOT (200MB EXT2) and / (20GB EXT4)

I choose to add a bootloader to the External drive (not the iMac drive) After the successful installation, I was shocked when I couldn’t boot my OS X. It's strange because I didn't install any bootloader on main drive. If I removed the external drive, I get a black screen with the grub prompt command!

In panic, I researched online and I decided to give a try to rEFInd. After the installation from the .deb source ( http://www.rodsbooks.com/refind/installing.html - it's recommended to install from the .deb file to fix the problem with the Ubuntu 16.x versions - # dpkg -i refind_0.10.3-1_amd64.deb ) I could boot my OS X.

To restore the original boot menu (and ditch Linux), you can use the startup disk utility on your OS X or you can mount the EFI partition and with the "sudo rm ..." command, remove the “refind” and “Ubuntu” folders on that partition.

Reboot and everything will work like before.

Solution 5

After a few false starts, this worked:

I used a live USB (well it was another HD) made with dd-copy and the ISO.

I partitioned the disk (240GB SSD plugged in USB3.1 caddy) with Gparted, NOT THE INSTALLER. The byte block alignment messes up in the installer, and I could only get it to install in XFS, but that attempt failed to boot. I'd get GRUB, but no Ubuntu. So I tried again with Gparted.

I used this partition layout:

efi   (200mB)
\     (44GB, \ the system root) note, this isn't the \boot, it's just  \
swap  (44GB swap)

Installed.
Rebooted and held down option.
Selected disk with arrow key.

This was on a new imac 2019; osx is unharmed.

Share:
45,036

Related videos on Youtube

Coljac
Author by

Coljac

Australian nerd and tech commentator.

Updated on September 18, 2022

Comments

  • Coljac
    Coljac over 1 year

    I wish to run Ubuntu on my iMac from external USB storage, either an external disk or a flash drive.

    I can easily create a bootable USB stick and use that to install Ubuntu 14.04 onto a properly partitioned USB device. However, contrary to some assertions here and elsewhere, after restarting the result is not detected by the Mac as bootable.

    I have Googled extensively and I'm sure it's possible to get the Mac to boot it, but the instructions I've found have been either too vague (Installing Ubuntu on and External Hard Drive and boot in a Mac) or in one case, too complex (http://www.rodsbooks.com/ubuntu-efi/) to make much sense. However, the common thread appears to be using rEFInd to rejig the boot options.

    So, I've managed to get rEFInd installed on a partition on the external drive but it does not detect the Ubuntu installation. I have an ext2 /boot partition on the same disk, and copied ext2_x64.efi into the /EFI directory, but no go.

    I'm a bit stuck at this point, and the next steps will have to be a detailed study of bootloaders and EFI. However, I think I must be close to cracking this and hope somebody can point to a step-by-step guide somewhere.

    To recap:

    • USB disk has ext2 /boot partition (with vmlinuz image on it), and ext4 / partition with the rest of Ubuntu 14.04 installed
    • Isn't bootable after install
    • Put rEFInd on a another, FAT32 partition which contains /EFI directory
    • Copied ext2_x64 to /EFI/boot and /EFI/refind
    • Can boot, rEFInd loads, there is an option to boot ext2_x64.EFI(?) but no Ubuntu/vmlinuz.

    If I can get this solved I will place a clear guide on the web somewhere!

  • Ahmed Ghoneim
    Ahmed Ghoneim over 8 years
    4 days gone! & now I'm here, thank you :)
  • johndpope
    johndpope over 6 years
    the install.sh is no longer part of refind (refind-bin-0.11.0). or maybe I'm missing something.
  • johndpope
    johndpope over 6 years
    there's no longer an install.sh file in refind.