Blog

Convert a legacy Windows install to UEFI and add it to GRUB

How to convert a legacy MBR Windows 11 install to GPT/UEFI with mbr2gpt and add it to the GRUB menu alongside Linux.

The problem

A legacy/MBR Windows install won’t show up as a boot option when the BIOS is in pure UEFI mode, and UEFI GRUB can’t chainload it either. So you end up flipping CSM on and off in the BIOS every time you want to switch operating systems.

Converting the Windows disk to GPT fixes both ends of that: Windows becomes a proper UEFI boot entry, and GRUB can finally see it.

1. Boot Windows via CSM

Enable CSM (Compatibility Support Module) in the BIOS. The Windows disk reappears as a boot device — shown as the disk name, not “Windows Boot Manager”. Boot into Windows.

2. Validate the disk for conversion

From an admin Command Prompt:

mbr2gpt /validate /disk:0 /allowFullOS

Check the disk number with diskpartlist disk first. Without /disk: the tool defaults to disk 0, which may not be the one you want.

3. If validation fails: “Cannot find OS partitions”

This means the boot files on the System Reserved partition (the small ~100 MB one) need rebuilding. Give that partition a drive letter:

diskpart
select disk 0
select partition 1
assign letter=S
exit

Then rebuild the boot files:

bcdboot C:\Windows /s S: /f BIOS

Run the validate command again — it should now pass:

MBR2GPT: Validation completed successfully

4. Convert

mbr2gpt /convert /disk:0 /allowFullOS

It takes under a minute. The tool creates an EFI System Partition and installs the UEFI boot files into it.

5. Switch the BIOS back to UEFI

  1. Disable CSM
  2. Secure Boot: set OS Type = Other OS (on ASUS boards this means Secure Boot off; “Windows UEFI mode” means enforced)
  3. Windows Boot Manager now appears as a UEFI boot entry — boot it once to confirm Windows still works

6. Add Windows to GRUB

Boot into Linux:

sudo os-prober
sudo update-grub

If update-grub warns that os-prober will not be executed — the default on Ubuntu-based distros — enable it:

echo 'GRUB_DISABLE_OS_PROBER=false' | sudo tee -a /etc/default/grub
sudo update-grub

Look for a line like:

Found Windows Boot Manager on /dev/nvme0n1p3@/efi/Microsoft/Boot/bootmgfw.efi

Finally, set the Linux/GRUB entry first in the BIOS boot order. Every boot now lands in GRUB with both Linux and Windows Boot Manager as options — no more BIOS trips.

Caveats

Tested with Windows 11 and elementary OS 8 on separate NVMe drives. mbr2gpt requires Windows 10 1703 or newer, a maximum of three primary partitions, and no extended partitions. Back up before converting.