I recently installed Xen on a Debian Lenny amd64 box, and found that the Xen kernel would not boot, failing to mount the root filesystem:
No filesystem could mount root, tried: Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
I noticed in /boot/grub/menu.lst that the standard Debian kernel included an initrd image, whereas the Xen kernel didn’t:
# This is the Xen kernel that fails to boot: title Xen 3.2-1-amd64 / Debian GNU/Linux, kernel 2.6.26-2-xen-amd64 root (hd0,0) kernel /boot/xen-3.2-1-amd64.gz module /boot/vmlinuz-2.6.26-2-xen-amd64 root=/dev/sda1 ro console=tty0 # This is the standard kernel that does boot: title Debian GNU/Linux, kernel 2.6.26-2-amd64 root (hd0,0) kernel /boot/vmlinuz-2.6.26-2-amd64 root=/dev/sda1 ro quiet initrd /boot/initrd.img-2.6.26-2-amd64
To get the Xen kernel working, I needed to create an initrd image, with:
dave@devvps:/boot$ sudo update-initramfs -c -k 2.6.26-2-xen-amd64 update-initramfs: Generating /boot/initrd.img-2.6.26-2-xen-amd64
Then update the Xen kernel’s entry in /boot/grub/menu.lst appropriately:
title Xen 3.2-1-amd64 / Debian GNU/Linux, kernel 2.6.26-2-xen-amd64 root (hd0,0) kernel /boot/xen-3.2-1-amd64.gz module /boot/vmlinuz-2.6.26-2-xen-amd64 root=/dev/sda1 ro console=tty0 module /boot/initrd.img-2.6.26-2-xen-amd64
Upon rebooting, the Xen kernel boots succesfully, and Xen appears to be working:
dave@devvps:~$ sudo xm list Name ID Mem VCPUs State Time(s) Domain-0 0 24106 8 r----- 22.4
So, if you’ve installed a Xen kernel on Debian, remember to create an initrd image. I’m fairly surprised that this doesn’t happen automatically when the kernel is installed, actually.