If you end up in a (initramfs) shell after a kernel update, chances are that the update-initramfs didn't finish properly.
Get hold of a live USB with the latest Ubuntu release. With this we can gain access to the broken machine.
Bootup on the USB key. Then mount the harddrive of broken machine, this is done easies via Nautilus. Open Nautilus and find the harddrive in the left colon and click on it to mount it.
Open a terminal and venture into the /media directory. Inside /media you should now only find one directory with the UID name of the just mounted harddrive. To get update-initramfs working we need some basic environment setup done before we chroot. Execute the following commands to do that (86b25c37-24d7-44cd-b09d-31669338ea73 is the name of my harddrive where my broken Ubuntu resides):
root@ubuntu:/# cd /media/86b25c37-24d7-44cd-b09d-31669338ea73 root@ubuntu:/media/86b25c37-24d7-44cd-b09d-31669338ea73# mount --bind /dev ./dev root@ubuntu:/media/86b25c37-24d7-44cd-b09d-31669338ea73# mount --bind /proc ./proc root@ubuntu:/media/86b25c37-24d7-44cd-b09d-31669338ea73# mount --bind /sys ./sys root@ubuntu:/media/86b25c37-24d7-44cd-b09d-31669338ea73# chroot .
Now we can finish up the mess the update process left behind:
root@ubuntu:/# apt-get dist-upgrade Reading package lists... Done Building dependency tree Reading state information... Done Calculating upgrade... Done 0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded. 4 not fully installed or removed. After this operation, 0B of additional disk space will be used. Do you want to continue [Y/n]? Can not write log, openpty() failed (/dev/pts not mounted?) Setting up linux-image-2.6.35-22-generic (2.6.35-22.35) ... Running depmod. update-initramfs: Generating /boot/initrd.img-2.6.35-22-generic Not updating initrd symbolic links since we are being updated/reinstalled (2.6.35-22.34 was configured last, according to dpkg) Not updating image symbolic links since we are being updated/reinstalled (2.6.35-22.34 was configured last, according to dpkg) Examining /etc/kernel/postinst.d. run-parts: executing /etc/kernel/postinst.d/dkms 2.6.35-22-generic /boot/vmlinuz-2.6.35-22-generic * dkms: running auto installation service for kernel 2.6.35-22-generic * vboxhost (3.2.10)... [ OK ] run-parts: executing /etc/kernel/postinst.d/initramfs-tools 2.6.35-22-generic /boot/vmlinuz-2.6.35-22-generic run-parts: executing /etc/kernel/postinst.d/nvidia-common 2.6.35-22-generic /boot/vmlinuz-2.6.35-22-generic run-parts: executing /etc/kernel/postinst.d/pm-utils 2.6.35-22-generic /boot/vmlinuz-2.6.35-22-generic run-parts: executing /etc/kernel/postinst.d/update-notifier 2.6.35-22-generic /boot/vmlinuz-2.6.35-22-generic run-parts: executing /etc/kernel/postinst.d/zz-update-grub 2.6.35-22-generic /boot/vmlinuz-2.6.35-22-generic Generating grub.cfg ... Found linux image: /boot/vmlinuz-2.6.35-22-generic Found initrd image: /boot/initrd.img-2.6.35-22-generic Found memtest86+ image: /boot/memtest86+.bin ls: cannot access /casper-rw-backing: No such file or directory ls: cannot access /casper-rw-backing: No such file or directory ls: cannot access /casper-rw-backing: No such file or directory ls: cannot access /casper-rw-backing: No such file or directory ls: cannot access /casper-rw-backing: No such file or directory ls: cannot access /casper-rw-backing: No such file or directory ls: cannot access /casper-rw-backing: No such file or directory Found Windows 7 (loader) on /dev/sda1 Found Windows 7 (loader) on /dev/sda2 done Setting up udev (162-2.1) ... udev start/running, process 19138 update-initramfs: deferring update (trigger activated) Setting up gconf2 (2.31.91-0ubuntu3.1) ... Setting up gnome-settings-daemon (2.32.0-0ubuntu3) ... Processing triggers for initramfs-tools ... update-initramfs: Generating /boot/initrd.img-2.6.35-22-generic root@ubuntu:/#
Now things should be all dandy again and you can reboot out of the live USB environment and into you normal desktop.
If you see something like this:
update-initramfs: Generating /boot/initrd.img-2.6.35-22-generic /usr/sbin/mkinitramfs: 142: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied /usr/sbin/mkinitramfs: 233: cannot create /dev/null: Permission denied ... ... ... ... ...
then you forgot to mount /proc, /dev and /sys before you chroot'ed.