Overview
Dual booting lets you choose between Windows and Linux at startup. This guide covers preparing your Windows system, shrinking partitions, installing Linux alongside Windows, and configuring the bootloader.
Warning: Partition modifications carry risk. Back up important data before proceeding.
What You Need
- A bootable Linux USB installer (see our USB creation guide for Windows)
- At least 25GB of free disk space for Linux
- Full system backup or important files backed up externally
Step 1: Prepare Windows
Disable Fast Startup
- Open Control Panel → Power Options → Choose what the power buttons do
- Click "Change settings that are currently unavailable"
- Uncheck "Turn on fast startup" and save
This prevents Windows from locking the disk, which can cause Linux filesystem corruption.
Disable Secure Boot (If Needed)
- Restart → Enter BIOS/UEFI (usually F2, Del, or F12)
- Find "Secure Boot" and disable it
- Note: Ubuntu 20.04+ supports Secure Boot — you may not need to disable it
Shrink Windows Partition
- Right-click Start → Disk Management
- Right-click your C: drive → "Shrink Volume"
- Enter amount to shrink (e.g., 50000 MB for 50GB)
- Click Shrink — you'll see "Unallocated" space
Step 2: Install Linux
- Insert the bootable USB and restart
- Press F12 (or your boot menu key) to select USB boot
- Choose "Try or Install" then proceed with installation
- Installation type: Select "Install alongside Windows Boot Manager"
- If not available, choose "Something else" for manual partitioning
Manual Partitioning (Advanced)
In the unallocated space, create:
- /boot/efi — 512MB, EFI System Partition (if UEFI) — reuse existing if present
- / (root) — 20GB minimum, ext4
- swap — Equal to RAM size (or half if you have 16GB+)
- /home — Remaining space, ext4
Bootloader Location
Ensure GRUB installs to the correct disk (not partition):
# For UEFI: /dev/nvme0n1p1 (the EFI partition)
# For Legacy BIOS: /dev/sda (the whole disk, no partition number)
Step 3: Post-Installation
Fix Windows Boot Entry
If Windows doesn't appear in GRUB menu:
sudo update-grub # Ubuntu/Debian
sudo grub-mkconfig -o /boot/grub/grub.cfg # Fedora/RHEL
Adjust GRUB Timeout
sudo nano /etc/default/grub
# Change:
GRUB_TIMEOUT=10 # Seconds to show menu
GRUB_DEFAULT=0 # 0 = first entry, 1 = second, etc.
# Apply changes:
sudo update-grub
Share Files Between Windows and Linux
Mount the NTFS partition:
# Find the Windows partition
sudo fdisk -l
# Create mount point and mount
sudo mkdir /mnt/windows
sudo ntfs-3g /dev/nvme0n1p3 /mnt/windows
# For automatic mounting, add to /etc/fstab:
/dev/nvme0n1p3 /mnt/windows ntfs-3g defaults,windows_names,locale=en_US.UTF8 0 0
Synchronize Clock
Linux and Windows handle hardware clock differently. Set Linux to use local time:
timedatectl set-local-rtc 1 --adjust-system-clock
Troubleshooting
- "No bootable device" after install: Boot from USB, choose "Boot repair" or reinstall GRUB manually
- Windows time is wrong after dual booting: Apply the clock sync command above
- Can't shrink Windows partition enough: Disable hibernation:
powercfg /hibernate offin Admin CMD, then defragment - NVIDIA drivers causing black screen: Boot with nomodeset parameter in GRUB, then install proprietary drivers
Repair GRUB from Live USB
# Boot from Linux live USB
sudo mount /dev/nvme0n1pX /mnt # Replace with your root partition
sudo mount /dev/nvme0n1p1 /mnt/boot/efi # EFI partition (UEFI only)
for i in /dev /dev/pts /proc /sys /run; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt
grub-install /dev/nvme0n1 # Or /dev/sda for BIOS
update-grub
exit
sudo reboot