Switching to systemd-boot on an Arch Linux UEFI system
Install and verify systemd-boot on Arch Linux UEFI systems, with entry files and EFI-only limitations.
17 Oct 2025, 10:49 UTC

The problem: GRUB is more machinery than a UEFI-only Arch system needs
After installing Arch Linux, many guides default to GRUB. GRUB is powerful, but it relies on grub-mkconfig to regenerate a large configuration file from shell scripts whenever kernels change. If your computer uses UEFI and you only need to boot Arch, that complexity is unnecessary. systemd-boot is a lightweight EFI bootloader included with systemd. It reads plain text files under /boot/loader instead of running a config generator.
Useful takeaway: systemd-boot is simpler to maintain on UEFI systems, but it is EFI-only and does not protect boot entries with passwords.
Confirm EFI mode and install systemd-boot
systemd-boot cannot boot legacy BIOS systems. Before installing, confirm the system booted in EFI mode by checking for the EFI firmware interface:
test -d /sys/firmware/efi && echo EFI mode
Run this command in the installed Arch system or inside an arch-chroot during installation. You need root privileges for the installation steps.
Install the bootloader and the EFI management tool:
pacman -S systemd-boot efibootmgr
Then install the loader to the EFI system partition (ESP):
bootctl install
bootctl install copies systemd-bootx64.efi to the ESP and creates an EFI NVRAM boot entry. This changes system state. A misconfigured entry can make the system unbootable, so keep a bootable Arch USB nearby until you have rebooted successfully at least twice.
Create the loader configuration and kernel entry
Create /boot/loader/loader.conf to select the default entry and set the menu timeout:
default arch.conf
timeout 3
console-mode max
editor no
Next, identify the UUID of your root partition. Run lsblk -f or blkid as root and note the UUID for the partition mounted at /. Then create /boot/loader/entries/arch.conf, replacing <ROOT-UUID> with that value:
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=<ROOT-UUID> rw quiet
initrd is the initial RAM filesystem loaded before the real root filesystem is mounted. root=UUID=... identifies the root partition by UUID instead of a device name such as /dev/sda1, which can change between boots.
Verify the installation
Run bootctl status as root. It reports the loader version, the ESP path, and the active boot entry. Confirm that /boot/loader/loader.conf and /boot/loader/entries/arch.conf exist and contain the expected lines.
Use efibootmgr -v to check that the EFI boot order includes an entry pointing to \EFI\systemd\systemd-bootx64.efi on the ESP. If the entry is missing or out of order, adjust it with efibootmgr or re-run bootctl install.
Limitation: no automatic entries for multiple kernels
systemd-boot does not scan for new kernels or rewrite its menu. The standard Arch kernel package maintains /vmlinuz-linux as a symlink to the current kernel, so routine upgrades usually keep working without editing arch.conf. If you keep multiple custom kernels, you must create a separate entry file for each one. There is also no built-in boot-password protection.
Practical check: after any kernel package update, reboot and confirm the selected entry starts the system. If you want a fallback, add /boot/loader/entries/arch-fallback.conf using /initramfs-linux-fallback.img as the initrd.
Because bootctl install writes to the ESP and NVRAM, rollback means either reinstalling GRUB or booting from the Arch ISO, chrooting into the installed system, and repairing the EFI entry. Keep the install medium available until the new bootloader is proven.
If your Arch system is UEFI-only and you do not need BIOS support or password-protected boot entries, systemd-boot is a practical alternative to GRUB. Install it, write one entry file, verify with bootctl status, and remove GRUB only after a successful reboot.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.