How to recreate EFI boot partition?
Solution 1
I did it !
First of all, I removed all the unnecessary boot entries by:
efibootmgr -b <entry_hex_number> -B
Then, Reformatting the ESP partition with FAT32
filesystem.
mkfs.vfat -F32 /dev/sda1
Then installed grub to /dev/sda
NOT /dev/sda1
grub-install /dev/sda
Solution 2
I don't know why you're using grub in the first place. UEFI acts as a boot loader and it allows to select different operating systems or individual kernels from a boot menu. Although there are some exceptions, it usually is not required to chain a second boot loader, grub in this case.
You mention, you installed elementary OS instead of Fedora, which means you only need to load one operating system. Here I present a way to do it without using grub. The kernel needs to be compiled with EFI_STUB, if that's the case you can check with
grep EFI_STUB /boot/config-<version>
Copy the kernel and initramfs to the ESP (EFI system partition)
cp /boot/vmlinuz-<version> /boot/efi/EFI/elementary/vmlinuz-<version>.efi
cp /boot/initrd.img-<version> /boot/efi/EFI/elementary/initrd.img-<version>
Register kernel as boot option in UEFI
echo "root=UUID=<disk_uuid> ro quiet rootfstype=ext4 add_efi_memmap initrd=\\EFI\\elementary\\initrd.img-<version>" |
iconv -f ascii -t ucs2 |
efibootmgr \
--create --gpt \
--disk /dev/<disk> --part <partition_number> \
--label "Elementary OS" \
--loader "\\EFI\\elementary\\vmlinuz-<version>.efi" \
--write-signature --append-binary-args -
The --disk
argument takes the device name of the disk, e.g.
--disk /dev/sda
, the --part
argument takes the partition number
of the ESP, e.g. 4. You can find the ESP partition number with the
following command:
gdisk -l /dev/sda | awk '$6=="EF00" {print $1}'
Ensure that you repeat the steps after each kernel update
Either you this manually (just repeat the steps above) or you write a small script which does the job. To fully automatise it, the script could be hooked into the kernel post-install procedure, into the initramfs post-update procedure and into the kernel postrm procedure (to remove the UEFI boot entry). Actually, I don't know why this isn't done by default in the distributions, it's just a few lines of code.
Related videos on Youtube
Comments
-
Rafael Adel almost 2 years
I've installed Fedora on my machine with
/
partition,swap
partition andESP
partition for EFI booting.Now, I was installing Elementary OS instead of Fedora.
- I have formatted the
/
partition (/dev/sda3) - Formatted the swap partition (/dev/sda4)
- But did not format the EFI boot partition (/dev/sda1)
Now when i boot, i get my old grub menu that's was installed by Fedora. I can only boot into Elementary OS by:
- Entering the boot menu.
- Selecting boot from EFI file
- Navigate through
/dev/sda1/
, to get theelementary
directory that containsgrubx64.efi
file. Which is/boot/efi/EFI/elementary/grubx64.efi
.
How can i fix that ? I thought of formatting the boot partition
/dev/sda1/
withfat16
or something then re-installing grub on it.My
/dev/sda1
now contains this :root@rafael:/home/rafael# ls /boot/efi/ EFI mach_kernel System root@rafael:/home/rafael# ls /boot/efi/EFI/ BOOT/ elementary/ fedora/ root@rafael:/home/rafael# ls /boot/efi/EFI/fedora/ BOOT.CSV fonts gcdx64.efi grub.cfg grubx64.efi MokManager.efi shim.efi shim-fedora.efi root@rafael:/home/rafael# ls /boot/efi/EFI/elementary/ grubx64.efi
Here's my
efibootmgr
output :BootCurrent: 003D Timeout: 0 seconds BootOrder: 2001,2002,2003 Boot0000* Notebook Hard Drive Boot0010* Internal CD/DVD ROM Drive Boot0011* Internal CD/DVD ROM Drive (UEFI) Boot0012* Fedora Boot0013* Fedora Boot0014* Fedora Boot0015* Fedora Boot0016* Fedora Boot0017* Fedora Boot0018* Fedora Boot0019* Fedora Boot001A* Fedora Boot001B* Fedora Boot001C* Fedora Boot001D* Fedora Boot001E* Fedora Boot001F* elementary Boot2001* USB Drive (UEFI) Boot2002* Internal CD/DVD ROM Drive (UEFI)
Any help would be appreciated.
-
Admin almost 11 yearsI can only suggest this set of articles, never used EFI myself: rodsbooks.com/efi-bootloaders/index.html, rodsbooks.com/efi-bootloaders/index.html, rodsbooks.com/gdisk/whatsgpt.html.
-
Admin almost 11 yearsDoes your UEFI implementation have any kind of boot selection menu like F8 or so? Please post
efibootmgr
output so it could be seen whether elementary's entry is there (seems it's not but to be sure). You might also like refind as your boot manager. Just in case you'd like a quick peek at E17 on that system there's an image that just works (490M ISO link) as well as weekly snapshots. It is probably inferior regarding E polis -
Admin almost 11 years@MichaelShigorin Ok, I've added
efibootmgr
output.
- I have formatted the
-
Rafael Adel almost 11 yearsHmmm, I did
grep EFI_STUB /boot/config-3.2.0-49-generic
but got nothing. -
Marco almost 11 yearskernel 3.2 is too old (it's from January 2012) to support EFI_STUB. You need at least kernel 3.3.
-
Marco almost 11 years@RafaelAdel If you don't want to build your own kernel you can check for a newer kernel version in the software repositories. Elementary seems to be based on Ubuntu and a kernel 3.5 or 3.8 should be available. The newer ones are more likely to have EFI_STUB enabled.
-
Rafael Adel almost 11 yearsActually there's kernel 3.10.1 now. Gonna give it a try.
-
Michael Shigorin almost 11 yearsMarco, advising stub use is irresponsible unless you're eager to guide each user through what's unsupported by his distribution and not pass it down like "do after each kernel upgrade". It's fine to have but not so fine to automate, I'm telling you this as a guy who's responsible for UEFI support in ALT Linux.
-
Marco almost 11 years@MichaelShigorin It's easy to hook it into
/etc/kernel/postinst.d
,/etc/kernel/postrm.d
and/etc/initramfs/post-update.d/
. The only thing the scripts need to do is copy/remove two files (kernel and initramfs) from/boot
to the ESP and callefibootmgr
. -
Michael Shigorin almost 11 yearsSo go ahead and implement it in debian at least. BTW my answer is not a comment since it actually suggests refind (which tends to be an answer with crippled/missing boot menu in firmware or just broken/incomplete configuration). Unfortunately short boot chains is not what UEFI is about in practice, especially with RestrictedBoot :-/
-
Lingzhu Xiang almost 11 years@MichaelShigorin I've been using Debian kernel with EFISTUB for a year and it's fine. Shorter boot chain is the point, because it gets rid of the bloated grub. I don't see how Secure Boot has anything to do here.
-
Michael Shigorin almost 11 yearsgrub-install has learned to grok EFI (you can force it to with --target=x86_64-efi but efivars.ko must be loaded by that time anyways).