The systemd-boot manager is failing to find the required boot target, preventing your system from booting.

Here are the most common reasons this happens and how to fix them:

1. Incorrect efi/loader/loader.conf Configuration

The loader.conf file tells systemd-boot which entry to use as the default and where to find other boot entries. A typo or incorrect path here is a frequent culprit.

Diagnosis: Mount your EFI system partition (ESP). This is usually /boot/efi or /efi. Then, check the contents of /boot/efi/efi/loader/loader.conf (or /efi/efi/loader/loader.conf).

# Example: If your ESP is mounted at /boot/efi
cat /boot/efi/efi/loader/loader.conf

Common Issues and Fixes:

  • default entry points to a non-existent entry: The default line specifies which boot entry to load. If it’s set to arch.conf but arch.conf doesn’t exist in efi/loader/entries/, boot will fail.
    • Fix: Ensure the default line matches an existing .conf file in the entries directory. If you want to boot Arch Linux, it should look like:
      default arch.conf
      timeout 3
      console-mode max
      
      Edit the file using nano or vim:
      sudo nano /boot/efi/efi/loader/loader.conf
      
  • Typo in default or timeout: Simple typos can cause issues.
    • Fix: Double-check spelling and syntax.

Why it works: systemd-boot reads loader.conf to determine the default boot entry and how long to wait before booting it. An incorrect default path means it can’t find the instructions for the OS to load.

