I was having exactly the same problem whilst installing Ubuntu 20.04.2.0 LTS on a 2020 MacBook Pro with a 2 GHz Quad-Core Intel Core i5 processor using macOS Big Sur Version 11.1. After spending two days trying to get it to work I finally found a solution. Be warned it is a long process.
From my research I found that the issue is due to the Mac bootloader expecting the EFI partition to be formatted as HFS+ where the Ubuntu installer formats it as VFAT (as stated by Rohith Madhavan here).
To get around this issue I found three possible solutions:
- Use Rohith Madhavan's method.
- Swap your bootloader from GRUB to rEFInd.
- Install Ubuntu on an external SSD using Floris van Breugel's method.
Option one was posted seven years ago and required adding an unsigned repository to my Ubuntu installation (which I wasn't willing to do for security reasons). I didn't understand the full implications of swapping from GRUB to rEFInd so I wasn't comfortable using option two and finally, I didn't want slow memory access by using an external SSD so I didn't want to go with option three.
My final solution was to use parts of options one and three to make my own GRUB config file formatted in HFS+ so that I could boot Ubuntu from a partition on my internal SSD.
Backup
Whilst the process shouldn't cause you any issues, if a mistake occurs it could wipe your drive. As a result, it is always safest to back everything up before progressing.
Installing Ubuntu
- Open up Disk Utility on your Mac.
- Select your
Apple SSD
drive (make sure to select the parent drive not the container).
- Select "Partition".
- Hit the plus button and create a new partition called
Ubuntu Boot Loader
with format Mac OS Extended (Journaled)
and size 128MB. This will serve as the location for your Ubuntu bootloader later on.
- Hit the plus button again and create another new partition called
Ubuntu
with format MS-DOS (FAT)
and allocate it the memory size you want your Ubuntu installation to have (I would recommend no smaller than 50GB).
- Download Ubuntu from here.
- Plug in a USB and go to Disk Utility. From here locate the USB, hit
Erase
, select the format MS-DOS (FAT)
and choose the scheme GUID Partition Map
then hit Erase
.
- Use Etcher to flash this ISO file onto a USB. Be warned this will wipe the entire USB (see this for more details).
- Restart your computer hitting
Cmd+R
on reboot. This will put you into recovery mode.
- Sign into your account, go into the menu location
Utilities
, select the first thing in the drop down menu and change the settings to No Security
and Allow booting from external drive
.
- Turn off your computer.
- Plug in your bootable USB drive and turn on your computer whilst holding down the
Option
key.
- Select the EFI boot drive (should be yellow). It might show you a warning saying
Update Required
. Hit the Update
option. This will restart your computer. Make sure you are holding Option
when it turns back on. Then click on EFI boot again.
- Follow steps one to five from here.
- On the
Installation Type
page select Something Else
.
- Locate the
MS-DOS (FAT)
partition you made and hit minus.
- Select
Free Space
and hit plus.
- Create your Linux memory space by choosing how many GBs you want, choose
Ext4 Journaling File System
, check Format the partition
and have the mounting point as /
.
- Select
Free Space
and hit plus.
- Create your Linux swap space, use the remaining memory and choose
swap
as the format.
- Under
Device for boot loader installation
select the partition where your ext4
formatted memory is.
- Hit
Install Now
.
- Continue the installation process. You will again see the
grub-install /dev/nvme****
failed warning but don't worry. Just hit restart. You will be asked to remove the USB and then hit Enter
.
You will now have Ubuntu installed on your computer, but your GRUB bootloader won't be able to open it without some help.
Getting into Ubuntu
- Restart your computer and hit the
Option
key when booting.
- Select the EFI boot drive (this is your Ubuntu installation).
- You should be displayed with a GRUB terminal.
- Follow these steps that Rohith Madhavan outlines:
At the grub console, type ls
grub> ls
(memdisk) (hd0) (hd0,msdos) (hd1) (hd2) (hd2,gpt3) (hd2,gpt2) (hd2,gpt1)
You may not get exactly the same results as this, but you’ll have some similar options.
Now, find the partition which contains your user's home directory.
grub> ls (hd2,gpt2)/home
rohith/
Keep trying until you find it.
The result from the last step has two parts: (hdX,gptY). You need to keep the hdX part, but go through all the gptY options looking for a /boot/grub directory.
grub> ls (hd2,gpt2)/boot/grub
unicode.pf2 [...] grub.cfg
Now you want to set this as your root for further commands.
grub> set root=(hd2,gpt2)
The only way to boot properly was to use the UUID of the drive. To get it -
grub> ls -l (hd2,gpt2)
Note down the UUID. You'll have to type it manually in the next step.
grub> linux /boot/vmlinuz .efi.signed root=UUID=〈the UUID from above〉
The GRUB console can do tab completion, so if you just type out the vmlinuz part and hit tab, then hit . and tab again, you won't have to type the whole file name. make sure that the efi.signed part is present.
Now, set the initial RAM disk
grub> initrd /boot/initrd〈...tab here!...〉
You should be able to boot with the command
grub> boot
You will now be in your Ubuntu installation as if everything was installed correctly. But every time you restart you have to repeat this process. To work around this you can do the following.
If you are experiencing issues:
Confirm that the UUID you received from before is located in your distribution's grub.cfg under /boot/efi/EFI/ (ex. /boot/efi/EFI/ubuntu/grub.cfg) in the line search.fs_uuid SYSTEM-PARTITION-UUID-HERE root
. If not, copy-paste the line with the current value and prepend with a comment line (#), and on your new line, replace the SYSTEM-PARTITION-UUID-HERE
with your UUID of your ubuntu partition.
Permanently Fixing the GRUB Issue
Here you want do reformat the VFAT boot loader that the Ubuntu installation made by default to HFS+. This can be done by making your own boot loader config using GRUB. The method I used was the same as what Floris van Breugel did (but on my internal SSD instead of an external SSD).
- Following the instructions starting from the heading
Making Ubuntu bootable part 1
from this all the way to the end of Turn SIP back on (for security)
. The only changes are the disk your should reference is your internal Ubuntu Boot Loader
partition (you do not need an external drive with this partition.
- Restart your computer holding down the
Option
key during boot-up. You will now have two EFI boot drives. Go into the far left one. It should say you need to install an update for this to work. Click Update
.
- During reboot hold down the
Option
key again and then select the middle EFI boot drive. This will take you to the GRUB screen again. Wait a minute or two and it should then take you to the Ubuntu loading screen.
YOU ARE ALL DONE. You should now be able to boot Ubuntu and MacOS now.
Hope this works for you.