Apple - Why does Refind break when upgrading from Mac OS High Sierra (HFS) to Mojave (APFS) on NVMexpress Macs?
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:
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
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:
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:
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.
Normally, rEFInd relies on the Mac firmware to read Apple formatted partitions. Eventually, this software is not sufficient in certain circumstances.
You can include all the drivers provided with rEFInd by adding the
--alldrivers option when executing the
./refind-install script. However the refind-install man page states the following with regard to this option.
When you specify this option, refind-install copies all the driver files for your architecture. You may want to remove unused driver files after you use this option. Note that some computers hang or fail to work with any drivers if you use this option, so use it with caution.
I assume one of the drivers you want to keep would be named
hfs_x64.efi. The The rEFInd Boot Manager: Using EFI Drivers webpage states the following about this driver.
- HFS+—Oracle wrote this driver, apparently with some code taken from open source Apple examples. It was then further modified by the Clover authors. I expect this driver to have limited appeal to most rEFInd users. Macs don't need it, since Apple's EFI implementation provides its own HFS+ driver, and HFS+ isn't normally used on UEFI-based PCs. Some CDs are mastered with both ISO-9660 and HFS+, or even with HFS+ alone, and it's conceivable that an HFS+ driver would be useful when accessing such discs. Also, one unusual feature of this driver is that it can read files from within an Apple LVM setup, which Apple's own EFI HFS+ driver can't do. The upshot of this feature is that if you load this driver on a Mac that uses Apple's LVM, rEFInd is likely to show two OS X boot options. Ordinarily this is pointless, but it could be helpful if your Recovery HD volume becomes damaged. I'm providing the driver mainly because it compiled cleanly with no extra work, aside from providing a Makefile entry for it.
APFS is Apples latest attempt to create a LVM. The above excerpt does confirm that the driver can detect additional boot options when using Apple's LVM.