System no longer boots, gave up waiting for root device, (initramfs), /dev/mapper/gnome-root does not exist

After installing an update, my system no longer boots. I have full disk encryption (the one the installer sets up for you) enabled so it usually asks for the key only seconds after booting past GRUB. Now, it skips asking for the key, tries to load Gnome, and then goes to the screen pictured below. The system is a 64-bit System76 box running Ubuntu Gnome 13.04. This has happened to me once in the past however, on a Dell XPS 8300 64-bit running Ubuntu Gnome Remix 12.10. In that case I reinstalled the OS. However I want to actually fix the problem this time so I know how to handle it in the future. Also, it is extremely inconvenient to reinstall from scratch.

My suspicion is that something got screwed up in a config file in /boot such that it doesn't realize the disk is encrypted, but I didn't see anything when poking around in there. Do you have any ideas of how to fix it (besides reinstalling the OS)?

Gave up waiting for root device. Common problems:
  — Boot args (cat /proc/cmdline)
    — Check rootdelay= (did the system wait long enough?)
    — Check root= (did the system wait for the right device?)
  — Missing modules (cat /proc/modules; ls /dev)
ALERT! /dev/mapper/gnome-root does not exist.   
Dropping to a shell! 

BusyBox v.1.20.2 (Ubuntu 1:1.20.2-1ubuntu1) built-in shell (ash)   
Enter 'help' for list of built-in commands.  

(initramfs)

Solution 1:

I got it fixed!!! For future generations so you don't have to go through the agonizing days and endless hours that I did:

Firstly, I was able to get the system to boot from the (initramfs) prompt by typing the following (I used this forum page as a crutch):

cryptsetup luksOpen /dev/sda5 sda5_crypt
lvm vgchange -a y
exit

This got my system to boot properly. Once booted, I modified /etc/crypttab to point to a different UUID than before. I picked the UUID from my /etc/fstab. Save the original UUID value. You will need it in a few steps. I then ran (from a terminal):

update-initramfs -k all -c

If you get a warning that looks like this or something similar:

WARNING: invalid line in /etc/crypttab

then go back to the beginning and instead of sda5_crypt, use what is in your crypttab.

I then rebooted. This time I got the prompt for the passphrase! But don't get too excited, because it didn't work. I entered the right password about 7 times and it rejected them all. It then went back to the (initramfs) prompt after about 90 seconds.

I repeated step one and got it booted again. I then restored the original UUID value to the crypttab, and reran step two. I then rebooted, and SUCCESS!

Solution 2:

With full-disk encryption being an option in Ubuntu 14.04, I just wanted to point out how I solved this problem, since my initramfs terminal didn't allow me to use cryptsetup:

  1. Boot from a Live DVD/USB (USB will be a lot faster).

  2. Open a Terminal and type the following:

    sudo -i
    cryptsetup luksOpen /dev/sda5 sda5_crypt
    # (do any lvm management you need here, I didn't need any.)
    mkdir /mnt/system
    mount /dev/mapper/ubuntu--vg-root /mnt/system
    mount /dev/sda2 /mnt/system/boot
    mount /dev/sda1 /mnt/system/boot/efi (May or may not be needed.)
    for i in /dev/pts /dev /proc /sys; do mount -B $i /mnt/system$i; done
    chroot /mnt/system
    update-initramfs -k all -c
    exit
    for i in /dev/pts /dev /proc /sys; do umount /mnt/system$i; done
    umount /mnt/system/boot/efi # (If you have UEFI.)
    umount /mnt/system/boot
    umount /mnt/system
    
  3. Reboot and hope it works.