Before starting, make sure you have a backup, and make sure to have a linux live boot ready to rescue your system. It's easy to mess this up!
-
Use gdisk to convert the partition table to GPT.
gdisk /dev/sda
-
Create the "BIOS boot" partition that GRUB needs.
n
to create a new partition. Needs to be about 1MB. You can probably squeeze this in from sectors 34-2047. UseL
orl
to look up the code for "BIOS boot" (ef02). -
Write the new partition table.
w
-
Reload the partition table.
partprobe /dev/sda
-
Re-install the GRUB boot loader using the new partition scheme.
grub-install /dev/sda
Optionally reboot to verify it's working. If you just need GPT and not UEFI, you can stop here.
-
Use gdisk to add an "EFI System" partition (ESP). Officially should be 100-500MB, but mine only used 130kB. Can be anywhere on the disk, so consider putting it at the end if you're using non-resizable media like a physical disk.
gdisk /dev/sda
and usen
to create the partition. -
Give the ESP a distinctive label without whitespace like
EFI-system
, because we'll reference the partition label in fstab.c
to set the label. -
Write the partition table.
w
-
Reload the partition table.
partprobe /dev/sda
-
Build the filesystem for the ESP.
mkfs -t vfat -v /dev/disk/by-partlabel/EFI-system
-
Create the ESP mount point.
mkdir /boot/efi
-
Add the ESP to
/etc/fstab
. It should look like this:/dev/disk/by-partlabel/EFI-system /boot/efi vfat defaults 0 2
-
Mount the ESP.
mount /boot/efi
-
Install the GRUB EFI package.
apt install grub-efi
-
Install the GRUB EFI bootloader onto the disk.
grub-install --target=x86_64-efi /dev/sda
-
Reboot.
-
Change the BIOS from BIOS boot to UEFI boot.
-
Use the one-time boot menu to force boot the disk. You may have to navigate to the disk ->
EFI
->ubuntu
->grubx64.efi
. -
Re-install GRUB's EFI bootloader to update the UEFI boot selector.
grub-install
Resources:
- The author of
gdisk
has a verbose description of MBR, GPT, and UEFI. - https://serverfault.com/questions/765778/clonezilla-restore-mbr-disk-to-4tb-disk-convert-to-gpt-linux-not-windows covers the first part of the process.
Thanks for these instructions.
I ran into an error at step 15 (grub-install):
That's because I was running off a Live USB system, trying to fixup the drive at /dev/sda.
The following changes worked for me:
Step 11:
Step 12: make this change to /mnt/a/etc/fstab instead of /etc/fstab.
Step 13:
Step 14: as written
Step 15:
(The "--root-directory" option is the bit to workaround the "/cow" problem.)
Step 16: as written, found Linux system correctly, booted just fine