How can I reinstall GRUB to the EFI partition?
I want to reinstall GRUB 2 and I found these instructions: How to Repair, Restore, or Reinstall Grub 2 with a Ubuntu Live CD or USB. In my case, the boot loader is installed in the EFI partition. If I use the commands provided in this guide, will GRUB be reinstalled to the EFI partition automatically, or will it be installed into the root partition where Ubuntu is installed ? Obviously, I do not want this to happen.
The instructions in the provided link are valid for reinstalling GRUB in legacy BIOS mode only, this will not work in your case. To reinstall GRUB to an Ubuntu installation in EFI BIOS mode, please read my answer. 🙂
Thank you very much! 🙂 I have some questions: when I installed Ubuntu in my UEFI system, I found two entries in the bios. Is there a way to have a unic ubuntu entry? In case of MBR partition table (so no EFI or any other boot partition), can I use the same commands except for: sudo mount /dev/sd** /mnt/boot/efi ?
You can try to remove the second Ubuntu entry with : sudo efibootmgr (lists all entries) | sudo efi bootmgr -b
Perfect 🙂 Anyway, having a UEFI system and so a EFI partition, is there a way to avoid getting grub overriden when I perform a new Windows installation?
Well, Microsoft doesn’t take care for anything else but their own products, so you can install Linux systems without doing any harm to Windows — unfortunately this isn’t the case the other way around — so when you install Windows after you have installed Ubuntu, you have to restore the GRUB boot loader afterwards. 🙂
13 Answers 13
Reinstall the GRUB boot loader to your Ubuntu installation in EFI mode this way .
Boot from the Ubuntu installation medium and select ‘Try Ubuntu without installing’.
(Boot your install medium in EFI mode, select the Ubuntu entry with UEFI in front.)
Once you are on the Live desktop, open a terminal and execute these commands :
sudo mount /dev/sdXY /mnt sudo mount /dev/sdXX /mnt/boot/efi for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done sudo chroot /mnt grub-install /dev/sdX update-grub exit
Note: If the grub-install command reports an error, it cannot find efivars. Try the following while still in the chroot environment (Thanks to @michael_dunn — the step was necessary in Ubuntu 22.10) :
mount -t efivarfs none /sys/firmware/efi/efivars
Afterwards execute the grub-install command again : grub-install /dev/sdX
To avoid possible unexpected issues, properly unmount the file systems afterwards.
sudo umount /dev/sdXX sudo umount /dev/sdXY
Note : sdX = disk | sdXX = efi partition | sdXY = system partition
To identify the partitions use GParted, the tool is included in the installation medium.
After having run the commands, GRUB will be installed in the separate EFI partition.
@MarkYisri : Thank you very much ! 🙂 Because it is the safest way to reinstall the GRUB boot loader without corrupting things and in case the system does not boot properly . the only way to do it ! 🙂
The important point is to boot the installation media in the correct boot-mode, if we want to reinstall grub-efi we have to boot in UEFI-mode, if we wanty to reinstall grub-pc we have to boot in legacy-mode.
This worked for me except with one alteration: I did grub-install /dev/sdXX , i.e. not the disk but the EFI partition was used for installing grub and it worked.
this is the only way that worked for me: (System: sdb8, boot: sdb6, efi: sdb2)
sudo mount /dev/sdb8 /mnt sudo mount /dev/sdb6 /mnt/boot sudo mount /dev/sdb2 /mnt/boot/efi sudo mount --bind /dev /mnt/dev && sudo mount --bind /dev/pts /mnt/dev/pts && sudo mount --bind /proc /mnt/proc && sudo mount --bind /sys /mnt/sys sudo chroot /mnt grub-install --target=x86_64-efi /dev/sdb grub-install --recheck /dev/sdb exit && sudo umount /mnt/sys && sudo umount /mnt/proc && sudo umount /mnt/dev/pts && sudo umount /mnt/dev && sudo umount /mnt
If I call the boot-entry anything different the the default, e.g. —bootloader-id=Ubuntu_02 the boot fails. It just boot in the grub console. any solution?
This is how I did it on a standard x86_amd64 EFI desktop, without chrooting, assuming you have a partition containing Ubuntu on your hard drive and possibly an EFI partition where GRUB should be installed.
# boot on a live Ubuntu, I used 18.04 but more recent should work # if you have currently no EFI partition (maybe it was deleted, # or you are migrating to a new drive): # sudo gparted # - create a FAT 32 partition of around 100 MB on the disk of your choice # (in general the one that host the Ubuntu partition). If you plan to # move or resize some paritions, anticipate that (for instance by # creating the EFI partition at the end of the free space). # - set the flag esp on this partition (the flag boot will also be selected) # now assuming that the Ubuntu partition is `/dev/sda2` and the (possibly new) EFI partition is `/dev/sda1` sudo apt install grub-efi sudo mkdir /media/root && sudo mount /dev/sda2 /media/root sudo mkdir /media/efi && sudo mount /dev/sda1 /media/efi sudo grub-install --target=x86_64-efi /dev/sda --efi-directory=/media/efi --boot-directory=/media/root/boot
Installing for x86_64-efi platform.
Installation finished. No error reported.
Then reboot and you should be done. You may have to tell your BIOS which drive to use, or which EFI partition to use, or which EFI binary to use.
If you created a new EFI partition, you may have to add it to /etc/fstab to have update-grub working correctly.