# efibootmgr creates an entry in which DevPath is set to Venhw istead of PciRoot

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 ?

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"


• 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.

• thanks for your answer, the nvme0n1 comes from the brand new 950 Pro that inserts into a Ultra M2 slot on the motherboard, I'm using /dev/nvme0n1p6 in the refind.conf and it's working fine. The problem with bcfg is that I want to boot directly onto vmlinuz (instead of refind) but I don't know how to pass the kernel parameters. – ChiseledAbs Feb 4 '16 at 23:03
• refind.conf does not take Linux device identifiers such as /dev/nvme0n1p6, so if you've used that identifier in refind.conf, it's not doing what you think it's doing. Chances are it's just not doing anything. If you can post the exact line on which you've used it (or the entire manual boot stanza, if it's in one of them), I could say more. (Please edit your original question and then add a comment here so I'll notice; do not put the refind.conf entries in a comment, since they'll be mangled.) – Rod Smith Feb 5 '16 at 0:37

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.

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 ;)

• You lost me, it's efibootmgr that creates the entry to the EFI boot menu. refind.conf only comes in to play once refind is already booted. Anyway there is no reference to PciRoot in refind.conf, I use /dev/sda to specify the root partition. – ChiseledAbs Feb 4 '16 at 12:35
• refind should be loading first before any other boot managers. The conf file contains which bootloaders to choose from and there associated device ID. You could edit your actual EFI boot menu, but that doesn't seem like a wise idea when changing refind solves the problem.. Make sure refind loads first in the boot order, and change the conf file to associated ubuntu with the correct PciRoot. Then it will load the correct one regardless of the machines EUFI boot specifications here. You need to replace the incorrect loader with PciRoot from /dev/sda. – Kali Feb 4 '16 at 12:48
• Also, take out the -d and try it. I saw another post and it worked for that guy with a similar problem. askubuntu.com/questions/383166/… – Kali Feb 4 '16 at 12:54
• it is not a refind problem, it's an efibootmgr problem. refind boots fine when I create the EFI entry with bcfg but just creates an unboobtable japanese character when I make the entry with efibootmgr – ChiseledAbs Feb 4 '16 at 12:59
• Did you install refind via windows or linux? – Kali Feb 4 '16 at 13:15