Arch Linux Recovery Article
Losing GRUB on an Arch Linux + LUKS + Btrfs setup usually means you need to boot from a live Arch ISO, unlock the encrypted partition, mount the Btrfs subvolumes correctly, chroot into the installed system, and then reinstall GRUB with the proper crypto and filesystem support enabled.
The most important part is making sure you mount the correct root subvolume, mount the EFI system partition to the proper location, and configure GRUB so it can unlock your encrypted root device during boot. If any of those pieces are wrong, the system may fail to boot even if GRUB appears to install successfully.
Start by booting into the Arch Linux live ISO. After that, identify your disks and encrypted partition:
lsblk
cryptsetup luksOpen /dev/sdXn cryptroot
Replace /dev/sdXn with your actual encrypted partition. Once opened, the decrypted mapper device
will usually appear as /dev/mapper/cryptroot.
Most Arch Linux Btrfs installations use subvolumes such as @ for the root filesystem and
@home for the home directory. Mount the root subvolume first:
mount -o subvol=@ /dev/mapper/cryptroot /mnt
mkdir -p /mnt/home
mount -o subvol=@home /dev/mapper/cryptroot /mnt/home
If your installation uses different subvolume names, substitute the correct ones. Using the wrong subvolume is one of the most common reasons recovery attempts fail.
Next mount the EFI System Partition. On many systems this is a small FAT32 partition:
mkdir -p /mnt/boot/efi
mount /dev/sdX1 /mnt/boot/efi
If your system uses /boot directly instead of /boot/efi, then mount it accordingly.
The critical thing is that the EFI partition must be mounted to the same path your installed system expects.
arch-chroot /mnt
Once inside the chroot, you are effectively working inside your installed Arch system, which allows you to reinstall boot packages and regenerate the GRUB configuration.
pacman -S grub efibootmgr btrfs-progs cryptsetup
These packages provide the bootloader itself, EFI boot manager support, Btrfs utilities, and LUKS encryption support.
Edit GRUB’s defaults file:
nano /etc/default/grub
Ensure this line is present:
GRUB_ENABLE_CRYPTODISK=y
Then make sure your kernel command line includes the LUKS device mapping:
GRUB_CMDLINE_LINUX="cryptdevice=UUID=<your-luks-uuid>:cryptroot root=/dev/mapper/cryptroot"
To find the UUID of the encrypted partition:
blkid /dev/sdXn
Replace <your-luks-uuid> with the UUID of the encrypted partition, not the decrypted mapper device.
grub-install --target=x86_64-efi \
--efi-directory=/boot/efi \
--bootloader-id=GRUB
This installs the GRUB EFI executable into the mounted EFI partition and registers it under the bootloader ID GRUB.
grub-mkconfig -o /boot/grub/grub.cfg
This step rebuilds the GRUB menu and boot instructions so the new install can find your kernel, initramfs, and encrypted root filesystem.
exit
umount -R /mnt
reboot
After rebooting, GRUB should load, prompt for the LUKS passphrase if needed, and then boot into your Arch Linux system.
- Wrong Btrfs subvolume mounted as root
- EFI partition mounted to the wrong directory
- Missing
GRUB_ENABLE_CRYPTODISK=y - Incorrect UUID in
cryptdevice= - GRUB installed while EFI partition was not mounted
Check existing EFI boot entries:
efibootmgr -v
If no GRUB entry exists, create one manually:
efibootmgr --create --disk /dev/sdX --part 1 \
--label "GRUB" \
--loader /EFI/GRUB/grubx64.efi
If GRUB continues to be troublesome, many Arch users prefer systemd-boot for simpler EFI setups, or rEFInd for a friendlier graphical boot menu. GRUB works with LUKS and Btrfs, but it is more sensitive to configuration mistakes than some alternatives.
lsblk -f
blkid
cat /etc/fstab
These commands help verify your partition layout, UUID values, and mount configuration if something still does not line up.
lsblk
cryptsetup luksOpen /dev/sdXn cryptroot
mount -o subvol=@ /dev/mapper/cryptroot /mnt
mkdir -p /mnt/home
mount -o subvol=@home /dev/mapper/cryptroot /mnt/home
mkdir -p /mnt/boot/efi
mount /dev/sdX1 /mnt/boot/efi
arch-chroot /mnt
pacman -S grub efibootmgr btrfs-progs cryptsetup
nano /etc/default/grub
grub-install --target=x86_64-efi \
--efi-directory=/boot/efi \
--bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
exit
umount -R /mnt
reboot