Howdy,
I installed Garuda a couple of weeks ago or so, and recently hit this error after using garuda-update (which included a newer Linux kernel) and then rebooting. After Grub, but before logging in, I ran into this:
ERROR: device 'UUID=...' not found. Skipping fsck.
mount: /new_root: can't find UUID=...
You are now being dropped into and emergency shell.
I was able to restore a previous snapshot (very nice) and figure it out from there. I found tons of posts on the internet regarding this error, but none of them had to do with this particular cause, which is why I'm posting this here.
I eventually ended up searching through Calamares to figure out how it was setting up encryption, and this is where I finally figured out what happened: calamares/main.py at 29ef9e909df58e025868e1f0eea1c4f0fc30cf3a · calamares/calamares · GitHub
Then I verified that /etc/dracut.conf.d/calamares-luks.conf was created and configured, but /etc/mkinitcpio.conf looked like the default file.
Here's what happened: apparently the live installer (Calamares) configured and used dracut to create the initial ramdisk, but there's some Pacman hook that triggers mkinitcpio after installing a kernel. I don't think this would've been a problem if I hadn't chosen the "Encrypt System" option during installation, since otherwise the default /etc/mkinitcpio.conf probably would've sufficed, and the relevant kernel parameters passed to Grub by Calamares seem to only vary for encryption in this case.
Here's how I fixed it: I configured /etc/mkinitcpio.conf, /etc/default/grub, ran mkinitcpio -P
, update-grub
, and rebooted to a new kernel verify the fix.
/etc/mkinitcpio.conf changes:
Added both of these:
FILES=(/etc/crypttab /crypto_keyfile.bin)
Added encrypt
:
HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block encrypt filesystems fsck)
/etc/default/grub changes:
Added cryptodisk
to the start of GRUB_PRELOAD_MODULES (maybe this is unnecesary, I haven't checked):
GRUB_PRELOAD_MODULES="cryptodisk part_gpt part_msdos"
Changed GRUB_CMDLINE_LINUX_DEFAULT
:
#before
#GRUB_CMDLINE_LINUX_DEFAULT='rd.luks.uuid=<a uuid> rd.udev.log_priority=3 vt.global_cursor_default=0 resume=UUID=<another uuid> loglevel=3'
#after
GRUB_CMDLINE_LINUX_DEFAULT='cryptdevice=UUID=<the uuid>:luks-<the name in /etc/crypttab> root=/dev/mapper/<the name in /etc/crypttab> rd.udev.log_priority=3 vt.global_cursor_default=0 resume=UUID=<another uuid> loglevel=3'
Here's what I'd recommend to prevent this from happening (cc: @dr460nf1r3 ): if Garuda is installed & configured with dracut, then disable the mkinitcpio -> pacman hook and wire in dracut to use that hook instead. I'd be happy to help solve this if you'll point me in the right direction.
Getting to the bottom of this issue took me more time than I'd like to admit, so hopefully this at least helps out someone else