10-22-2025 Update:
I just cloned a Win 10 Legacy on MBR to a GPT disk.
I "Disk Cloned" with AOMEI Backupper Free. No, I didn't use "System Clone" - Pro only.
To my shock: I ended up with UEFI partition and GPT. How great is that?
I had to use "One Time Boot" and choose UEFI. Doubted it would work.
All I have to do is change BIOS to UEFI Boot.
I'm saving the original in case I was dreaming or it was only a demonic deception.
My 15th Win10 to 11 update on unsupported hardware. It didn't work.
The BIOS was set to Legacy and the disk was MBR.
All the AI advice was that this was my problem
I finally got it all converted and working and then it died. Wouldn't boot to BIOS.
So, I was dealing with a hardware failure issue also and didn't know it.
It may not have had anything to do with the MBR partition.
But I learned a lot about UEFI and GPT conversion along the way.
I checked my previous machines that I had updated.
I has successfully updated to Win 11 on MBR machines.
I has Win 11 on GPT booting Legacy.
Both of which the AI told me was not possible.
It's all possible but the best practice is UEFI & GPT
I challenged Copilot. He smiled and said Microsoft doesn't publicize that it works but carries risk.
I will convert to GPT before updating in the future.
If you don't care about saving the install and info just skip the cloning.
*Interesting. My own office machine Boots Legacy but is Partitioned GPT
I will just run "mbr2gpt /convert /allowFullOS" and change BIOS to UEFI Boot
Plan going forward:
Always check first.
Win + R msinfo32 look for BIOS Mode
If Win 10 is installed as Legacy BIOS it's on MBR disk
Clone the disk to another MBR disk
Remove the original and install the clone
Boot the clone
mbr2gpt /validate /allowFullOS
if passes
mbr2gpt /convert /allowFullOS
Switch BIOS to UEF
- Use bcdedit to confirm UEFI entries
bcdedit /enum firmware
- Use diskpart to confirm partitions
Cmd
diskpart
list disk
select disk 0
list partition
Now you should be able to update to Windows 11
I'm going to do it manually but here is a bat
Bat for conversion
@echo off
setlocal enabledelayedexpansion
:: === CONFIG ===
set LOGDIR=%~dp0logs
set TIMESTAMP=%DATE:/=-%_%TIME::=-%
set TIMESTAMP=%TIMESTAMP: =_%
set DISK=0
set VALIDATE_ONLY=1
set CONVERT_NOW=0
set POSTCHECK=1
:: === PREP ===
if not exist "%LOGDIR%" mkdir "%LOGDIR%"
set VALIDATE_LOG=%LOGDIR%\validate_%TIMESTAMP%.log
set CONVERT_LOG=%LOGDIR%\convert_%TIMESTAMP%.log
set POST_LOG=%LOGDIR%\postcheck_%TIMESTAMP%.log
echo === MBR2GPT Conversion Script ===
echo Disk Target: %DISK%
echo Logs will be saved to: %LOGDIR%
echo.
:: === VALIDATE ===
if "%VALIDATE_ONLY%"=="1" (
echo Running validation...
mbr2gpt /validate /disk:%DISK% /allowFullOS > "%VALIDATE_LOG%"
if %errorlevel% neq 0 (
echo Validation failed. See %VALIDATE_LOG%
goto :EOF
) else (
echo Validation passed. See %VALIDATE_LOG%
)
)
:: === CONVERT ===
if "%CONVERT_NOW%"=="1" (
echo Running conversion...
mbr2gpt /convert /disk:%DISK% /allowFullOS > "%CONVERT_LOG%"
if %errorlevel% neq 0 (
echo Conversion failed. See %CONVERT_LOG%
goto :EOF
) else (
echo Conversion succeeded. See %CONVERT_LOG%
)
)
:: === POST-CHECK ===
if "%POSTCHECK%"=="1" (
echo Running post-conversion checks...
echo === Disk Layout === > "%POST_LOG%"
diskpart /s "%~dp0diskcheck.txt" >> "%POST_LOG%"
echo === BCD Entries === >> "%POST_LOG%"
bcdedit /enum all >> "%POST_LOG%"
echo Post-check complete. See %POST_LOG%
)
echo.
echo === Done. If conversion was successful, reboot and switch BIOS to UEFI. ===
endlocal
goto :EOF
:: === diskcheck.txt ===
:: Save this in the same folder as the batch file
:: Used by diskpart to log partition layout
:: Contents:
:: select disk 0
:: list partition
:: exit
Here is a post audit bat script
@echo off
setlocal enabledelayedexpansion
:: === CONFIG ===
set LOGDIR=%~dp0audit_logs
set TIMESTAMP=%DATE:/=-%_%TIME::=-%
set TIMESTAMP=%TIMESTAMP: =_%
set DISK=0
:: === PREP ===
if not exist "%LOGDIR%" mkdir "%LOGDIR%"
set PART_LOG=%LOGDIR%\partitions_%TIMESTAMP%.log
set BCD_LOG=%LOGDIR%\bcd_%TIMESTAMP%.log
set SECURE_LOG=%LOGDIR%\secureboot_%TIMESTAMP%.log
echo === Post-Conversion Audit Script ===
echo Target Disk: %DISK%
echo Logs saved to: %LOGDIR%
echo.
:: === Partition Layout ===
echo Logging partition layout...
echo === Disk %DISK% Partition Layout === > "%PART_LOG%"
diskpart /s "%~dp0diskcheck.txt" >> "%PART_LOG%"
echo Done. See %PART_LOG%
:: === BCD Entries ===
echo Logging BCD entries...
bcdedit /enum all > "%BCD_LOG%"
echo Done. See %BCD_LOG%
:: === Secure Boot Status ===
echo Checking Secure Boot status...
powershell -command "Confirm-SecureBootUEFI" > "%SECURE_LOG%" 2>&1
echo Done. See %SECURE_LOG%
echo.
echo === Audit Complete. Review logs for EFI partition, BCD boot type, and Secure Boot status. ===
endlocal
goto :EOF
:: === diskcheck.txt ===
:: Save this in the same folder as the batch file
:: Used by diskpart to log partition layout
:: Contents:
:: select disk 0
:: list partition
:: exit