What happened?
After windows upgrading itself to release 1703 aka. the creator update, Grub bootloader can no longer start and says error: unknown filesystem
and dropped in to grub rescue shell. Windows boots up fine from firmware memu.
TL; DR
Manually doing hexediting just taught me another valuable lesson: @Windows has the worst upgrade handling.
— @cth451 July 28, 2017
- Prepare a USB linux live environment.
- Find the correct partition number, it might have been changed during upgrade.
- Look for
grubx64.efi
in your EFI system partition and use a hex editor to open it - Search for
/boot/grub
and notice the(,gptN)
where N is your original partition number for linux OS. - Change N to the new parition number, save the file and reboot.
Analysis
Before upgrade, my partition scheme was:
- sda1 fat32: EFI system parition
- sda2 ext4: Archlinux root filesystem
- sda4 ntfs: Windows drive C
- sda3 ext4: AOSC OS root filesystem
Partition numbers were not exactly in physical order of data, for I shrinked Archlinux to make room for Windows installation. However after upgrade, it became:
- sda1 fat32: EFI system parition
- sda2 ext4: Archlinux root filesystem
- sda3: Windows drive C
- sda4: Windows recovery environment
- sda5: AOSC OS root filesystem
So what did windows do down there? It shrinked drive C and made a little recovery partition, then re-sorted the partition numbers. However grub bootloader looks for partitions by partition number. It tried parition 3 (which was a valid linux filesystem), but it’s an ntfs now.
Okay found a hardcoded partition number in grubx64.efi… Attempting manual edit… pic.twitter.com/Cww8706Xp8
— @cth451 July 28, 2017
This partition number is hardcoded into the bootloader efi image, so we need to manually hexedit it.