Dual boot Fedora 32 and Win 10 - EFI boot problem solved

Hi All

First post but have been using Fedora (~5 years) and Linux (~ 10 years) for a while.

I had built a new PC for my son and first installed Win 10 on the new NVMe drive before then moving my two older SSDs and doing a fresh install of Fedora 32 with everything except /home on the smaller SSD and /home on the larger SSD (a custom install, not using the default layout).

Setup the boot order so that the Fed 32 SSD (with efi, boot and root) took precedence and would show Fed 32 and Win 10 options, with Win 10 selected by default. This worked well for a while with my son using Win 10 for his school work (MS Teams, Office) and Fed 32 for everything else.

But something, possibly a Win 10 update, borked the Fed 32 EFI and I got the following error message on boot with no grub prompt or other way to proceed.

Unexpected return from initial read: Volume Corrupt, buffersize …
Failed to load image \EFI\FEDORA\grubx64.efi: Volume Corrupt
start_image() returned Volume Corrupt

Did some hunting on the internet but didn’t find a clear simple set of steps so am describing how this was solved.

The closest answer I found was at https://thomas-leister.de/en/repair-fedora-efi-bootloader/ but needed some changes. I was led astray by some article about grub repair but turned out this was not needed.

Step 1: Get a Fedora 32 Live USB

Step 2: Boot using the live USB and make sure you have a working internet connection.

Step 3: Examine your drives to identify the EFI/ boot and root partitions. The usual recommendation is to use fdisk.

$ sudo fdisk -l

Disk /dev/sdc: 55.92 GiB, 60022480896 bytes, 117231408 sectors
Disk model: Corsair Force 3
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x000279c8

Device Boot Start End Sectors Size Id Type
/dev/sdc1 * 2048 1026047 1024000 500M 6 FAT16
/dev/sdc2 1026048 5220351 4194304 2G 83 Linux
/dev/sdc3 5220352 21997567 16777216 8G 82 Linux swap / Solari
/dev/sdc4 21997568 117229567 95232000 45.4G 5 Extended
/dev/sdc5 21999616 116371455 94371840 45G 83 Linux

But I would recommend using Gnome Disks as well if you have it available. The fdisk output isn’t very helpful if you don’t already know what’s where.

Step 4: Create a mount point

$ sudo mkdir /mnt/root

Step 5: Optional, mount some partitions to check if you are uncertain about which is which. Remember to unmount once done.

Step 6: Mount root, boot and efi partitions (in that order). In my case:

$ sudo mount /dev/sdc5 /mnt/root
$ sudo mount /dev/sdc2 /mnt/root/boot
$ sudo mount /dev/sdc1 /mnt/root/boot/efi

Step 7: Next you want to chroot into the Fed 32 on the drive. As usual, the Arch wiki explains the chroot concept best

$ sudo chroot /mnt/root

Step 8: Check your EFI partition is correct:

# ls -al /boot/efi
total 68
drwxr-xr-x. 7 root root 16384 Jan 1 1970 .
dr-xr-xr-x. 7 root root 4096 Oct 3 00:43 …
drwxr-xr-x. 2 root root 8192 Aug 16 10:39 ‘$RECYCLE.BIN’
drwxr-xr-x. 4 root root 8192 Apr 23 2020 EFI
drwxr-xr-x. 2 root root 8192 Oct 6 09:03 FOUND.000
-rwxr-xr-x. 1 root root 34 Jan 29 2020 mach_kernel
drwxr-xr-x. 3 root root 8192 Apr 23 2020 System
drwxr-xr-x. 2 root root 8192 Aug 16 10:39 ‘System Volume Information’

Step 8: Check networking works

# ping google.com

^C
— ping statistics —
7 packets transmitted, 7 received, 0% packet loss, time 6009ms
rtt min/avg/max/mdev = 66.037/68.957/77.558/3.603 ms

Step 9: Reinstall grub2, efi and shim packages

# dnf reinstall grub2-efi grub2-pc grub2-pc-modules grub2-tools-efi grub2-tools-extra shim grub2-efi-x64

Reinstalled:
grub2-efi-ia32-1:2.04-23.fc32.x86_64
grub2-efi-x64-1:2.04-23.fc32.x86_64
grub2-pc-1:2.04-23.fc32.x86_64
grub2-pc-modules-1:2.04-23.fc32.noarch
grub2-tools-efi-1:2.04-23.fc32.x86_64
grub2-tools-extra-1:2.04-23.fc32.x86_64
shim-x64-15-8.x86_64

Complete!

Step 10: Exit the jail, unmount the partitions in the reverse order, sync

# exit
$ sudo umount /mnt/root/boot/efi
$ sudo umount /mnt/root/boot
$ sudo umount /mnt/root
$ sync

Step 10: Reboot, adjust your boot priority and you should be back to a working Fedora 32!

1 Like

Official Fedora/GRUB2 docs are here:

Hi Vladislav

I did look at those two sections of the page but they don’t really give the answer:

  • The first one is about restoring grub and the bootloader on the MBR and so misses the step of mounting the EFI partition and reinstalling EFI. And Step 7, mounting processes and devices is not needed
  • The second one is about creating an EFI partition (not needed in this case), installing the bootloader (which is needed but only after mounting and chrooting), and creating a grub config (not needed in this case). There is also a " Solving problems with UEFI bootloader" section which is of no help in the current situation.

So while useful in some ways, the official Fedora/Grub2 docs were of no real help to resolve this particular situation. As mentioned in my post the closest answer I found was at https://thomas-leister.de/en/repair-fedora-efi-bootloader/