Dual Boot Arch and Windows
Walk through my journey in shifting to Arch Linux and cooking some rice - starting with dual booting Arch and Windows.
The Existential Crisis of Choice
Got bored of Windows? Time to create my own customized OS environment.
Setting this up can feel like a bit of an existential crisis if you aren’t prepared. But don’t worry—I’ve spent the last couple of days iron-ing out the kinks so you don’t have to. The installation is actually the easy part - what comes next is an absolute rabbit-hole.
To put it simply, we’re going to use the archinstall script, but with a manual partitioning “hack” to keep everything safe.
Let’s Get Cooking
This project requires a bit of preparation before we start “pushing pixels” in our new Linux environment.
Ingredients
| Requirement | Details | Reference |
|---|---|---|
| USB Drive | 8GB or higher | - |
| Free Space | ~129GB (Unallocated) | - |
| Rufus | ISO Flashing Utility | https://rufus.ie/en/ |
| Arch Linux ISO | Latest Release | https://archlinux.org/download/ |
| Patience | Highly Recommended | - |
Phase 1: Prepping the Kitchen (Windows)
Before we touch Linux, we have to make sure Windows is tucked in safely and remains unaffected.
Backup and Restore:
Create a System Restore point so you can revert if things get messy.BitLocker:
For Professional and Enterprise users, disable BitLocker.
It’s a great feature, but it’s like a locked door that Linux doesn’t have the key for.The Hibernation Trap: This is a big one.
Disable Fast Startup and Hibernation to prevent Windows from locking your drive in a “hibernated” state, which can lead to data loss or filesystem corruption when Linux tries to touch it. Run this command as admin:1powercfg /H offShrink the Drive:
Use Disk Management to shrink your main volume (if needed).
I went for about 129GB (132,096MB) of unallocated space.You will need 1 GB for an EFI partition and the rest (128GB in my case) for your Linux system.
Phase 2: Manual Partitioning (The Secret Sauce)
Flash your USB with Rufus (ensure it’s set to GPT/UEFI mode) and boot into the live environment. Once you’ve connected to the internet, it’s time for some manual labor.
Connecting to WiFi
Run the following commands (see comments to see what they do).
| |
Partitioning
Instead of letting the script guess, use cfdisk to set your own boundaries.
Here is what I configured for myself:
Windows EFI: Keep it as is (and any other Microsoft/Windows related partitions).
(New) Shared Storage: 312GB (Type: Microsoft Basic Data)
I plan to format this into a shared storage partition between both systems.
And NTFS (Microsoft Basic Data) is the most cross-compatible choice.(New) Main Linux Partition: 128GB (Type: Linux Filesystem).
(New) Arch EFI: 770MB (Type: EFI System)
GRUB should actually be quite lightweight and not need that much space - but I prefer to be future-proof in case I shift to another boot manager (likesystemd) that requires more space.
Windows Partitions
You may see Microsoft reserved, Microsoft basic data and/or Recovery partitions that are related to Windows.
Don’t touch them.
Why create another EFI?
Because I’m a coward. That’s why.
It’s one of the safest ways to avoid messing up my Windows boot files.
Format your partitions accordingly:
| |
Phase 3: The Main Course (archinstall)
When installing Arch, we want to clearly identify our Boot (EFI) partition and our main Filesystem partition. To do so, we can already mount them as such and just ask the installer to follow what we configured.
Skipping this may lead the installer to use your existing (Windows) EFI partition and risks overwriting your Windows boot files!
Use the following command to list your partition names (in case you can’t remember them from cfdisk):
| |
So, as the cowardly bunch we are, we mount:
| |
Seriously, be sure to replace the X and Y with your actual partition numbers
Run archinstall and select “Pre-mounted configuration”.
I went with a minimal profile to avoid Hyprland dependency issues during the script run.
Additional Packages
Make sure to at least include IWD or NetworkManager.
You will need internet after the installation (and also, we are in 2026 - you will need internet in general).
In my next articles, I will list out the all packages I installed.
Phase 4: Fixing the “Broken” Bootloader
The script is great, but sometimes it misses the landing on the bootloader. When it finishes, select the option to chroot.
Inside the chroot, run:
| |
You can now clean up after yourself, and reboot.
| |
And, you will most likely see your Arch Linux in GRUB - but no Windows.
That’s OK. We can fix it.
Boot into Arch, and run the following to get Windows into GRUB:
- Install
os-prober1sudo pacman -S os-prober - Edit
/etc/default/gruband appendGRUB_DISABLE_OS_PROBER=falseat the end.1nano /etc/default/grub - And update GRUB one last time.
1grub-mkconfig -o /boot/grub/grub.cfg
See? You immediately need an internet connection for installing packages.
You can always use IWD like before from the command line to connect to WiFi.
That’s a wrap ✌️
You now have a system that boots into a gorgeous Hyprland environment (albeit it’s just a black screen for us minimal installers) with a shared NTFS drive for all your cross-platform projects. It’s a bit different from my usual coding sessions, requiring some introspection into how your hardware actually talks to your software.
If you want to join the next .NET User Group or Arch discussion, reach out on LinkedIn.
Oh, and I use Arch by the way 👨💻