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!!! This was very helpful