When you install Arch, the wiki gives you a choice of bootloader. The two popular ones are GRUB (the old reliable that works on every kind of system) and systemd-boot (smaller, simpler, UEFI-only). This guide explains what each is, how to install either, and what you give up by choosing one over the other.
What a bootloader does
It's the program your firmware (UEFI or BIOS) runs first. Its only real job is: pick a kernel, load it, hand control over. Both options below do exactly that — the difference is everything around it.
The short comparison
| systemd-boot | GRUB | |
|---|---|---|
| Works on BIOS (non-UEFI) systems | No | Yes |
| Works on UEFI | Yes | Yes |
| Config style | Tiny text files per kernel | Single generated file |
| Multiboot with Windows | Picks Windows automatically | Has a tool to detect (os-prober) |
| Encrypted /boot | No | Yes |
| Show snapshot menu | Limited | Yes (with grub-btrfs) |
| Comes with Arch base | Yes (via systemd) | No (separate package) |
Rule of thumb:
- UEFI laptop, single Linux install — systemd-boot. Less to learn, less to break.
- BIOS system, encrypted /boot, btrfs with snapshots, complex multiboot — GRUB.
systemd-boot setup
Prerequisites:
- UEFI firmware (you booted the installer in UEFI mode).
- An EFI System Partition (ESP) — usually
/dev/sda1, FAT32, ~512 MB. - The ESP is mounted at
/boot(not/boot/efi) — systemd-boot likes it that way.
Install:
sudo bootctl install
That copies the systemd-boot files to the ESP and creates an EFI entry. The configuration lives in two places on the ESP:
/boot/loader/loader.conf # global settings
/boot/loader/entries/*.conf # one per boot entry
loader.conf
default arch.conf
timeout 3
console-mode max
editor no
timeout 3 = wait 3 seconds before booting the default. editor no = don't let people edit the kernel command line at boot (so a stolen laptop can't drop to a root shell).
entries/arch.conf
title Arch Linux
linux /vmlinuz-linux
initrd /intel-ucode.img
initrd /initramfs-linux.img
options root=UUID=YOUR-ROOT-UUID rw
Find the UUID with blkid /dev/sdaX (where X is your root partition). Use amd-ucode.img instead of intel for AMD CPUs.
Make a second entry for the fallback initramfs, just like above but with initramfs-linux-fallback.img. It's your lifeboat if a kernel update breaks the main one.
Updates
systemd-boot doesn't self-update. After a systemd package upgrade, you have to refresh the bootloader on the ESP yourself:
sudo bootctl update
Easier: install the systemd-boot-pacman-hook from the AUR — it runs bootctl update automatically on every systemd upgrade.
GRUB setup
Install the package:
sudo pacman -S grub efibootmgr # efibootmgr only needed on UEFI
For UEFI
sudo grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
sudo grub-mkconfig -o /boot/grub/grub.cfg
For BIOS
sudo grub-install --target=i386-pc /dev/sda # NOT /dev/sda1 — the whole disk
sudo grub-mkconfig -o /boot/grub/grub.cfg
Editing GRUB
You don't hand-edit grub.cfg. You edit /etc/default/grub and re-generate:
sudo nano /etc/default/grub
# change e.g. GRUB_TIMEOUT or GRUB_CMDLINE_LINUX
sudo grub-mkconfig -o /boot/grub/grub.cfg
The only file you ever edit is /etc/default/grub. Everything in grub.cfg is regenerated from it.
Multibooting
To make GRUB detect other operating systems on your disk:
sudo pacman -S os-prober
sudo nano /etc/default/grub # uncomment GRUB_DISABLE_OS_PROBER=false
sudo grub-mkconfig -o /boot/grub/grub.cfg
How to switch from one to the other
You can have both installed at once; only one is active per UEFI boot entry.
From GRUB → systemd-boot (UEFI): install systemd-boot as above. efibootmgr shows you both entries; set systemd-boot first.
sudo efibootmgr # see entries and current order
sudo efibootmgr -o XXXX,YYYY # set order (hex IDs)
From systemd-boot → GRUB: install GRUB as above. Same efibootmgr dance.
The "boot is broken" rescue
If the bootloader is the broken bit, boot from an Arch live USB and chroot in:
mount /dev/sdaROOT /mnt
mount /dev/sdaESP /mnt/boot
arch-chroot /mnt
# for systemd-boot:
bootctl install
# for GRUB UEFI:
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
exit
reboot
How to pick, honestly
For a single-Linux UEFI laptop in 2026, systemd-boot is the lighter, calmer option — you'll never wonder which of fifty grub config snippets is in charge. For everything weirder (encrypted /boot, BIOS hardware, snapshot menus, complex multi-OS rigs), GRUB's extra features pay off. Both work. Pick the lighter one until you have a specific need.