Dual booting Windows 11 and Linux fails in predictable places: a BitLocker recovery prompt after the first Linux boot, a Secure Boot violation screen, or a GRUB menu that never appears because Windows overwrote the boot order. Each failure has a specific cause in the UEFI firmware, the EFI System Partition (ESP), or the shim/MOK chain. This guide covers partitioning, installation order, Secure Boot enrollment, and recovery, using Ubuntu 24.04 LTS as the reference distribution. Commands apply to Fedora, Debian, and Rocky Linux with noted differences.
Quick Takeaways
- Keep Secure Boot on. Ubuntu, Fedora, Debian, and openSUSE boot through a Microsoft-signed
shim. Disabling Secure Boot is rarely needed. - Suspend BitLocker before touching partitions. Resizing or changing boot entries can trigger the recovery key prompt.
- Install Windows first, Linux second. Linux installers detect Windows and add it to GRUB. The reverse order often wipes the Linux entry.
- Share the existing ESP. Do not create a second ESP unless the first is under 260 MB and cannot be expanded.
| Item | Recommended Setting |
|---|---|
| Firmware mode | UEFI (not CSM/Legacy) |
| Partition table | GPT |
| Windows fast startup | Disabled |
| BitLocker / Device Encryption | Suspended during setup |
| Secure Boot | Enabled (shim + MOK) |
| Minimum free space for Linux | 60 GB (120 GB+ for development use) |
Prerequisites
Complete these steps before you touch the disk.
- Back up your data. Resizing a partition is safe in most cases, but power loss mid-operation corrupts NTFS. Use File History or an external image from
wbadminor Macrium Reflect. - Save your BitLocker recovery key. Open Settings > Privacy & security > Device encryption, or run in an elevated PowerShell:
manage-bde -protectors -get C:
-protectors lists key protectors. -get prints the 48-digit recovery password. Store it off the machine.
- Create a Linux USB installer. Download the ISO, verify the SHA256 checksum, and write it with Rufus (GPT, UEFI non-CSM) or
dd:
sudo dd if=ubuntu-24.04-desktop-amd64.iso of=/dev/sdX bs=4M status=progress oflag=sync
bs=4M sets the block size. status=progress shows throughput. oflag=sync flushes writes before exit. Replace /dev/sdX with your USB device, verified with lsblk.
- Confirm UEFI mode. In PowerShell:
Confirm-SecureBootUEFI
True means UEFI with Secure Boot active. False means UEFI with Secure Boot off. An error means Legacy BIOS mode, and you must convert the disk first.
Conceptual Overview: How the Boot Chain Works
UEFI firmware does not run a bootloader from a disk sector. It reads boot entries from NVRAM, each pointing to an .efi file on the ESP.
- Windows uses \EFI\Microsoft\Boot\bootmgfw.efi.
- Ubuntu uses \EFI\ubuntu\shimx64.efi, which loads grubx64.efi, which loads the kernel.
- With Secure Boot on, firmware verifies
shimagainst Microsoft’s third-party UEFI CA in thedbdatabase.shimthen verifies GRUB and the kernel against the distro’s key or a user-enrolled Machine Owner Key (MOK).
Both operating systems share one ESP, mounted at /boot/efi in Linux. Each owns its own subfolder, so they do not conflict.
Why Secure Boot Breaks Things
| Symptom | Root Cause |
|---|---|
| “Verification failed: (0x1A) Security Violation” | Unsigned bootloader or kernel, or a revoked signature |
| NVIDIA/VirtualBox modules fail to load | Unsigned out-of-tree kernel modules rejected under lockdown |
| Blue MOK Manager screen at reboot | A pending key enrollment awaiting your confirmation |
| Linux ISO won’t boot | Distro lacks a signed shim (rare), or firmware db is outdated |
| Boot loop after BIOS update | Secure Boot keys reset to defaults, clearing the MOK state |
Step-by-Step Configuration
Step 1: Disable Fast Startup and Suspend BitLocker
Fast Startup hibernates the Windows kernel instead of shutting it down. Linux then sees NTFS flagged as dirty and mounts it read-only or refuses.
powercfg /h off
manage-bde -protectors -disable C: -RebootCount 3
/h off disables hibernation and removes hiberfil.sys. -disable suspends BitLocker protectors. -RebootCount 3 keeps them suspended for three reboots, which covers the install window. Re-enable later with manage-bde -protectors -enable C:.
Step 2: Shrink the Windows Partition
Use Windows tools, not GParted, to resize NTFS. Windows handles its own metadata correctly.
- Press Win + X, open Disk Management.
- Right-click the C: volume and choose Shrink Volume.
- Enter the amount in MB (for 80 GB, enter
81920). - Leave the result as Unallocated. Do not format it.
If Windows offers less shrinkable space than expected, immovable files block it. Disable the pagefile and System Restore temporarily, run defrag C: /X, and retry.
Step 3: Boot the Installer Under Secure Boot
Enter the firmware menu with F2, F12, Del, or Esc (vendor-dependent), or use:
shutdown /r /fw /t 0
/r reboots, /fw boots into firmware setup, /t 0 removes the delay. Leave Secure Boot enabled, select the USB UEFI entry, and boot.
Step 4: Partition Layout in the Installer
Choose Something else (Ubuntu) or Custom (Fedora, Debian) so you control placement. Select only the unallocated space.
| Mount Point | Size | Filesystem | Notes |
|---|---|---|---|
| /boot/efi | existing ESP | FAT32 | Do not format. Reuse as-is |
| / | 40-100 GB | ext4 or Btrfs | Root filesystem |
| /home | remainder | ext4 or Btrfs | Optional, separate for reinstalls |
| swap | 4-16 GB | swap | Needed for hibernation; swapfile also works |
Set the bootloader install target to the whole disk (for example /dev/nvme0n1), not a partition. Select the existing ESP as EFI System Partition and leave Format unchecked.
Step 5: Choose a Filesystem Deliberately
| Feature | ext4 | Btrfs | XFS |
|---|---|---|---|
| Stability | Very high | High (single-disk) | Very high |
| Snapshots | No | Yes (native) | No |
| Compression | No | Yes (zstd) | No |
| Resource use | Low | Moderate | Low |
| Shrinking | Yes | Yes | No |
| Default on | Ubuntu, Debian | Fedora, openSUSE | RHEL, Rocky |
Pick ext4 for simplicity and Btrfs if you want rollback with Timeshift or Snapper. Avoid XFS on a dual-boot laptop because it cannot shrink.
Step 6: Complete the MOK Enrollment (If Prompted)
If you tick Install third-party drivers (NVIDIA, Wi-Fi firmware), Ubuntu asks for a Secure Boot password. This stages a MOK enrollment. On the next reboot, the blue MOK Manager appears:
- Select Enroll MOK.
- Select Continue, then Yes.
- Enter the password you set.
- Select Reboot.
You have a limited window to complete this screen. If it times out, redo the staging:
sudo mokutil --import /var/lib/shim-signed/mok/MOK.der
--import queues the public key for enrollment. You will set a one-time password, then reboot.
Verification
After the first Linux boot, confirm the chain:
mokutil --sb-state
efibootmgr -v
lsblk -f
sudo dmesg | grep -i "secure boot"
mokutil --sb-stateshould print SecureBoot enabled.efibootmgr -vlists boot entries and their order. Look for ubuntu and Windows Boot Manager.lsblk -fconfirms filesystems and the ESP mount.dmesgshows lockdown or Secure Boot kernel messages.
Check that GRUB found Windows:
sudo os-prober
grep -i windows /boot/grub/grub.cfg
If os-prober returns nothing, Ubuntu 22.04 and later disable it by default. Fix it:
sudo nano /etc/default/grub
Add or uncomment:
GRUB_DISABLE_OS_PROBER=false
Then regenerate:
sudo update-grub
On Fedora, use sudo grub2-mkconfig -o /boot/grub2/grub.cfg. On RHEL-family systems, the UEFI path is /boot/efi/EFI/<distro>/grub.cfg.
Practical Troubleshooting & Real-World Scenarios
Scenario 1: Windows Boots Directly and GRUB Disappears
A Windows feature update reset the firmware boot order. Linux is still installed.
From Windows (elevated CMD), set GRUB as the default:
bcdedit /set {bootmgr} path \EFI\ubuntu\shimx64.efi
{bootmgr} is the firmware boot manager entry. path redirects it to Ubuntu’s shim, which then offers Windows from the GRUB menu.
Or from a Linux live USB:
sudo efibootmgr -o 0000,0001
-o sets the boot order. Replace the numbers with the entry IDs shown by efibootmgr.
Scenario 2: Reinstalling GRUB After Corruption
Boot a live USB, then mount and chroot:
sudo mount /dev/nvme0n1p5 /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
for d in dev proc sys run; do sudo mount --bind /$d /mnt/$d; done
sudo mount --bind /sys/firmware/efi/efivars /mnt/sys/firmware/efi/efivars
sudo chroot /mnt
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=ubuntu --uefi-secure-boot
update-grub
exit
Adjust device names to match lsblk. --uefi-secure-boot installs the signed shim and GRUB files. Skipping the efivars bind mount makes grub-install fail to write the NVRAM entry.
Scenario 3: BitLocker Recovery Prompt After Install
Windows detected a changed boot chain (TPM PCR 7 measurement). Enter the 48-digit key, boot Windows, then reseal:
manage-bde -protectors -disable C:
manage-bde -protectors -enable C:
This regenerates TPM protectors against the current Secure Boot state. To avoid repeats, keep Secure Boot on and avoid toggling firmware settings.
Scenario 4: “Security Violation” on a Custom Kernel or DKMS Module
Sign the module with your own key:
sudo mkdir -p /root/signing && cd /root/signing
sudo openssl req -new -x509 -newkey rsa:2048 -keyout MOK.priv -outform DER -out MOK.der -nodes -days 36500 -subj "/CN=Local Module Signing/"
sudo mokutil --import MOK.der
sudo /usr/src/linux-headers-$(uname -r)/scripts/sign-file sha256 MOK.priv MOK.der $(modinfo -n nvidia)
-nodes skips key encryption. -days 36500 gives roughly 100 years of validity. The sign-file script embeds the signature. Reboot and finish the MOK enrollment. Ubuntu’s update-secureboot-policy and DKMS can automate this for most drivers.
Scenario 5: Linux Shows the Wrong Time After Switching OS
Windows stores hardware time as local time. Linux assumes UTC. Make Linux match:
timedatectl set-local-rtc 1 --adjust-system-clock
Or make Windows use UTC (preferred), in an elevated CMD:
reg add "HKLM\SYSTEM\CurrentControlSet\Control\TimeZoneInformation" /v RealTimeIsUniversal /d 1 /t REG_DWORD /f
Scenario 6: NTFS Partition Mounts Read-Only in Linux
The partition is flagged dirty by Fast Startup or an unclean shutdown. Boot Windows, run powercfg /h off, then shut down fully with shutdown /s /t 0. In emergencies only:
sudo ntfsfix /dev/nvme0n1p3
ntfsfix clears the dirty flag but does not repair deep corruption. Run chkdsk /f C: in Windows for a real repair.
Security Hardening Notes
| Practice | Benefit |
|---|---|
| Keep Secure Boot enabled | Blocks unsigned bootloaders and rootkits |
| Set a UEFI administrator password | Prevents key database tampering |
| Encrypt Linux root with LUKS2 | Protects data at rest |
| Keep BitLocker on Windows | Separate keys, separate trust boundaries |
Update fwupd firmware |
Patches dbx revocation lists |
Run firmware updates on Linux with:
sudo fwupdmgr refresh && sudo fwupdmgr update
Apply dbx updates carefully. Older installer media can stop booting once newer revocations are applied, so keep current ISOs.
Never let Linux write to Windows’ BitLocker-encrypted volume without unlocking it first. Use dislocker or avoid the volume entirely. Store shared files on a dedicated exFAT or NTFS data partition that is not encrypted.
Uninstalling Linux Cleanly
- In Windows Disk Management, delete the Linux partitions (ext4, swap). Leave the ESP.
- Extend C: into the freed space.
- Remove the leftover boot entry:
mountvol S: /S
rmdir /S /Q S:\EFI\ubuntu
mountvol S: /D
mountvol S: /S mounts the ESP as drive S:. The rmdir removes Ubuntu’s folder. /D unmounts. Then delete the stale NVRAM entry with efibootmgr -B -b 0001 from any Linux environment, or via the firmware menu.
FAQ
Can I dual boot Windows 11 and Linux with Secure Boot enabled?
Yes. Ubuntu, Fedora, Debian, openSUSE, and RHEL-family distributions ship a Microsoft-signed shim. Keep Secure Boot on. You only need to enroll a MOK for third-party or custom-built kernel modules.
Does dual booting Linux with Windows 11 void my warranty or break TPM features?
No. Dual booting does not void a warranty on standard consumer hardware. Windows 11 keeps TPM 2.0 and Secure Boot compliance as long as Secure Boot stays enabled. BitLocker may request the recovery key once after the boot chain changes.
Should I install Windows or Linux first?
Install Windows first. Windows setup overwrites the boot order and ignores other operating systems. Linux installers detect Windows and add it to the GRUB menu automatically. If you must install Windows second, repair GRUB afterward with grub-install from a live USB.
How much disk space does Linux need in a dual boot?
Allocate at least 60 GB for a desktop with common applications. Use 120 GB or more for development, containers, or virtual machines. Add swap equal to 4-16 GB depending on RAM and hibernation needs.




