Error "UEFI boot failed : not a bootable disk" after adding a SSD drive

Problem

After adding a SSD persistent drive to a custom machine image, it was found that the reconfigured VM would not boot as expected. The same image would boot without issue when SSD drives were not attached to the image. The following messages were identified in the Serial Console for the VM in question.

Serial port 1 (console) output for instance-7
[2J[01;01H[=3h[2J[01;01HCSM BBS Table full.
CSM BBS Table full.

UEFI: Failed to load image.
Description: UEFI nvme_card
FilePath: PciRoot(0x0)/Pci(0x4,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)
OptionNumber: 1.
Status: Not Found.

BdsDxe: failed to load Boot0001 "UEFI nvme_card" from PciRoot(0x0)/Pci(0x4,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00): Not Found

UEFI: Failed to load image.
Description: UEFI Google PersistentDisk
FilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)
OptionNumber: 2.
Status: Not Found.

BdsDxe: failed to load Boot0002 "UEFI Google PersistentDisk " from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0): Not Found
SeaBIOS (version 1.8.2-google)
Machine UUID 167edee3-8a1e-8c2c-6d2d-f7df4f6f7a7c
found virtio-scsi at 0:3
virtio-scsi vendor='Google' product='PersistentDisk' rev='1' type=0 removable=0
virtio-scsi blksize=512 sectors=104857600 = 51200 MiB
drive 0x000f3940: PCHS=0/0/0 translation=lba LCHS=1024/255/63 s=98304000
drive 0x000f3990: PCHS=0/0/0 translation=lba LCHS=1024/255/63 s=104857600
Sending Seabios boot VM event.
Booting from Hard Disk 0...
Boot failed: not a bootable disk

Booting from Hard Disk 1...
[H[J[1;1H[H[J[1;1H[2J[01;01H[=3h[2J[01;01HCSM BBS Table full.
CSM BBS Table full.

UEFI: Failed to load image.
Description: UEFI nvme_card
FilePath: PciRoot(0x0)/Pci(0x4,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00)
OptionNumber: 1.
Status: Not Found.

BdsDxe: failed to load Boot0001 "UEFI nvme_card" from PciRoot(0x0)/Pci(0x4,0x0)/NVMe(0x1,00-00-00-00-00-00-00-00): Not Found

UEFI: Failed to load image.
Description: UEFI Google PersistentDisk
FilePath: PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0)
OptionNumber: 2.
Status: Not Found.

BdsDxe: failed to load Boot0002 "UEFI Google PersistentDisk " from PciRoot(0x0)/Pci(0x3,0x0)/Scsi(0x1,0x0): Not Found
SeaBIOS (version 1.8.2-google)
Machine UUID 167edee3-8a1e-8c2c-6d2d-f7df4f6f7a7c
found virtio-scsi at 0:3
virtio-scsi vendor='Google' product='PersistentDisk' rev='1' type=0 removable=0
virtio-scsi blksize=512 sectors=104857600 = 51200 MiB
drive 0x000f3940: PCHS=0/0/0 translation=lba LCHS=1024/255/63 s=98304000
drive 0x000f3990: PCHS=0/0/0 translation=lba LCHS=1024/255/63 s=104857600
Sending Seabios boot VM event.
Booting from Hard Disk 0...
Boot failed: not a bootable disk

Environment

  • Google Compute Engine
  • RHEL 8.4 Custom Image
  • Other versions and distributions might be affected, but haven't been tested.

Solution

Install the UEFI bootloader on the impacted image and re-deploy the virtual machine. For additional details on re-installing the bootloader please check this Red Hat Article

Additional non Red Hat resource to install the bootloader can be found using some external documentation. See this post as an example. 

Once the Boot Loader has been reinstalled and includes the EFI Boot Loader, copy the image to your cloud storage and import it back into your project. This allows you to create new instances with the new image and add local SSD drives to them. Please remember, once you are able to successfully boot the VM with the local SSD you will need to format the SSD drive before you can use it.

Note: Access to the above article does require a Red Hat subscription.

Cause

The boot of the Custom Image failed due to the absence of the EFI bootloader. For more details on the UEFI bootloader process, please check this Red Hat Document..