These are quick notes about fixing my system after an incomplete kernel update.
During a system update, my workstation suddenly shut down (hardware failure). I was working on something else during the update, so I had no idea when the update was aborted. When I tried to boot again, I was greeted with this error:
Warning: /lib/modules/4.8.4-1-ARCH/modules.devname not found - ignoring. starting version 231 ERROR: device 'UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' not found, Skipping fsck. ERROR: Unable to find root device 'UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'. You are being dropped to a recovery shell Type 'exit' to try and continue booting sh: can't access tty: job control turned off [rootfs ]#
At that time I thought that one of my harddrive died. Digging a bit into it, the partition that couldn’t be found was an encrypted one. So I thought that maybe my fstab got somehow corrupted. I didn’t have access to a shell after booting as the keyboard was not working, so I just booted with a live usb key. My disks are all encrypted, so the first step was to decrypt them:
Confirm that they are indeed crypted:
blkid | grep crypto
Decrypt/mount the partition:
cryptsetup luksOpen /dev/sdc2/ crypt
You then can’t just mount
/dev/mapper/crypt. If you try, you’ll get:
mount /dev/mapper/crypthome /mnt/crypt mount: unknown filesystem type 'LVM2_member'
Find the group of your volume (mine was main):
Find the name of the volume (mine was root):
mount /dev/main/root /mnt
In my case,
/boot is not encrypted, so I also had to mount it to be able to
look at my kernel.
mount /dev/sdc1 /mnt/boot
Then I just used chrooted:
I thought that the issue might have been in the initial ramdisk environment, so I just ran:
mkinitcpio -p linux
I was greeted with quite a few warnings that some modules were not found. But all the modules for encryption was present, so I decided to just reboot. Some progress were made: I could decrypt my disk, but was then greeted with:
mount: unknown filesystem type 'ext4'
I booted on the usb key again, and looked a bit at my modules. That’s when I found
uname -r was giving me an old kernel version. Trying to reinstall the
package was returning an error because the
desc file was missing. I guess my
update was interrupted during the kernel update.
Removing the package and re-installing it did the trick. Note that
pacman -S --force
was not enougth to prevent pacman from complaining about the missing files.
pacman -R linux pacman -Sy linux mkinitcpio -p linux