Virtualization With KVM On Ubuntu 9.10 - Page 3
On this page
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...
vgdisplay
root@server1:~# vgdisplay
--- Volume group ---
VG Name vg0
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 2
Open LV 2
Max PV 0
Cur PV 1
Act PV 1
VG Size 465.29 GB
PE Size 4.00 MB
Total PE 119114
Alloc PE / Size 24079 / 94.06 GB
Free PE / Size 95035 / 371.23 GB
VG UUID hUDyB2-hGR5-T7gI-wxt6-p4Om-PT6l-Bgbi85
root@server1:~#
... 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:
lvdisplay
root@server1:~# lvdisplay
--- Logical volume ---
LV Name /dev/vg0/root
VG Name vg0
LV UUID 5PHWtQ-5XuQ-jgvu-uFrJ-f889-w46a-cIRFcb
LV Write Access read/write
LV Status available
# open 1
LV Size 93.13 GB
Current LE 23841
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:0
--- Logical volume ---
LV Name /dev/vg0/swap_1
VG Name vg0
LV UUID N25s1p-AQWJ-X2WH-FAyA-xlS6-ettD-55ZHE8
LV Write Access read/write
LV Status available
# open 2
LV Size 952.00 MB
Current LE 238
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 252:1
root@server1:~#
I will now create the virtual machine vm3 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/vm3).
mkdir -p ~/vm3/mytemplates/libvirt
cp /etc/vmbuilder/libvirt/* ~/vm3/mytemplates/libvirt/
Make sure that you create all partitions in just one image file, so don't use --- in the vmbuilder.partition file:
vi ~/vm3/vmbuilder.partition
root 8000 swap 2000 /var 10000 |
vi ~/vm3/boot.sh
# This script will run the first time the virtual machine boots # It is ran as root. # Expire the user account passwd -e administrator # Install openssh-server apt-get update apt-get install -qqy --force-yes openssh-server |
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/vm3 with a size of 20GB now:
lvcreate -L20G -n vm3 vg0
We can now create the new VM as follows (please note the --raw=/dev/vg0/vm3 switch!):
cd ~/vm3/
vmbuilder kvm ubuntu --suite=karmic --flavour=virtual --arch=amd64 --mirror=http://192.168.0.100:9999/ubuntu -o --libvirt=qemu:///system --tmpfs=- --ip=192.168.0.103 --part=vmbuilder.partition --raw=/dev/vg0/vm3 --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=boot.sh --mem=256 --hostname=vm3 --bridge=br0
You can now use virsh to manage the VM:
virsh --connect qemu:///system
Run the define command first...
define /etc/libvirt/qemu/vm3.xml
... before you start the VM:
start vm3
7 Links
- KVM (Ubuntu Community Documentation): https://help.ubuntu.com/community/KVM
- vmbuilder: https://help.ubuntu.com/community/JeOSVMBuilder
- JeOS and vmbuilder: http://doc.ubuntu.com/ubuntu/serverguide/C/jeos-and-vmbuilder.html
- Ubuntu: http://www.ubuntu.com/