77

Upon trying to upgrade from 10.10 to 11.04 all seemed to go well until the restart. This error message is what comes up:

Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)

How do we fix that?

65

You are missing the initramfs for that kernel. Choose another kernel from the GRUB menu under Advanced options for Ubuntu and run sudo update-initramfs -u -k version to generate the initrd for version (replace version with the kernel version string such as 4.15.0-36-generic) then sudo update-grub.

  • 2
    what if the kernel panic is being shown when selecting the unique kernel option that exists for that OS (in a multi-boot scenario), how does one go to launch update-initramfs? – knocte Jan 29 '14 at 9:04
  • 3
    @Dew, poor comment... – psusi Jan 29 '14 at 14:06
  • 2
    @knocte, See Tomeu Roig's answer. – psusi Jan 29 '14 at 14:07
  • 1
    It looks like poor answer but it's the truth! – user3215 May 2 '14 at 16:56
  • 2
    I cannot enter Ubuntu System or Recovery Mode, how can I execute that command to test whether it works? – Kin Jul 16 '16 at 9:54
48

Start with a livecd, open a a terminal

sudo fdisk -l
sudo mount /dev/sdax /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /dev/pts /mnt/dev/pts
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
sudo chroot /mnt 

and now you can make update-initramfs and update-grub without errors.

update-initramfs -u -k 2.6.38-8-generic (or your version)

If you don't know your version. Use:

dpkg --list | grep linux-image

And just update Grub.

update-grub2

Reboot your system.

  • 1
    I have added sudo mount --bind /dev/pts /mnt/dev/pts and sudo mount --bind /sys /mnt/sys in my edit; without this, update-grub2 complained. – Hbf Nov 8 '12 at 15:51
  • 4
    how can I found out the exact version? – knocte Jan 29 '14 at 9:05
  • 1
    None of the mount points exist beyond the first one /dev/sdax if you're using EFI. – Paul Gregoire Jul 28 '14 at 14:36
  • @knocte try ls /mnt/boot and look for the latest kernel version. Or if you want to do it properly, read the menuentry 'Ubuntu' from /mnt/boot/grub/grub.cfg – Ciro Santilli 新疆改造中心996ICU六四事件 Oct 1 '15 at 7:10
  • Worked on Ubuntu 14.04! The initrd was missing from /boot. The question is: how is it possible that the file simply disappeared? I did nothing that seemed dangerous. – Ciro Santilli 新疆改造中心996ICU六四事件 Oct 1 '15 at 7:11
19

In my situation the problem was that /boot was at 100% capacity, so the last 2 kernel updates had not completed successfully, hence on reboot when GRUB2 selected the latest Kernel, it failed.

I resolved the issue by booting into the oldest kernel installed, and removing some unused kernels using aptitude. By using aptitude, after the uninstall had happened, dpkg automatically tried to configure the broken packages, and this time succeeded.

  • 3
    This was the closest to my solution; just running dpkg --configure -a was enough to trigger the update-initramfs hook, and fix the broken kernel. – Symmetric May 11 '13 at 19:44
  • You mean you had a separate /boot partition is that it? – Ciro Santilli 新疆改造中心996ICU六四事件 Oct 1 '15 at 7:00
  • It was a server set up prior to my arrival, and it was configured with /boot on it's own partition and unattended-upgrades – sheepeatingtaz Oct 1 '15 at 14:24
  • 3
    You can use sudo apt-get autoremove to remove old kernels in case your running out of space on /boot. – Florian Brucker Jul 21 '16 at 5:42
  • I booted into an older kernel, did a sudo apt-get autoremove, rebooted again (older kernel), then did a sudo apt-get dist-upgrade, and this worked. This was on a small test machine I have. Same issue though, 100% /boot – jmlumpkin May 23 '18 at 2:51
13

In case this happened after an aborted kernel update (e.g. system crash while aptitude safe-upgrade),

  1. boot with an older kernel and
  2. run dpkg --configure -a.

This will complete the upgrade, including configuring the boot settings as psusi explains.

0

In addition to Tomeu's instructions, before chroot I needed to:

sudo mount --bind /dev /mnt/dev

Additionally, after the chroot:

cp -r /usr/lib/i386-linux-gnu/pango /usr/lib/

(Got this from here.)

  • 1
    Tomeu already mentioned mounting /dev on /mnt/dev. – Lekensteyn Oct 16 '11 at 8:59
0

You can also boot the server in rescue mode, and reinstall only the grub

http://info.w3calculator.com/free-code/linux/recover-from-corrupted-boot-image/

  • link was dead.. – John Joe Apr 24 '18 at 16:24
0

I got this problem due to my /boot partition was full so my kernel updates had failed. I managed to fix this by booting from an old kernel in the GRUB menu.

When managed to boot I began purging old kernels, but I had manage to get some dependency issues so first I had to uninstall linux-server package

apt-get remove linux-server
apt-get update
apt-get -f install
apt-get upgrade

Then I rebooted and everything was working fine!

0

The kernel boot messages tell you which disks you can use

For example, if in my test Linux 4.17 virtual machine setup I replace the correct root=/dev/vda with root=/dev/vdb the last message is:

---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)-

However, a few lines above, it shows messages of type:

VFS: Cannot open root device "vdb" or unknown-block(0,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
fe00          524288 vda
 driver: virtio_blk

which basically tells me straight out that vdb was not found, but that there is a /dev/vda which can be read due to the virtio_blk driver (CONFIG_VIRTIO_BLK=y).

protected by Community Sep 22 '15 at 11:24

Thank you for your interest in this question. Because it has attracted low-quality or spam answers that had to be removed, posting an answer now requires 10 reputation on this site (the association bonus does not count).

Would you like to answer one of these unanswered questions instead?

Not the answer you're looking for? Browse other questions tagged or ask your own question.