Virtualization With KVM On Ubuntu 12.04 LTS - Page 3
6 Creating An LVM-Based VM
LVM-based VMs have some advantages over image-based VMs. They are not as heavy on hard disk IO, and they are easier to back up (using LVM snapshots).
To use LVM-based VMs, you need a volume group that has some free space that is not allocated to any logical volume. In this example, I use the volume group /dev/vg0 with a size of approx. 465GB...
... that contains the logical volumes /dev/vg0/root with a size of approx. 100GB and /dev/vg0/swap_1 with a size of 1GB - the rest is not allocated and can be used for VMs:
I will now create the virtual machine vm5 as an LVM-based VM. We can use the vmbuilder command again. vmbuilder knows the --raw option which allows to write the VM to a block device (e.g. /dev/vg0/vm5) - I've tried this, and it gave back no errors, however, I was not able to boot the VM (start vm5 didn't show any errors either, but I've never been able to access the VM). Therefore, I will create vm5 as an image-based VM first and then convert it into an LVM-based VM.
mkdir -p /var/lib/libvirt/images/vm5/mytemplates/libvirt
Make sure that you create all partitions in just one image file, so don't use --- in the vmbuilder.partition file:
As you see from the vmbuilder.partition file, the VM will use a max. of 20GB, so we create a logical volume called /dev/vg0/vm5 with a size of 20GB now:
lvcreate -L20G -n vm5 vg0
Don't create a file system in the new logical volume!
We will use the qemu-img command to convert the image to an LVM-based VM.
Now we go to the VM's ubuntu-kvm/ directory...
... and find out how our image is named:
root@server1:/var/lib/libvirt/images/vm5/ubuntu-kvm# ls -l
Now that we know the name of our image (tmpN27tbO.qcow2), we can convert it as follows:
qemu-img convert tmpesHsUI.qcow2 -O raw /dev/vg0/vm5
Afterwards you can delete the disk image:
rm -f tmpesHsUI.qcow2
Now we must modify the VM's configuration...
virsh edit vm5
... and change the following section...
... so that it looks as follows:
You can now use virsh to manage the VM:
virsh --connect qemu:///system
Because we have modified the VM's XML file, we must run the define command first...
... before we start the VM: