Kernel panic — "VFS: Unable to mount root fs on unknown-block(0,0)"
The kernel loaded but could not mount the root filesystem, usually because the initramfs does not contain the driver needed to see the disk.
What you see
Boot stops at a kernel panic naming unknown-block(0,0). Often immediately after a kernel update, a disk controller change, or a migration to different virtual hardware.
What is actually wrong
A missing or broken initramfs, a root= parameter naming a device that no longer exists, or an initramfs built without the storage or LVM modules this hardware needs.
Codes and articles
Fixes (2)
Boot the previous kernel and rebuild the new one's initramfs
It started after a kernel update and an older kernel is still installed.
At the GRUB menu choose Advanced options and select the previous kernel. Hold Shift or press Esc during boot if the menu is hidden.
Once booted, confirm which kernel you are on and which are installed.
uname -rls /boot/vmlinuz-*
Check the broken kernel's initramfs exists and is a sensible size.
ls -lh /boot/initramfs-* /boot/initrd.img-* 2>/dev/nullA zero-length or missing initramfs is a common result of a kernel update that ran out of space in /boot, and it produces exactly this panic.
Check /boot has room, and clear old kernels if not.
df -h /bootRebuild it. On RHEL-family:
sudo dracut -f /boot/initramfs-$(uname -r).img $(uname -r)On Debian-family:
sudo update-initramfs -c -k allsudo update-grub
Reboot into the newer kernel.
uname -rRebuild the initramfs with all drivers from a rescue environment
Hardware or the virtual platform changed, so the initramfs lacks the driver for the new controller.
Boot rescue media matching the distribution and version.
Find and mount the root filesystem, activating LVM first if it is used.
lsblk -fsudo vgchange -aysudo mount /dev/mapper/vg-root /mnt
Mount /boot and the EFI partition if separate.
sudo mount /dev/sda1 /mnt/bootsudo mount /dev/sda2 /mnt/boot/efi
Bind the virtual filesystems and chroot in.
for d in dev proc sys run; do sudo mount --bind /$d /mnt/$d; donesudo chroot /mnt /bin/bash
Rebuild the initramfs with every driver rather than the host-only subset.
dracut -f --no-hostonly --add-drivers 'virtio_blk virtio_scsi virtio_pci ahci nvme' /boot/initramfs-$(ls /lib/modules | tail -1).img $(ls /lib/modules | tail -1)--no-hostonly builds a generic initramfs that carries drivers for hardware this machine does not currently have. It is larger and it boots on platforms the host-only build cannot see.
On Debian-family, set MODULES=most in /etc/initramfs-tools/initramfs.conf, then rebuild.
update-initramfs -c -k all && update-grubConfirm root= in the GRUB config matches a device that exists.
grep -E 'linux|root=' /boot/grub2/grub.cfg | headblkid
Exit, unmount and reboot.
exitsudo umount -R /mntsudo reboot
systemctl is-system-runningRelated faults
Where this stops. This write-up was written and checked by hand. It says what each step changes, how to confirm it worked and how to reverse it, and anything destructive is flagged before you reach it. If it does not match what your machine is doing, search the Support Centre for the exact code or message — and when something needs a person, get in touch.