Skip to content

Instantly share code, notes, and snippets.

@cjyar
Last active May 2, 2024 06:55
Show Gist options
  • Star 27 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save cjyar/cd5ea76a8692516767672ffc2883df92 to your computer and use it in GitHub Desktop.
Save cjyar/cd5ea76a8692516767672ffc2883df92 to your computer and use it in GitHub Desktop.
Convert a disk from MBR to GPT+UEFI, in Linux.

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!

  1. Use gdisk to convert the partition table to GPT.

    gdisk /dev/sda

  2. 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. Use L or l to look up the code for "BIOS boot" (ef02).

  3. Write the new partition table.

    w

  4. Reload the partition table.

    partprobe /dev/sda

  5. 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.


  6. 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 use n to create the partition.

  7. 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.

  8. Write the partition table.

    w

  9. Reload the partition table.

    partprobe /dev/sda

  10. Build the filesystem for the ESP.

    mkfs -t vfat -v /dev/disk/by-partlabel/EFI-system

  11. Create the ESP mount point.

    mkdir /boot/efi

  12. Add the ESP to /etc/fstab. It should look like this:

    /dev/disk/by-partlabel/EFI-system /boot/efi vfat defaults 0 2

  13. Mount the ESP.

    mount /boot/efi

  14. Install the GRUB EFI package.

    apt install grub-efi

  15. Install the GRUB EFI bootloader onto the disk.

    grub-install --target=x86_64-efi /dev/sda

  16. Reboot.

  17. Change the BIOS from BIOS boot to UEFI boot.

  18. Use the one-time boot menu to force boot the disk. You may have to navigate to the disk -> EFI -> ubuntu -> grubx64.efi.

  19. Re-install GRUB's EFI bootloader to update the UEFI boot selector.

    grub-install

Resources:

@cjyar
Copy link
Author

cjyar commented May 19, 2023

@DavidPerezIngeniero The goal is to keep all data, just rewriting the partition table. But do make backups before you begin!

@umatz
Copy link

umatz commented Jan 14, 2024

Thank you very much, worked perfectly for my Ubuntu 22.04 installation.

@Halbheld
Copy link

Worked without problems on Linux Mint 21.3 x86_64 in January 2024. No one-time boot menu for me.

@PeeBeerBeach
Copy link

Thank you! This helped me a lot.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment