Triple boot: FreeBSD alongside Windows 11 and Arch Linux
This guide explains how to install FreeBSD 14 on a machine that already runs Windows 11 and Arch Linux, using a single boot manager — the systemd-boot installed on the Arch Linux EFI partition.
Reference setup
This procedure was developed on the following hardware and disk layout:
| Component | Detail |
|---|---|
| CPU | Intel Core Ultra 9 285K (Arrow Lake) |
| RAM | 64 GiB |
| GPU | NVIDIA RTX 5060 Ti |
| Firmware | UEFI 2.90, Secure Boot disabled |
nvme0n1 | 932 GB — Windows 11 |
nvme1n1 | 932 GB — Arch Linux (LVM) + EFI (3 GB) |
nvme0n1 932G
├─p1 16M Microsoft Reserved Partition
├─p2 930.8G NTFS Windows 11
└─p3 761M NTFS Windows Recovery
nvme1n1 932G
├─p1 3G vfat /boot ← EFI System Partition (ESP)
└─p2 929G LVM
├─ arch-root 90G ext4 /
├─ swap 4G swap
└─ arch-home 834G ext4 /homesystemd-boot is installed on the ESP at nvme1n1p1 and already manages booting both Arch and Windows 11. FreeBSD will be added as a third entry on that same ESP.
Strategy
- Shrink the Windows 11 partition (
nvme0n1p2) to free up space. - Install FreeBSD in the partitions created in the freed space.
- Copy FreeBSD's EFI bootloader to the Arch ESP.
- Create a systemd-boot entry for FreeBSD.
FreeBSD will live on nvme0n1 alongside Windows, without touching the Arch disk.
1. Backup
Before repartitioning any disk, back up anything that matters. Resizing partitions is a non-undoable operation.
2. Shrink the Windows 11 partition
Windows includes a built-in disk management tool that can resize NTFS partitions without reformatting.
In Windows, open Disk Management (diskmgmt.msc) or Storage Manager, right-click nvme0n1p2, and select Shrink Volume.
Enter how much space to free. For a functional FreeBSD system with ZFS:
| Intended use | Suggested space |
|---|---|
| Testing and learning | 60 GB |
| Desktop with ports | 120 GB |
| Server or workstation | 200 GB or more |
The wizard calculates the maximum shrink amount automatically. If it is smaller than desired, run disk defragmentation first and disable the hibernation file:
# PowerShell as administrator
powercfg -h offAfter shrinking, reboot Windows once so it can run a filesystem check.
3. Download FreeBSD
On Arch Linux, download the amd64 installation image:
curl -L -o ~/Downloads/FreeBSD-14.2-RELEASE-amd64-dvd1.iso \
https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/14.2/FreeBSD-14.2-RELEASE-amd64-dvd1.isoVerify integrity against the published checksum:
curl -L -o ~/Downloads/CHECKSUM.SHA512 \
https://download.freebsd.org/releases/amd64/amd64/ISO-IMAGES/14.2/CHECKSUM.SHA512-FreeBSD-14.2-RELEASE-amd64
sha512sum --check --ignore-missing ~/Downloads/CHECKSUM.SHA5124. Write the installation USB drive
Identify the USB device:
lsblkWrite the image (replace /dev/sdX with the correct device):
sudo dd if=~/Downloads/FreeBSD-14.2-RELEASE-amd64-dvd1.iso \
of=/dev/sdX bs=4M status=progress oflag=sync5. Boot from the USB drive
Reboot and enter the firmware boot menu (typically F11, F12, or Del during POST). Select the USB drive. If the BIOS only shows the Arch systemd-boot menu, press F or use Reboot into Firmware from within systemd-boot to access UEFI settings and temporarily change the boot order.
6. Install FreeBSD
The FreeBSD installer is text-based (bsdinstall). The main flow:
Welcome
Select Install.
Keymap
Choose the keyboard layout matching your hardware.
Set Hostname
Enter a hostname, for example freebsd.
Distribution Select
Select at least:
kernellib32ports(recommended for compiling software)src(system base source code)
Partitioning — Auto (ZFS)
Select Auto (ZFS). FreeBSD with ZFS provides snapshots, checksums, and error recovery.
On the ZFS configuration screen:
- Pool type:
stripe(single disk, no RAID) - Encrypt: your choice
- Pool name:
zroot(default)
Select Select Disks and mark nvme0n1.
Warning: The installer will show the full
nvme0n1disk. Select only that disk. FreeBSD will use the unallocated space created by shrinking the Windows partition. Do not selectnvme1n1, which contains Arch Linux.
Confirm formatting only the free space. If the installer warns about existing partitions on nvme0n1, verify it is operating only on unallocated space and not overwriting nvme0n1p1, nvme0n1p2, or nvme0n1p3.
The FreeBSD installer will automatically create a small EFI partition on
nvme0n1. It will be used to copy the bootloader later — do not use it as the system's primary ESP.
Network configuration
The installer will detect network interfaces. For Intel I225/I226 (Ethernet), the interface is typically named igc0. Configure DHCP for immediate connectivity or set it up manually.
To configure Wi-Fi during installation, select the wireless interface and provide the SSID and passphrase when prompted.
Root password
Set a strong password for the root user.
Time zone
Select America → your region.
Services at boot
Enable at least:
sshd(remote access)ntpd(time synchronization)moused(mouse support in the terminal)dumpdev(crash dump capture)
Additional user
Create a regular user and add them to the wheel group to be able to use sudo.
Finish
Select Exit to complete the installation. When prompted, choose No to skip opening a shell before rebooting. Remove the USB drive and reboot.
7. Boot into FreeBSD to verify
After installation, FreeBSD will have written its own EFI bootloader to nvme0n1 (in the small EFI partition created by the installer). The firmware may boot directly into FreeBSD — this is expected.
Verify that FreeBSD boots correctly. Once confirmed, proceed to integrate it with systemd-boot.
8. Integrate FreeBSD into systemd-boot
The goal is to have systemd-boot (installed on the Arch ESP at nvme1n1p1) as the only boot manager, with entries for all three systems.
systemd-boot supports chainloading other EFI bootloaders. When FreeBSD is selected from the menu, systemd-boot hands control to the FreeBSD bootloader, which then loads the kernel.
8.1. Mount the FreeBSD EFI partition
On Arch Linux, after rebooting, identify the EFI partition created by FreeBSD on nvme0n1:
lsblk -o NAME,SIZE,FSTYPE,LABEL nvme0n1FreeBSD creates a vfat (EFI) partition, typically around 260 MB. In this layout it may appear as nvme0n1p4 (after the three Windows partitions).
Mount it temporarily:
sudo mkdir -p /mnt/freebsd-efi
sudo mount /dev/nvme0n1p4 /mnt/freebsd-efiLocate the FreeBSD EFI bootloader:
find /mnt/freebsd-efi -name "*.efi"The main file is typically at:
/mnt/freebsd-efi/EFI/BOOT/BOOTX64.EFIor
/mnt/freebsd-efi/EFI/freebsd/loader.efi8.2. Copy the bootloader to the Arch ESP
The Arch ESP is mounted at /boot. Create a directory for FreeBSD:
sudo mkdir -p /boot/EFI/freebsdCopy the FreeBSD EFI file:
sudo cp /mnt/freebsd-efi/EFI/BOOT/BOOTX64.EFI /boot/EFI/freebsd/loader.efiIf the installer placed loader.efi directly:
sudo cp /mnt/freebsd-efi/EFI/freebsd/loader.efi /boot/EFI/freebsd/loader.efiUnmount the FreeBSD partition:
sudo umount /mnt/freebsd-efi8.3. Create the systemd-boot entry
Create the entry file:
sudo nano /boot/loader/entries/freebsd.confContents:
title FreeBSD 14
efi /EFI/freebsd/loader.efiCheck the existing entries to confirm the format:
ls /boot/loader/entries/8.4. Verify the menu
bootctl listFreeBSD should appear among the available entries. Reboot and confirm all three options appear in the menu.
9. FreeBSD post-install configuration
Initialize pkg
On first boot into FreeBSD:
pkg updateThe system will ask if you want to install the package manager. Confirm.
Install sudo
pkg install sudoEdit the sudoers file to allow the wheel group:
visudoUncomment the line:
%wheel ALL=(ALL:ALL) ALLNVIDIA drivers
FreeBSD supports NVIDIA GPUs through the nvidia-driver package:
pkg install nvidia-driverLoad the module:
kldload nvidiaTo load it automatically at boot, add to /etc/rc.conf:
sysrc kld_list+="nvidia"Check driver version compatibility with the RTX 5060 Ti (GB206) before installing. Support for the 50xx series may require a newer driver version than what is available in binary packages. Refer to the FreeBSD Handbook section on video drivers and the
x11/nvidia-driverport page.
Desktop environment (optional)
To install a minimal desktop with KDE Plasma:
pkg install xorg kde5 sddm
sysrc dbus_enable="YES"
sysrc sddm_enable="YES"To install Wayland with GNOME:
pkg install gnome wayland
sysrc dbus_enable="YES"
sysrc gdm_enable="YES"Networking
Check interfaces:
ifconfigTo configure DHCP on an interface (e.g. igc0):
sysrc ifconfig_igc0="DHCP"
service netif restart10. Maintenance
Update the system base
freebsd-update fetch installUpdate packages
pkg upgradeZFS snapshots
# Create a snapshot
zfs snapshot zroot/ROOT/default@before-update
# List snapshots
zfs list -t snapshot
# Roll back
zfs rollback zroot/ROOT/default@before-updateUpdate the EFI bootloader after FreeBSD updates
After a freebsd-update that updates the bootloader, repeat the steps from section 8 to copy the new loader.efi to the Arch ESP:
sudo mount /dev/nvme0n1p4 /mnt/freebsd-efi
sudo cp /mnt/freebsd-efi/EFI/freebsd/loader.efi /boot/EFI/freebsd/loader.efi
sudo umount /mnt/freebsd-efi11. Troubleshooting
FreeBSD does not appear in the systemd-boot menu
Check the entry file:
cat /boot/loader/entries/freebsd.conf
bootctl listConfirm that loader.efi exists at the expected path:
ls -lh /boot/EFI/freebsd/loader.efiWindows disappeared from the menu after installing FreeBSD
FreeBSD may have registered its own bootloader as the firmware default in NVRAM. Restore systemd-boot as default:
sudo bootctl installCheck the entries:
bootctl listThe Windows entry is typically detected automatically by systemd-boot through EFI/Microsoft/Boot/bootmgfw.efi on the ESP.
Error mounting the FreeBSD EFI partition
Confirm which partition is the FreeBSD EFI:
sudo fdisk -l /dev/nvme0n1The partition of type EFI System with ~260 MB is the one created by the FreeBSD installer.
ZFS does not initialize
If FreeBSD hangs at boot with a ZFS error, access the FreeBSD loader menu (press any key in the first few seconds) and try:
OK set zfs_be_root=zroot
OK bootOnce inside FreeBSD, check the pool:
zpool status
zfs list