Skip to main content

Failed to mount /efi

After a recent update using eos-update --aur I rebooted my machine and found myself only able to boot into emergency mode.

For boot, my devices uses systemd-boot. I spent some time searching around figuring out what the issue could possibly be.

Smoking Gun

uname -a yielded a response of 6.18.8-arch2-1

Comparing that with pacman -Q kernel yields a repsonse of 6.18.9-arch1-2

Diagnosis

Somehow my kernel versions got out of date.

Resolution

This resolution differs from Edmund Goodman's linked post slightly, but his work was crucial for figuring out how to get into the encrypted drive.

Boot from live USB

If you do not have a drawer of live USBs, follow the options provided by EndeavorOS.

Connect to the internet

Connecting via the GUI connection manager should suffice. You will need this for redownloading the package.

Identify your drives

lsblk -f

Example output:

nvme0n1
├─nvme0n1p1                                   vfat        FAT32             B3E1-C4A9                               1.8G     9% /efi
├─nvme0n1p2                                   crypto_LUKS 2                 e2a1b3c4-d5e6-4f78-9a0b-c1d2e3f4a5b6
│ └─luks-e2a1b3c4-d5e6-4f78-9a0b-c1d2e3f4a5b6 ext4        1.0   endeavouros f1e2d3c4-b5a6-4987-8654-321fedcba987  673.3G    17% /
└─nvme0n1p3                                   crypto_LUKS 2                 a9b8c7d6-e5f4-4321-b0a9-8765fedc4321
  └─luks-a9b8c7d6-e5f4-4321-b0a9-8765fedc4321 swap        1     swap        1a2b3c4d-5e6f-4789-a0b1-c2d3e4f5a6b7                [SWAP]

Open Your Encrypted Drive

sudo cryptsetup open /dev/nvme0n1p2 luks_root

Mount the Drives

sudo mount /dev/mapper/luks_root /mnt
sudo mount /dev/nvme0n1p1 /mnt/boot

Root Into the Drive

sudo arch-chroot /mnt

Reinstall the Linux Kernel

pacman -S linux

Note: at some point I had cleared pacman cache of the linux header. It is not clear if that was a necessary step but it did happen during the troubleshooting that led to this.

Validate the Kernel Was Installed

kernel-install list

Example output:

VERSION        HAS KERNEL PATH                           
6.18.9-arch1-2          ✓ /usr/lib/modules/6.18.9-arch1-2

Exit & Reboot

exit
reboot

You might see multiple versions you can boot, choose the one with the version that should load. After rebooting, running kernel-install list should only present the version that was just installed.

Theory of What Happened

I am not 100 percent confident that this is exactly what happened, but in trying to make a model of what happened this is the best estimation that can be provided:

Pacman installed an updated kernel, the hook to trigger dracut (which generates the initramfs) was successful; however, the hook to trigger kernel-install which copies the kernel and initramfs to a version directory and also adds the boot loader entry appears to have failed.

References

https://edmundgoodman.co.uk/posts/2024/fixing-endeavouros-boot-failures/