Может быть кому-то будет полезен мой опыт:
Итак, дано: сервер на Е5-2407(2 слота), 16Гб памяти, 2х1Тб в RAID1.
Необходимо: сервер с виртуалками для команды разработчиков.
Выбран Ubuntu Server 12.10 и для гипервизора и для виртуалок потому что у автора больше всего опыта с Ubuntu и автор не админ.
Технологии виртуализации: те, что позиционируются как "стандартные" для Ubuntu, а это kvm+qemu+libvirt.
Хост-гипервизор установлен на 5Гб раздел в LVM (весь диск).
Для виртуалок решено не делать полноценные диски, потому что это затудняет изменение их размера (lvm->таблица разделов виртуалки->ФС виртуалки), а решено делать сразу тома с корневой ФС и обходить BIOS-загрузчик. В Ubuntu lvm thin-provisioning'у не хватает нужных утилит, хотя наделать томов он позволит, поэтому делаем обычные тома (пришлось позорно отступать, подменяя отсутствующие /sbin/thin_check с помощью /bin/true). Тома форматируются сразу в ext4.
На гипервизоре в /vmboot/vmX лежат ядра и initrd для виртуалок.
В описании виртуалки в libvirt указываем пусть к ядру и initrd, указываем LVM том как hda/sda/vda и указываем параметрах ядра где лежит корневая файловая система (root=UUID=abcd-abcd-1234...).
Также пробрасываем /vmboot/vmX как filesystem в виртуалку, в fstab'е которой сказано монтировать этот каталог в свой /boot. Таким образом, если виртуалка обновляет ядро, то оно меняется в /vmboot/vmX и не нужно копировать его вручную.
Все /vmboot/* лежат в отдельном LVM томе.
Таким образом получаем среду, хорошо разбитую на компоненты: том гипервизора, том ядер для VM, тома для VM. Легко бэкапить, легко обновлять, легко изменять размер VM.
Немного деталей:
LVM гипервизора:
$ sudo lvs
LV VG Attr LSize Pool Origin Data% Move Log Copy% Convert
host_root system -wi-ao-- 5.00g
host_swap system -wi-ao-- 4.66g
vmboot system -wi-ao-- 500.00m
appsrv system -wi-a--- 5.00g
jira system -wi-a--- 5.00g
oracle system -wi-a--- 5.00g
template system -wi-a--- 1.00g
Расклад в томах:
$ sudo file -sL /dev/system/*
/dev/system/appsrv: data
/dev/system/host_root: Linux rev 1.0 ext4 filesystem data, UUID=f6ac67b1-c6b0-4fba-8808-1946951a166f, volume name "root_host" (needs journal recovery) (extents) (large files) (huge files)
/dev/system/host_swap: Linux/i386 swap file (new style), version 1 (4K pages), size 1220607 pages, no label, UUID=b132bf9d-325c-4ed5-94eb-36ddf4fb3e78
/dev/system/jira: Linux rev 1.0 ext4 filesystem data, UUID=90ef6a3f-0ac9-4d73-ae9e-6c2cb3a569a1 (extents) (large files) (huge files)
/dev/system/oracle: data
/dev/system/template: Linux rev 1.0 ext4 filesystem data, UUID=33ceecbc-80a6-41f0-9f26-58a8ce9a3912 (extents) (large files) (huge files)
/dev/system/vmboot: Linux rev 1.0 ext4 filesystem data, UUID=3726d98c-580e-45df-8dc4-6179b2d21070 (needs journal recovery) (extents) (huge files)
Определение виртуалки в libvirt (немного порезано):
$ sudo cat /etc/libvirt/qemu/jira.xml
<domain type='kvm'>
...
<os>
<type arch='x86_64' machine='pc-1.2'>hvm</type>
<kernel>/vmboot/jira/vmlinuz-3.5.0-23-generic</kernel>
<initrd>/vmboot/jira/initrd.img-3.5.0-23-generic</initrd>
<cmdline>root=UUID=90ef6a3f-0ac9-4d73-ae9e-6c2cb3a569a1</cmdline>
<boot dev='hd'/>
</os>
<devices>
<disk type='block' device='disk'>
<driver name='qemu' type='raw'/>
<source dev='/dev/system/jira'/>
<target dev='vda' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
</disk>
<filesystem type='mount' accessmode='mapped'>
<driver type='path' wrpolicy='immediate'/>
<source dir='/vmboot/jira'/>
<target dir='boot'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
</filesystem>
...
</domain>
Гипервизор (порезано):
$ cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
...
UUID=3726d98c-580e-45df-8dc4-6179b2d21070 /vmboot ext4 defaults 0 0
Виртуалки (порезано):
$ cat /etc/fstab
# <file system> <mount point> <type> <options> <dump> <pass>
...
#/boot boot 9p trans=virtio,version=9p2000.L 0 0
Кому нужны деатали - отвечу!
Всем удачи.