Clover

From Leo's Notes
Last edited on 18 August 2023, at 20:48.

Clover is a bootloader that supports booting UEFI. It is capable of emulating a UEFI bootloader if your BIOS is too old to support it in order to boot operating systems that require UEFI. It is also capable of booting from devices that your BIOS might not recognize such as NVMe drives by allowing you to chainload the boot process.

Project website: https://github.com/CloverHackyColor/CloverBootloader

Booting Linux from NVMe with Clover[edit | edit source]

My use case for Clover is to boot Linux from a NVMe drive on a BIOS that's too old to properly detect it. The BIOS can be set to boot from a USB device with Clover which can then chainload the boot process from the NVMe drive.

The example below is what I did to get Proxmox installed on a NVMe drive to boot from a Sandy Bridge system (circa 2012). There hasn't been a new ASUS BIOS update for many years and it lacks the ability to detect and boot from the NVMe drives directly. As a work around, these are the steps I took to get Proxmox booting:

  1. Install Clover on a USB drive using Rufus.
  2. Go into the EFI/CLOVER directory and edit the config.plist file with the following:
    <?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>Boot</key>
      <dict>
        <key>Timeout</key>
        <integer>5</integer>
        <key>DefaultVolume</key>
        <string>LastBootedVolume</string>
      </dict>
      <key>GUI</key>
      <dict>
        <key>Custom</key>
        <dict>
          <key>Entries</key>
          <array>
            <dict>
              <key>Path</key>
              <string>\EFI\BOOT\BOOTX64.EFI</string>
              <key>Title</key>
              <string>Proxmox</string>
              <key>Type</key>
              <string>Linux</string>
              <key>Volume</key>
              <string>964F18C8-9ADB-4DEB-AA70-75361FF39E4A</string>
              <key>VolumeType</key>
              <string>Internal</string>
            </dict>
            <dict>
              <key>Path</key>
              <string>\EFI\BOOT\BOOTX64.EFI</string>
              <key>Title</key>
              <string>Proxmox</string>
              <key>Type</key>
              <string>Linux</string>
              <key>Volume</key>
              <string>85C5849B-9824-4D3A-961C-2DD190CD8ADE</string>
              <key>VolumeType</key>
              <string>Internal</string>
            </dict>
          </array>
        </dict>
      </dict>
    </dict>
    </plist>
    
    Adjust the volume ID with the ID of the partition containing grub. Ensure that the path exists on the partition.
  3. For NVME devices, you'll have to also move/copy the NvmExpressDxe.efi driver from the EFI/CLOVER/drivers/off to EFI/CLOVER/drivers/UEFI directory
  4. Reboot. Hit F3 when you see the Clover boot menu and select the entry for Proxmox. Clover should be able to remember this and autoboot into Proxmox next time.
  5. After the system boots, reboot once more and confirm that Clover can indeed autoboot by itself without intervention.

Troubleshooting[edit | edit source]

Clover doesn't autoboot[edit | edit source]

I wasted more time than I'd like to admit trying to figure out why I couldn't get Clover to autoboot. It turns out, I had the path to the EFI executable wrong. Doublecheck the path and volume IDs.

What I did wrong was misspelled the Grub EFI binary as 'grubx64.efi' rather than 'bootx64.efi' which was too easily overlooked as I tried troubleshooting the issue.

See also[edit | edit source]