error: cannot find commands 'linuxefi' or 'initrdefi'

I get those errors trying to boot openSUSE. They show up after it tries to load the linux 3.11.6-4 desktop and the initial ramdisk respectively.

My problem is long, and the issues before this are all listed there. I haven’t updated it since my last install attempt. Basically all the same, but I put the 200MB boot partition set as bios grub (iirc, may have been efi boot) and mounted it on /boot/efi. The installer had me install grub2-efi, and I’m pretty sure I checked support secure boot.

I ran both fdisk -l and parted -l on my /dev/sda, and the results are:
fdisk -l:

Disk /dev/sda: 2000.4 GB, 2000398934016 bytes, 3907029168 sectors

Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disk label type: gpt
#         Start          End    Size  Type            Name
 1         2048       401407    195M  BIOS boot parti primary
 2       401408     33961983     16G  Microsoft basic primary
 3     33961984    453386239    200G  Microsoft basic primary
 4    453386240   3907028991    1.6T  Microsoft basic primary

parted -l:

Model: ATA ST2000DM001-9YN1 (scsi)
Disk /dev/sda: 2000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt_sync_mbr

Number  Start   End     Size    File system     Name     Flags
 1      1049kB  206MB   204MB   fat16           primary  bios_grub, legacy_boot
 2      206MB   17.4GB  17.2GB  linux-swap(v1)  primary
 3      17.4GB  232GB   215GB   ext4            primary
 4      232GB   2000GB  1768GB  ext4            primary

Now I can FINALLY boot my HDD after all this trouble. I’m so close I can almost taste it. But I’m getting this error when booting into openSUSE:

Loading Linux 3.11.6-4-desktop ...
error: can't find command 'linuxefi'.
Loading initial ramdisk ...
error: can't find command 'initrdefi'.

I’m not sure what you have done here.

You seem to have a “grub.cfg” that is intended to be used by grub2-efi, but you appear to instead be booting with plain grub2.

If you want a “quick fix”, you can try locating “grub.cfg” (should be in “/boot/grub2”), and edit it. Change “linuxefi” to “linux” everywhere, and change “initrdefi” to “initrd” everywhere. Then perhaps plain grub2 can boot it.

Looking at your partitioning, I can see that you are confused. That’s understandable, as UEFI can be confusing.

Here’s some “fdisk” output from my UEFI system. This is with the version of “fdisk” from factory:

# fdisk -l /dev/sdb

Disk /dev/sdb: 931.5 GiB, 1000204886016 bytes, 1953525168 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
Disklabel type: gpt
Disk identifier: 684408B5-6977-4175-A06C-5A6CED930275

Device         Start       End   Sectors  Size Type
/dev/sdb1       2048   1026047   1024000  500M EFI System
/dev/sdb2    1026048   2050047   1024000  500M Linux filesystem
/dev/sdb3    2050048 232736767 230686720  110G Linux LVM
/dev/sdb4  232736768 274679807  41943040   20G Linux filesystem
/dev/sdb5  274679808 295651327  20971520   10G Linux swap
/dev/sdb6  295651328 316622847  20971520   10G Linux filesystem

And here’s corresponding “parted” output:

# parted /dev/sdb print
Model: ATA ST1000DM003-9YN1 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name              Flags
 1      1049kB  525MB   524MB   fat16        EFI System        boot
 2      525MB   1050MB  524MB   ext2         Linux filesystem
 3      1050MB  119GB   118GB                Linux LVM         lvm
 4      119GB   141GB   21.5GB  ext4         Linux filesystem
 5      141GB   151GB   10.7GB               Linux swap
 6      151GB   162GB   10.7GB               Linux filesystem

The differences to note:

(a) I have an EFI partition. You don’t appear to have one. Your partition 1 is flagged as a BIOS boot partition, rather than as an EFI partition.

(b) I do not have a BIOS Boot partition. You do appear to have one.

Booting with UEFI needs an EFI partition, but it does not need a BIOS boot partition. Traditional MBR style booting on a GPT disk uses plain “grub2” and does need a BIOS boot partition (which normally won’t use FAT).

I’m not sure what to suggest. One possibility would be to delete all partitions and start over.

Notes on “linuxefi” and “initrdefi”.

If you are not using secure-boot, you can continue to use “linux” and “initrd”. If you want secure-boot, you must use “linuxefi” and “initrdefi”. You cannot mix and match. That is, you cannot use “linuxefi” without “initrdefi” and if you instead use “linux”, you must also use plain “initrd”. What goes into the automatically generated “grub.cfg” depends on whether “/etc/default/grub” contains the line “GRUB_USE_LINUXEFI=true”.

Using “linuxefi” loads the kernel into memory in a different way (calls it at a special EFI entry point).

I hope this gives you some pointers as to what went wrong. Feel free to ask additional questions if I have not been clear enough.

Reinstalled, did a FAT system on /boot/efi. Installed grub2 on it. It was so simple… I feel silly now. I thought I had done that…

Should be default if you boot the media in EFI mode not legacy