3

I moved the disk with my debian installation to another computer, and it wouldn't boot. Using systemrescuecd I mounted my uefi partition (512 MB, vfat filesystem, has EFI directory) and did cd /mnt/sda1 && mkdir BOOT && cp debian/grubx64.efi BOOT/bootx64.efi, and it booted fine. (got the advice at Askubuntu) Now how do I register debian/grubx64.efi file with my system so that I can get rid of BOOT/bootx64.efi?

3 Answers 3

6

You can list and manipulate the EFI boot entries with efibootmgr on Linux.

Once you've successfully booted the system manually, make sure that efibootmgr is installed:

apt-get install efibootmgr

Then make sure the efivars pseudo-filesystem is mounted RW:

mount -o remount,rw -t efivarfs efivarfs /sys/firmware/efi/efivars

If that command fails, or if running efibootmgr results in a message like EFI variables are not supported on this system. then you did not boot in EFI mode. Reboot and try again.

Finally, add debian/grubx64.efi to the EFI boot list and make it the default:

efibootmgr -c -p 1 -d /dev/sda -L "GRUB" -l '\efi\debian\grubx64.efi'

The -p 1 and -d /dev/sda options specify the partition and block device containing the EFI system partition where you created the BOOT sub-directory. -L is a label for the entry being created, and -l is the path to the boot-loader.

You can delete entries you don't want with efibootmgr -b <boot-entry> -B.

You can get a detailed list of the current EFI boot entries with efibootmgr -v.

See man efibootmgr for details. I recommend reading it thoroughly and googling or asking here for clarification before running any of the above commands.

3
  • 1
    note: this is how to do it manually. Running grub-install or update-grub should do much of the above automatically if you have grub-efi-amd64 (or grub-efi-ia32 on a 32-bit x86 machine) installed. You may need to manually mount the EFI partition user /boot manually, I can't recall exactly. Commented Mar 7, 2018 at 5:34
  • grub-install with appropriate options did it Commented Mar 7, 2018 at 19:51
  • Could be just grub-install in a chroot with /dev, /proc and maybe /sys (bind)mounted. Commented Mar 11, 2018 at 10:35
2

After having read https://wiki.archlinux.org/index.php/GRUB#UEFI_systems and man grub-install I did sudo grub-install --efi-directory $MY_ESP_MOUNTPOINT --target=x86_64-efi and now I have a "debian" boot target listed and working.

0

I'd suggest the command

sudo grub-install --efi-directory $MY_ESP_MOUNTPOINT --force-extra-removable --recheck

With --force-extra-removable Debian will (as Redhat does) create the BOOT directory in the EFI directory just along with the Debian directory. Most BIOS (like HP BIOS for example and I feel recent Dell BIOS) use this BOOT directory to find the file BOOTX64.EFI and automatically create the Boot entry making the UEFI boot automatically.

The --target option is not mandatory as you Debian will automatically set the right value if you run the grub-install from the same binary type as the system you want to boot

--recheck is here just to recreate the UEFI table and clear old boot entries no longer relevant as you could do with -B option in efibootmgr.

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.