Virtio block device is a para-virtualized device for kvm guest. It is different from normal emulated hard drive, because it is simply faster. This small how-to is about how to make a disk para-virtualized and boot from it.
- create a disk and install os to it by appending "-hda <your_disk_image>" to your virtual machine
- in your guest os, upgrade kernel to 2.6.25 which contains virtio_* drivers. or ubuntu 8.04 also has it.
- in guest os, change /boot/grub/device.map from "(hd0) /dev/sda" to "(hd0) /dev/vda"
- in guest os, change /boot/grub/menu.list from "root=/dev/sda1" to "root=/dev/vda1", if you are using UUID, then no need to do this step.
- enable para-virtualization by changing "-hda <your_disk_image" to "-drive file=<your_disk_image>,if=virtio,boot=on"
you may experience this error while grub is booting. I solved it by making the /boot the first partition and make it 32MB.
I have problem to boot from qcow2 format image, it will hang while kernel booting. you may convert your disk image to raw format by "qemu-img convert -f qcow2 <your_disk_image> -O raw <a_new_location>".
Booting with lilo
You must add this to your lilo.conf:
boot=/dev/vda disk=/dev/vda bios=0x80 max-partitions=7
and after your image clausule change:
where vda1 is your boot partition
Updating the initramfs with the virtio driver
If you are using debian then you may want to update your initramfs with the virtio driver as explained in Using VirtIO NIC