Dual Boot with Windows

You can install Fedora alongside Windows by shrinking the Windows partition and letting the Fedora installer handle bootloader setup with GRUB.

Dual Boot with Windows

You shrink the C: drive, boot the Fedora USB, and click through the installer. The install finishes. You reboot. GRUB asks you to choose. You pick Fedora. It works. You pick Windows. It works. You reboot into Windows, run an update, and come back to find the GRUB menu is gone. Windows boots straight to the desktop. Or you notice the clock in Fedora is wrong by six hours. This guide covers the preparation, the install, the time sync, and the recovery when Windows decides to overwrite your bootloader.

What is actually happening

Dual booting is partition management and bootloader configuration. Your disk is a building. Windows occupies the first floor. Fedora occupies the second floor. The EFI System Partition is the lobby. GRUB is the concierge in the lobby who points you to the right elevator.

When you install Fedora, Anaconda writes GRUB to the EFI System Partition and registers it with the firmware. Anaconda also adds an entry for Windows Boot Manager so GRUB can chain-load Windows. Windows updates sometimes replace the concierge with a new one that only knows about Windows. The firmware boot order changes. GRUB disappears from the menu. The data is still there. The concierge just needs to be put back.

Windows stores the hardware clock in local time. Linux stores the hardware clock in UTC. The hardware clock has no timezone. It only counts ticks. When you boot Windows, it reads the ticks and applies the local timezone. When you boot Linux, it reads the ticks and applies UTC. The mismatch causes the clock to jump every time you switch operating systems.

Preparation and partitioning

Back up your Windows data. Partition resizing carries risk. If power fails or the tool misbehaves, files vanish. Run a backup before touching disk geometry.

Disable Fast Startup. Windows Fast Startup writes the kernel state to disk and hibernates the filesystem. Linux sees a hibernated NTFS partition and refuses to mount it read-write to prevent corruption. You will get mount errors or silent data loss. Run this command in an elevated Command Prompt or PowerShell in Windows to disable hibernation completely.

# Disable hibernation to turn off Fast Startup and release the lock on NTFS
# This prevents NTFS corruption when mounting Windows partitions in Fedora
powercfg /h off

Secure Boot is supported by Fedora out of the box. Leave it enabled. Fedora signs its kernel and bootloader. You only need to disable Secure Boot if you install unsigned kernel modules or proprietary drivers that do not provide signed packages.

Shrink the Windows partition from within Windows. Open Disk Management. Right-click the C: drive and select Shrink Volume. Allocate at least 40 GB for Fedora. Leave the space unallocated. Do not format it. Fedora will format the space during installation.

Shrink from Windows. Never shrink a partition from the OS that lives on it.

Installation and partitioning choices

Create a bootable Fedora USB using Fedora Media Writer or dd. Boot from the USB. Select Install to Hard Drive from the live desktop. When you reach the Installation Destination screen, Anaconda detects the free space.

Use Automatic partitioning when you want Anaconda to handle Btrfs subvolumes and EFI setup correctly. Use Custom partitioning when you need to define specific mount points, use LVM, or preserve existing Linux installations. Use the Replace Existing System option only when you are wiping a drive that contains no data you need.

Automatic partitioning creates a Btrfs root filesystem with subvolumes for / and /home. Btrfs provides snapshots and compression. Anaconda writes GRUB to the EFI System Partition. GRUB automatically detects Windows Boot Manager. You will see a menu at startup to choose between Fedora and Windows.

Trust Anaconda's default layout. Btrfs snapshots save you when manual partitioning goes wrong.

Time synchronization

The hardware clock mismatch causes time drift. Fix it by telling systemd to read the hardware clock as local time. This aligns Fedora with Windows behavior.

# Set systemd to read the hardware clock as local time
# This matches Windows and prevents the clock from jumping after reboot
sudo timedatectl set-local-rtc 1

Verify the setting. The output should show RTC in local TZ: yes.

# Check the current time and RTC configuration
# The RTC line confirms whether systemd treats the hardware clock as local or UTC
timedatectl status

Check the time in both OSes. If the clock jumps, the RTC setting is the culprit.

Restoring GRUB after Windows updates

Windows updates can overwrite the EFI boot entry. The GRUB menu vanishes. Windows boots directly. Boot from the Fedora live USB. Open a terminal. Find your Fedora root partition.

# List block devices and filesystems to identify the Fedora root partition
# Look for the partition with the fedora label or btrfs filesystem
lsblk -f

Mount the root partition. Mount the boot and EFI partitions. Bind the system directories. Enter the chroot environment.

# Mount the root filesystem of the installed Fedora
# Replace /dev/nvme0n1p3 with your actual root partition from lsblk
sudo mount /dev/nvme0n1p3 /mnt
# Mount the EFI partition so chroot can access the bootloader directory
# Replace /dev/nvme0n1p1 with your actual EFI partition
sudo mount /dev/nvme0n1p1 /mnt/boot/efi
# Mount the boot partition if it is separate from root
# Replace /dev/nvme0n1p2 with your actual boot partition if applicable
sudo mount /dev/nvme0n1p2 /mnt/boot
# Bind device, proc, and sys to provide kernel access inside chroot
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
# Enter the installed system environment
sudo chroot /mnt

Reinstall GRUB and regenerate the configuration.

# Reinstall GRUB to the EFI partition
# This restores the boot entry and firmware registration that Windows may have overwritten
grub2-install --target=x86_64-efi --efi-directory=/boot/efi
# Regenerate the configuration file with OS detection
# This scans disks and rebuilds the menu entries for Fedora and Windows
grub2-mkconfig -o /boot/grub2/grub.cfg
# Leave the chroot environment
exit
# Unmount all filesystems in reverse order
sudo umount -R /mnt

Reboot immediately. If GRUB is back, the recovery worked.

Common pitfalls and error messages

BitLocker may encrypt the drive during the shrink process. Windows 11 often enables BitLocker automatically. If you see a prompt to back up your recovery key, do it. You will need the key if the drive encrypts unexpectedly.

You may see NTFS is hibernated when trying to mount a Windows partition in Fedora. Fast Startup is enabled. Disable it in Windows. You can force mount with ntfs-3g -o remove_hiberfile, but that risks data loss. Disable Fast Startup instead.

GRUB may drop you to grub rescue> with error: unknown filesystem. The EFI partition is corrupted or the boot entry is missing. Use the recovery procedure above. The grub2-install command fixes the binary and firmware entry. The grub2-mkconfig command fixes the menu.

Secure Boot may block third-party drivers. If you install proprietary GPU drivers, you may need to sign the kernel modules or disable Secure Boot. Fedora's akmods packages provide signed modules for common hardware. Use dnf install for drivers when possible. Manual compilation requires module signing.

GRUB reads /boot/grub2/grub.cfg. This file is generated. Never edit it directly. Changes vanish on the next kernel update. Edit /etc/default/grub instead. Run grub2-mkconfig to apply changes. Config files in /etc/ are user-modified. Files in /usr/lib/ ship with the package. Edit /etc/. Never edit /usr/lib/.

Run journalctl -xe after recovery. Read the actual error before guessing. The x flag adds explanatory text and the e flag jumps to the end. Most sysadmins type journalctl -xeu <unit> muscle-memory style.

When to use dual boot versus alternatives

Use dual boot when you need native hardware access for gaming, GPU compute, or specific drivers that do not work in virtualization. Use a virtual machine when you want to test Fedora without touching disk partitions or rebooting. Use WSL when you only need Linux command-line tools inside Windows and do not need a desktop environment. Use Fedora Silverblue when you want an immutable base that protects against accidental bootloader or system file changes.

Where to go next