I had a scare yesterday. I was running pacman -Syu when I powered off my laptop by mistake before updates could finish installing.

With my luck, I’d interrupted the installation of a linux kernel update, so when I tried booting up again, I was greeted with this message:

white text on a black screen saying Loading Linux linux … error: file /boot/vmlinuz-linux not found. Loading initial ramdisk … error: you need to load the kernel first.

Loading Linux linux ...
error: file `/boot/vmlinuz-linux` not found.
Loading initial ramdisk ...
error: you need to load the kernel first.

I couldn’t progress further; I was returned to the main GRUB menu.

After a cursory internet search, I used my Arch liveUSB to boot into my computer in order to fix this. I ran lsblk to check that my partitions were intact (thank heavens). I wanted to enter chroot, so I tried mounting my partitions:

# mount /dev/sda2 /mnt

… but this gave an error – mount: unknown filesystem ext4. This was just weird, because it is an ext4 filesystem! So next I tried running filesystem check (fsck) to fix this. For future reference, the command is:

# fsck -y /dev/sda2

I did not run this; I foolishly ran fsck -A -y, which runs fsck on all disks, including the liveUSB. Which was then borked. 🤦‍♀️

I quickly downloaded the latest Arch .iso, flashed it to my liveUSB, and booted back in. My fsck seemed to have fixed the error, so I was able to successfully mount my HDD partitions and enter chroot:

# mount /dev/sda2 /mnt
# mount /dev/sda1 /mnt/efi
# arch-chroot /mnt

I tried running pacman -Syu, but got the error unable to lock database; I renamed /var/lib/pacman/db.lck to /var/lib/pacman/db.lck.bak (though what you’re supposed to do in this situation is delete it).

My beloved wifi-menu has been removed from the latest version of the Arch installation image (September 2020); now you have to use iwctl. I didn’t do that; I chroot-ed and used wpa_supplicant, which I already had on my system. I created a simple wpa_supplicant.conf (full path: /etc/wpa_supplicant/wpa_supplicant.conf):

ctrl_interface=/run/wpa_supplicant
update_config=1

network={
	ssid="MY_SSID"
	psk="MY_PASSWORD"
}

And voilà, I was able to run pacman -Syu. For good measure, I installed another kernel too.

# pacman -Syu linux-lts

I was then able to boot with no issues. However, I don’t think this is the right way to resolve this issue; I was in a hurry so this is what I resorted to. This may actually be a pretty hacky method. Even so, I’m happy because my laptop’s working fine and my data’s safe; and I had a good idea of what to do without looking it up. My Arch Linux knowledge has grown. 😁