This guide outlines steps to remove GRUB and install systemd-boot as your system bootloader on a UEFI system running Arch Linux.
Watch out:
- This is intended ONLY for UEFI systems.
- Make sure
/bootis mounted to the EFI System Partition (ESP).- Backup important data on your system before doing anything.
- Running Arch Linux in UEFI mode
- EFI System Partition (ESP) mounted to
/boot - Root privileges
bootctlavailable (systemdpackage includes this)
Make sure you're running in UEFI mode:
ls /sys/firmware/efi/efivarsCheck if your ESP (EFI System Partition) is mounted at /boot:
findmnt /bootIf it's not, you'll need to mount it there before proceeding.
Install systemd-boot to the EFI system partition:
bootctl installThis installs systemd-boot to your ESP under /boot/EFI/systemd.
If you're sure everything is working and want to clean up:
sudo pacman -Rns grubYou might also want to remove any existing GRUB entries from the firmware:
efibootmgrThen remove the GRUB entry, replacing xxxx with the boot number:
efibootmgr -b xxxx -Bsudo tee /boot/loader/loader.conf > /dev/null <<EOF
default arch
timeout 5
console-mode max
editor no
EOFsudo tee /boot/loader/entries/arch.conf > /dev/null <<EOF
title Arch Linux
linux /vmlinuz-linux
initrd /initramfs-linux.img
options root=UUID=$(blkid -s UUID -o value /dev/sdXn) rw
EOF🔁 Replace
/dev/sdXnwith the root partition (e.g.,/dev/nvme0n1p3)
You can find it with:
lsblkOr use:
findmnt /Then get the UUID:
blkid /dev/sdXnEnsure your kernel and initramfs are located under /boot (not /boot/efi or
elsewhere), or adjust paths accordingly.
Reboot your system:
sudo rebootEnter the firmware (UEFI setup) if needed, and choose systemd-boot
(or whatever entry bootctl installed).
To update systemd-boot in the future:
bootctl updateWhile systemd-boot manages its entries inside /boot/loader/entries/,
you can also directly interact with UEFI firmware entries using efibootmgr.
sudo pacman -S efibootmgrsudo efibootmgrThis shows all boot entries and the current boot order. Example output:
BootCurrent: 0002
Timeout: 2 seconds
BootOrder: 0002,0001,0000
Boot0000* Windows Boot Manager
Boot0001* UEFI: USB Device
Boot0002* Linux Boot ManagerSet Linux (0002) to boot first:
sudo efibootmgr -o 0002,0000,0001Add a custom entry pointing to systemd-boot:
sudo efibootmgr --create --disk /dev/nvme0n1 --part 1 \
--label "systemd-boot" --loader '\EFI\systemd\systemd-bootx64.efi'Replace
/dev/nvme0n1and--part 1with your EFI disk and partition.
Remove entry 0000:
sudo efibootmgr -b 0000 -BBoot into Windows (entry 0000) on next reboot only:
sudo efibootmgr -n 0000-
systemd-bootentries live in/boot/loader/entries/→ you manage them by editing files. -
efibootmgrworks at the firmware level → useful for:- fixing boot order
- removing old GRUB entries
- setting one-time boot
-
If things break, use an Arch ISO (live USB) to recover – mount your system and re-run
bootctl install.