Why does Refind break when upgrading from Mac OS High Sierra (HFS) to Mojave (APFS) on NVMexpress Macs

apfsdual-bootefihigh sierramojave

Problem: NVMExpress Macs that have Refind do not see the APFS container and I cannot boot into my mac.

Also, apologies to those who were aware of this solution, but I faced this issue along with several other technicians on the problem and we could not solve this until now.

I will be answering my own question below but this post applies to users who are doing the following with their mac:

  • Have disabled SIPS on their device
  • Trying to use refind with Mac OS Mojave
  • Upgrading from High Sierra HFS to Mojave APFS
  • Using refind version 10.4 or 11.4

This post will not apply for macs that do not have:

  • A NVMExpress controller. Examples of Macs that do have it are the Mac Models 18,2, and 18,3.

If you install refind using the unix installer onto an NVMExpress machine, it does not automatically install the appropriate driver folder that will allow you to support APFS, leaving you to assume that refind is buggy. Refind ends up not being able to see the APFS container Preboot or Macintosh HD volumes on the refind menu to boot into your Mac OS Mojave System.

If you tried this on a non NVMExpress machine and had High Sierra APFS, you would only see the Macintosh HD volume, which validates that refind works. This is also true if you had Mojave on a non NVMexpress machine, as refind version 11 would easily pick up on both the Preboot and the Macintosh HD Volumes.

Best Answer

Solution:

EDIT: Thank you to @DavidAnderson for pointing out that the driver file "hfs_x64.efi" is what causes the Mac to be able to see the bootable container on the mac. Please see his answer for a better explanation.

The solution is very brief and involves installing the "driver_x64" folder included with the refind download in refind-bin_X/refind/drivers_x64.

Simply drag and drop this "drivers_x64" folder into the EFI/EFI/refind directory after mounting the EFI. Your EFI refind folder should look like this:

enter image description here

Below are some useful commands that helped me.

How to check which mac model I have

You can enter the following in terminal to see your model number:

system_profiler SPHardwareDataType | grep "Model Identifier:"

How to check if my Mac has NVMExpress

Newer macs will most likely have the NVMExpress SSD Controller. But if you are curious in learning what kind of connection you are using, you can input the following commands, separately.

If your device is SATA it will return the info regarding your SATA hard drive and the connection.

If your device is NVMExpress then it will return info regarding your NVMExpress Hard drive and the connection. Of course if your device is not NVMexpress then it will return nothing.

system_profiler SPNVMeDataType
system_profiler SPSerialATADataType

Example:

enter image description here

Please note that the version of Refind will affect which Volumes you would be able to boot up from. I tested this on Refind version 10.4 and 11.4.

From my testing I found that with 10.4 you will only be able to see the "Macintosh HD" volume.

Any version after and including 11.1 are designed to see the Preboot Volume that comes installed with the upgrade to Mac Os Mojave. For more info regarding Refind revisions you can go here:

http://www.rodsbooks.com/refind/revisions.html

I do find it strange that within the driver folder there is no explicit mention of an "apfs.efi" driver. I probably plan to bring this up to the developer. But it still seems to fix this issue. See below for what I mean:

enter image description here

I hope this helps! This was breaking my head for over a week until this simple solution occurred to me. Hopefully it helps you as well.