2

Hello I have a big problem because you see when I use efibootmgrto create a boot entry it just makes a unbootable japanese character in the EFI boot menu and this is very bad.

On the other hand when I use bcfg in the EFI shell it works just fine. The efibootmgr command used is : efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd" whereas the bcfg one is : bcfg boot add 3 fs0:\EFI\refind\refind_x64.efi "rEFInd"

When I do bcfg boot dump -v the difference between the efibootmgr and bcfg entries is the following :

The DevPath for the bcfg made entry is PciRoot(0x0)/Pci.....\EFI\refind\refind_x64.efi whereas for the efiboomgr made entry is just says VenHw(99E275E7-75AO-4B37)

Do you have an idea on how to get efibootmgr to work ? Or alternatively what option in the command call I need to use in order to specify kernel paramaters with bcfg ?

3 Answers3

0

I had exactly same issue. Tried to create boot entry with efibootmgr using nvme disk. It did not boot and the boot meny in the bios showed only japanese (or chinese?) characters to that entry. Inspecting the boot entries from another os showed stated that the newly created entry was of type VenHw.

However the problem was that the partition number was incorrect. I had root partition and some others in encrypted lvm volumes. So I speficied that encrypted partition for efibootmgr instead of the /boot partition that was supposed to specify. This is probably not your case, but I still write this in case someone else encounters this problem with the same reason. Double check your partition number and other parameters to efibootmgr.

0

If efibootmgr is creating an entry like you describe (VenHw(99E275E7-75AO-4B37)), then that sounds like a bug in either efibootmgr or the firmware. That said, consider the efibootmgr command you specified:

efibootmgr -c -d /dev/nvme0n1 -p 1 -l /EFI/refind/refind_x64.efi -L "rEFInd"

There are two things that are unusual about this:

  • Disk device -- Most disk devices in Linux have names of the form /dev/sd?, where ? is a letter from a up. Some devices, such as some SSD cards, have filenames that take other forms, like /dev/mmcblk0 (that's from memory and might not be quite right). I don't recall ever seeing a device name like /dev/nvme0n1. That's not to say it's wrong, but at the very least it's unusual, and you should double-check it. I'd be especially careful to not include the partition number -- that's what the -p option to efibootmgr is for.
  • File specification -- Older versions of efibootmgr require that files be specified using EFI syntax -- that is, with backslashes (\) rather than slashes (/) separating directory entries. Because Linux shells generally treat backslashes uniquely, this also requires either quoting the entire pathname or doubling up on the backslashes, so you'd specify -l \\EFI\\refind\\refind_x64.efi or -l "\EFI\refind\refind_x64.efi. I've heard that the most recent versions of efibootmgr will accept a more traditional Unix/Linux form and "translate" internally, but I don't know precisely when that feature was added, and you haven't said what version of Ubuntu you're using. Thus, I recommend you use doubled-up or quoted backslashes rather than slashes.

As a practical matter, of course, if you've got a working entry via bcfg, there should be no need to do anything else with efibootmgr. I assume you're asking because it should work and because you want to be able to perform this type of maintenance from Ubuntu.

Rod Smith
  • 45,120
  • 7
  • 66
  • 108
-1

You need to edit the refind.conf file and change the path back to PciRoot. Write down the entire description of the device, so you can enter it in the conf file. Just make sure to pick the correct PciRoot ;)

Kali
  • 129