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
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
— 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
Step 10: Exit the jail, unmount the partitions in the reverse order, sync
$ sudo umount /mnt/root/boot/efi
$ sudo umount /mnt/root/boot
$ sudo umount /mnt/root
Step 10: Reboot, adjust your boot priority and you should be back to a working Fedora 32!