You installed Fedora and Windows won't boot
You shrank your Windows partition, installed Fedora on the free space, and rebooted. The GRUB menu appeared. You selected Fedora, and it booted fine. You rebooted again to check Windows, and the screen stayed black. Or you see a message about a file system check required, and Windows refuses to start. The culprit is almost always Windows Fast Startup. This feature leaves the NTFS partition in a hibernated state. Fedora detects the lock, refuses to mount the drive to prevent data corruption, and the boot process stalls.
Disable Fast Startup before you shrink the partition. Windows will refuse to shrink if the file system is locked.
What is actually happening
Modern computers use UEFI firmware instead of legacy BIOS. The firmware looks for an EFI System Partition (ESP). This is a small FAT32 partition that holds bootloader files for all operating systems. Windows creates this partition during installation and drops its bootloader there. When you install Fedora, the installer detects the existing ESP and adds the GRUB bootloader to it. GRUB becomes the first program that runs. It presents a menu. When you pick Windows, GRUB hands control back to the Windows bootloader.
Think of the ESP as a shared lobby. Windows owns the front desk. Fedora installs a new directory stand in the same lobby. GRUB is the directory stand. If Windows locks the lobby doors, Fedora can't get in, and the directory stand can't point you to the right room.
Windows Fast Startup is not a normal shutdown. It is a hybrid hibernate. Windows writes the kernel state to disk and locks the file system. Linux treats this as a dirty file system. Mounting a dirty NTFS partition risks corruption. Fedora's default behavior is to refuse mounting. The kernel logs a warning, and the system may drop to an emergency shell or hang.
Secure Boot adds another layer. UEFI firmware checks the digital signature of every bootloader. Windows requires Secure Boot. Fedora supports it. The chain of trust goes from the firmware to shimx64.efi, then to grubx64.efi, then to the kernel. Fedora's shim is signed by Microsoft. This allows Fedora to boot on Secure Boot systems without disabling the feature. If you disable Secure Boot to install Fedora, you break the Windows boot chain on some hardware. Keep Secure Boot enabled.
Fedora disables os-prober by default. This tool scans other partitions for operating systems. The default configuration prevents GRUB from detecting Windows automatically. This is a security measure. A vulnerability in os-prober allowed arbitrary code execution during boot. Fedora prioritizes security over convenience. You must re-enable os-prober manually if you want Windows to appear in the GRUB menu.
Run journalctl -xe if the boot fails. Read the actual error before guessing.
Prepare the system
Disable Fast Startup in Windows. Open Control Panel. Navigate to Power Options. Click Choose what the power buttons do. Click Change settings that are currently unavailable. Uncheck Turn on fast startup. Save changes. This ensures the NTFS partition is fully unmounted on shutdown.
Shrink the Windows partition. Right-click the Start button. Select Disk Management. Right-click your C: drive. Choose Shrink Volume. Enter the desired size in MB. Create unallocated space. Allocate at least 40 GB for Fedora. 60 GB is recommended if you plan to run development tools or store large files. Fedora uses Btrfs by default. The filesystem compresses data and creates snapshots. You need extra space for snapshots.
Create a Fedora bootable USB. Use Fedora Media Writer on Windows or macOS. Or use dd on another Linux system. Verify the checksum after writing. A corrupted ISO leads to installation failures.
Insert the USB. Restart the computer. Enter the UEFI boot menu. The key is usually F12, F2, or Del. Select the USB drive. If Secure Boot is enabled, select the entry that mentions Secure Boot.
Install Fedora
Select Install to Hard Drive in the Anaconda installer. The installer detects the existing Windows installation. It offers to install Fedora alongside Windows. This option creates a single partition for Fedora. It is simple but limits flexibility. Choose Custom for storage configuration if you want control over mount points and filesystem layout.
Select the unallocated space. Create a mount point for /. Fedora defaults to Btrfs. The installer creates subvolumes automatically. You do not need to configure subvolumes manually. The installer handles @ and @home subvolumes. Select the existing EFI System Partition. Mount it at /boot/efi. Do not format this partition. Formatting destroys the Windows bootloader.
Here's how to verify the EFI System Partition is mounted correctly after installation.
sudo mount | grep efi
# WHY: Confirms the EFI System Partition is mounted at /boot/efi.
# WHY: If this is missing, GRUB cannot update its configuration on boot.
Complete the installation. Remove the USB when prompted. Reboot. The GRUB menu should appear. If Windows does not appear in the menu, os-prober is disabled. You need to re-enable it.
Edit the GRUB configuration file. Add the line to re-enable scanning.
# /etc/default/grub
GRUB_DISABLE_OS_PROBER=false
# WHY: Re-enables scanning of other partitions for operating systems.
# WHY: Fedora disables this by default to reduce boot time and security risk.
Regenerate the GRUB configuration. This writes the changes to the boot loader.
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
# WHY: Regenerates the GRUB configuration file based on current system state.
# WHY: Run this after enabling os-prober to detect Windows.
Reboot. Windows should now appear in the GRUB menu.
Reboot before you debug. Half the time the symptom is gone.
Verify the setup
Check the UEFI boot order. The firmware maintains a list of boot entries. Verify that both Windows and Fedora are registered.
sudo efibootmgr
# WHY: Displays the UEFI boot order and registered boot entries.
# WHY: Verify that Windows Boot Manager and Fedora both appear in the list.
Look for Windows Boot Manager and Fedora in the output. The BootOrder line shows the priority. If Fedora is not first, the system will boot Windows by default. This is fine. You can still select Fedora from the GRUB menu. If you want Fedora to boot first, change the boot order in the UEFI firmware setup. Or use efibootmgr to reorder entries.
Check the partition layout. Ensure the ESP is mounted and has enough free space.
lsblk -f
# WHY: Lists block devices and their filesystem types.
# WHY: Look for vfat on the ESP and ntfs on the Windows partition.
The ESP should have a small size, typically 100 to 500 MB. It should be mounted at /boot/efi. The Windows partition should be NTFS. The Fedora partition should be Btrfs.
Boot into Windows. Verify that files are intact. Boot into Fedora. Verify that the network works and packages install correctly. Run a full update to ensure the kernel and bootloader are current.
sudo dnf upgrade --refresh
# WHY: Updates all packages and refreshes metadata from the repositories.
# WHY: Run this weekly to keep the system secure and stable.
Trust the package manager. Manual file edits drift, snapshots stay.
Common pitfalls
You see error: file '/boot/efi/EFI/fedora/grubx64.efi' not found in GRUB. The ESP path changed or the file was deleted. This happens if you resize the ESP or format it by mistake. Restore the file from a backup or reinstall GRUB. Boot from a Fedora live USB. Mount the root partition and the ESP. Chroot into the system. Run grub2-install and grub2-mkconfig.
error: file '/boot/efi/EFI/fedora/grubx64.efi' not found.
pressing any key will exit immediate mode.
Windows shows "Automatic Repair" loop. The boot order in UEFI shifted. Or Fast Startup is still enabled. Enter the UEFI firmware setup. Check the boot order. Ensure Windows Boot Manager is present. Disable Fast Startup again. Run chkdsk /f from the Windows recovery environment. This fixes file system errors caused by improper shutdowns.
You get stuck at the initramfs prompt. The root filesystem is not found. This usually means the UUID in the kernel command line is wrong. Or the Btrfs subvolume mount failed. Check the kernel parameters. Verify the UUID matches the actual partition. Use blkid to list UUIDs.
blkid
# WHY: Lists UUIDs and filesystem types for all block devices.
# WHY: Compare the output with the root= parameter in GRUB configuration.
SELinux denies access to the Windows partition. Fedora mounts NTFS partitions with ro (read-only) by default. This is safe. If you need write access, use ntfs-3g. Install the package. Mount the partition manually. SELinux will allow access. Do not disable SELinux. It protects the system from exploits.
sudo dnf install ntfs-3g
# WHY: Installs the NTFS driver with read-write support.
# WHY: Required for writing to NTFS partitions from Linux.
Snapshot the system before the upgrade. Future-you will thank you.
When to use this setup
Use Fedora Workstation when you need full control over the file system and kernel modules for hardware drivers. Use Fedora Silverblue when you want an immutable base that protects the OS from accidental breakage during dual boot experiments. Use WSL2 when you only need Linux command-line tools and don't require a native desktop environment. Stay on a single OS when your hardware resources are limited and virtualization overhead is unacceptable.