I'm still experimenting with Ubuntu 8.04 Server (Hardy Heron), and have switched from Xen to KVM (Kernel-based Virtual Machine). Xen worked well on a little test machine I had, but when I tried it on a brand-new Supermicro server, it turned out to have a problem with the Intel NIC. Since it seems Ubuntu is recommending KVM over Xen, and the server supports hardware virtualization, I figured I'd give it a try.
One big difference is that KVM does full emulation, which means any disk space you give it from LVM (Logical Volume Manager), will be a full virtual disk, with a partition table. It's a little more complicated to access filesystems within the virtual disk that it was with Xen, I wanted to jot some notes down here mostly for myself on how to do that.
If I've created a logical volume named
/dev/myvg/test_vm and installed another linux on it with a single ext3 filesystem (/dev/sda1 from the point of view of the VM) and some swap space (/dev/sda5), it can be accessed when the VM isn't running with the help of the
kpartx -av /dev/myvg/test_vm
would read the partition table on the virtual disk and create:
/dev/mapper/myvg-test_vm1 /dev/mapper/myvg-test_vm2 /dev/mapper/myvg-test_vm5
Then you can
mount /dev/mapper/myvg-test_vm1 /mnt
to mess with the VMs
/dev/sda1. To clean things up when finished, run:
umount /mnt kpartx -d /dev/myvg/test_vm
If you want to look at the contents of a running VM's disks (perhaps for backing it up) you can use LVM snapshots. For example:
lvcreate --snapshot --size 1G --name test_snap /dev/myvg/test_vm kpartx -av /dev/myvg/test_snap mount /dev/mapper/myvg-test_snap1 /mnt . (play with VM's /dev/sda1 in /mnt) . umount /mnt kpartx -dv /dev/myvg/test_snap lvremove /dev/myvg/test_snap