2. Missing or Corrupted Boot Entry File (efi/loader/entries/*.conf)

Even if loader.conf is correct, the actual boot entry file it points to might be missing, corrupted, or misconfigured.

Diagnosis: Navigate to the efi/loader/entries/ directory on your mounted ESP and list the files.

# Example: If your ESP is mounted at /boot/efi
ls -l /boot/efi/efi/loader/entries/

You should see files like arch.conf, ubuntu.conf, etc.

Common Issues and Fixes:

  • File missing: The .conf file for your desired OS is simply not there. This can happen after manual edits or if the installation process didn’t create it correctly.
    • Fix: Recreate the .conf file. For a typical Arch Linux installation, it might look like this:
      title   Arch Linux
      linux   /vmlinuz-linux
      initrd  /initramfs-linux.img
      options root=PARTUUID=YOUR_ROOT_PARTITION_UUID rw
      
      Replace YOUR_ROOT_PARTITION_UUID with the actual UUID of your root partition. You can find this using lsblk -f or blkid. Create the file:
      sudo nano /boot/efi/efi/loader/entries/arch.conf
      
      Paste the content, save, and exit.
  • Incorrect linux or initrd paths: The paths to the kernel (vmlinuz-*) and initramfs (initramfs-*.img) might be wrong, especially if your kernel images are not in the root of the ESP.
    • Fix: Ensure the paths specified in the .conf file correctly point to the kernel and initramfs images within the ESP. If your kernel is in /EFI/Linux/, you’d use linux /EFI/Linux/vmlinuz-linux.
  • Incorrect options line: The root= parameter is crucial. If it’s wrong, the kernel won’t find your root filesystem.
    • Fix: Verify the root= parameter. Using PARTUUID is generally more robust than device names like /dev/sda1.
      options root=PARTUUID=abcdef01-2345-6789-abcd-ef0123456789 rw
      
      Use sudo blkid to find the PARTUUID of your root partition.

Why it works: Each .conf file in the entries directory is a set of instructions for systemd-boot on how to load a specific operating system, including the kernel, initrd, and kernel parameters. If these instructions are missing or wrong, systemd-boot doesn’t know what to load.

3. Corrupted systemd-boot EFI Binary

The systemd-boot EFI application itself, typically located at efi/EFI/systemd/systemd-bootx64.efi (or similar), might be corrupted or an older version that’s incompatible with your firmware.

Diagnosis: Check the integrity of the systemd-bootx64.efi file on your ESP.

# Example: If your ESP is mounted at /boot/efi
ls -l /boot/efi/efi/EFI/systemd/systemd-bootx64.efi

You can also try to re-install systemd-boot from a live environment.

Fix: If you suspect corruption, re-install systemd-boot from a live Arch Linux environment (or your distribution’s equivalent). Mount your ESP and your root partition, then run the bootctl command.

# Example: Mount ESP to /mnt/boot/efi, root to /mnt
# Ensure you are in a live environment with systemd-boot installed
mount /dev/sdXY /mnt/boot/efi  # Replace sdXY with your ESP partition
mount /dev/sdXZ /mnt          # Replace sdXZ with your root partition

# Install systemd-boot to the ESP
bootctl --esp-path=/mnt/boot/efi install

Why it works: This command copies the systemd-boot EFI executable to the correct location on your ESP and registers it with your UEFI firmware. If the original binary was damaged or incomplete, this process replaces it with a fresh copy.

4. EFI System Partition (ESP) Not Mounted Correctly or Not Marked as ESP

systemd-boot needs to read its configuration files from the ESP. If the partition isn’t mounted at the expected location (/boot/efi or /efi) or if it’s not properly recognized as an ESP by the system, systemd-boot won’t find anything.

Diagnosis: Check if the ESP is mounted and what its mount options are.

mount | grep -i esp

You should see an entry like: /dev/sdXY on /boot/efi type vfat (rw,relatime,fmask=0022,dmask=0022,codepage=437,iocharset=iso8859-1,shortname=mixed,errors=remount-ro)

Also, check the partition type using parted or fdisk.

sudo parted -l

Look for the partition type to be "EFI System" or "EFI System Partition".

Fix:

  • Mounting: If it’s not mounted, add an entry to /etc/fstab.
    PARTUUID=YOUR_ESP_PARTITION_UUID  /boot/efi  vfat  defaults,rw,relatime  0  2
    
    Find YOUR_ESP_PARTITION_UUID using blkid or lsblk -f. Then, mount it:
    sudo mount /boot/efi
    
  • Partition Type: If the partition type is incorrect, you’ll need to reformat it correctly using parted or gparted from a live environment. This is a destructive operation, so back up data first.

Why it works: The UEFI firmware and systemd-boot expect to find bootloaders and their configurations on a FAT32 partition specifically designated as the EFI System Partition. Correct mounting makes these files accessible to the boot manager.

5. Secure Boot Interference

If Secure Boot is enabled and systemd-boot or your kernel is not properly signed, the UEFI firmware will refuse to load them.

Diagnosis: Check your UEFI/BIOS settings for "Secure Boot" and see if it’s enabled.

Fix:

  • Disable Secure Boot: The simplest solution is often to disable Secure Boot in your UEFI/BIOS settings.
  • Sign systemd-boot and Kernel: For a more advanced setup, you can sign systemd-boot and your kernel with your own keys or use distribution-provided signed binaries if available. This is a complex process involving tools like sbsign and efibootmgr.

Why it works: Secure Boot is a security feature that only allows digitally signed executables to run during boot. If the signature is missing or invalid, the firmware prevents execution.

6. UEFI Firmware Bugs or Settings

Occasionally, the UEFI firmware itself can have bugs or misconfigurations that affect bootloader loading.

Diagnosis:

  • Check your UEFI/BIOS for available updates.
  • Reset UEFI settings to defaults to rule out user-created misconfigurations.

Fix:

  • Update UEFI Firmware: Visit your motherboard manufacturer’s website for the latest BIOS/UEFI updates and follow their instructions carefully for flashing.
  • Reset UEFI Settings: Enter your UEFI setup, find an option like "Load Defaults" or "Factory Settings," save, and exit.

Why it works: Firmware bugs can cause unpredictable behavior, including issues with recognizing or loading EFI executables. Resetting settings ensures no incorrect user configurations are interfering.

After addressing these, you should be able to boot. If you encounter a new error, it’s likely related to the kernel failing to find or mount the root filesystem, often indicated by messages like "Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)".

Want structured learning?

Take the full Systemd course →