Restore UEFI Boot Entries

I recently loaded the setup defaults on my ThinkPad after trying to diagnose a boot problem and this cleared the UEFI boot entries leaving me unable to boot my installed OS. In this article, I’ll show you how to recreate a new boot entry using efibootmgr.

You’ll need a live OS to boot from that has efibootmgr. You might be able to use the Debian netinst rescue mode, but I would recommend the full live install images. I used Tails, a Debian-based live OS focused on privacy, because it’s what I had on hand. If you do use Tails, make to enable the administration password at the Tails Greeter.

Whatever you choose, boot into it and get yourself to a root prompt.

Identify the device name for your system partition. In my case, my EFI System partition is sda1, which is always a FAT filesystem and is usually the first partition on a disk.

1
2
3
4
5
6
7
8
9
10
11
12
13
root@amnesia:~# lsblk -o NAME,FSTYPE,MODEL,SIZE
NAME FSTYPE MODEL SIZE
sda SB2 223.6G
├─sda1 vfat 512M
├─sda2 ext2 244M
└─sda3 crypto_LUKS 222.9G
└─sda3_crypt LVM2_member 222.8G
├─thinkpad--vg-root ext4 28G
├─thinkpad--vg-swap_1 swap 11.9G
└─thinkpad--vg-home ext4 183G
sdb USB_2.0_FD 7.5G
├─sdb1 vfat 4G
└─sdb2 crypto_LUKS 3.5G

I recommend mounting the EFI system partition to check you have the right disk and also to verify the path to the UEFI binary we’ll need next. Unmount when you’re done.

1
2
3
4
5
6
7
8
9
10
11
12
13
root@amnesia:~# mount /dev/sda1 /mnt
root@amnesia:~# find /mnt
/mnt
/mnt/EFI
/mnt/EFI/debian
/mnt/EFI/debian/shimx64.efi
/mnt/EFI/debian/grubx64.efi
/mnt/EFI/debian/mmx64.efi
/mnt/EFI/debian/fbx64.efi
/mnt/EFI/debian/BOOTX64.CSV
/mnt/EFI/debian/grub.cfg
/mnt/EFI/debian/grub.efi
/mnt/EFI/debian/grubia32.efi

Now that you’ve identified the correct disk, use efibootmgr to create a new entry. --disk is the disk of the system partition, not the partition itself! --part is the partition number, starting at 1. --loader is the path to the UEFI binary. You will need to use shimx64.efi instead of grubx64.efi if you’re using SecureBoot. You must use backslashes as the path separator.

1
2
3
4
5
6
7
8
9
root@amnesia:~# efibootmgr --verbose --create --disk /dev/sda --part 1 --loader "\efi\debian\grubx64.efi" --label "Debian"
BootCurrent: 0008
Timeout: 2 seconds
BootOrder: 0012,0000,0001,0002,0003,0007,0008,0009,000A,000B,000C,000D
Boot0000 Setup FvFile(721c8b66-426c-4e86-8e99-3457c46ab0b9)
Boot0001 Boot Menu FvFile(126a762d-5758-4fca-8531-201a7f57f850)
Boot0002 Diagnostic Splash Screen FvFile(a7d8d9a6-6ab0-4aeb-ad9d-163e59a7a380)
...
Boot0012* Debian HD(1,GPT,3b9ed62c-c28d-4866-842e-29c9bc7b0ac7,0x800,0x100000)/File(\efi\debian\grubx64.efi)

Assuming everything went OK, efibootmgr will list all the entries (which I trimmed here) and your new one should be at the bottom. Confirm everything looks correct and reboot. Fingers crossed!