Библиотека сайта rus-linux.net
Ошибка базы данных: Table 'a111530_forumnew.rlf1_users' doesn't exist
Виртуализация в Ubuntu 9.10 с помощью KVM
Оригинал: "Virtualization With KVM On Ubuntu 9.10"Автор: Falko Timme
Дата публикации: 16/12/2009
Перевод: Н.Ромоданов
Дата перевода: 14 апреля 2010 г.
В настоящем руководстве объясняется, как устанавливать и использовать KVM для создания и запуска виртуальных машин на сервере Ubuntu 9.10. Я покажу, как создавать виртуальные машины, в которых используется образ диска, а также виртуальные машины, в которых используются логические тома (LVM). KVM является сокращением названия Kernel-based Virtual Machine (виртуальная машина, создаваемая на базе ядра системы) и использует аппаратные средства виртуализации, т.е. у вас должен быть процессор, который аппаратно поддерживает виртуализацию, например, Intel VT или AMD-V.
Я не гарантирую, что это будет работать у вас!
1. Предварительные замечания
В качестве хоста для KVM , я использую машину с именем (hostname) server1.example.com и IP адресом 192.168.0.100.
Поскольку все шаги настоящего руководства мы делать с правами пользователя root, нужно либо предварять каждую команду префиксом sudo, либо мы можем сразу набрать следующую команду:
sudo su
2. Установка KVM и vmbuilder
egrep '(vmx|svm)' --color=always /proc/cpuinfoдолжна выдать результат, похожий на следующий:
Если ничего не будет выдано, то это означает, что ваш процессор не поддерживает аппаратную виртуализацию, и вы должны здесь остановиться.
Для того, чтобы установить KVM и vmbuilder (скрипт, который создает виртуальную машину на базе Ubuntu), мы запустим следующую команду
aptitude install ubuntu-virt-server python-vm-builder
Общий тип конфигурации почтового сервера:
General type of mail configuration: <-- Internet Site
Системное имя почтового сервера:
System mail name: <-- server1.example.com
Затем вам следует добавить пользователя в группу libvirtd, поскольку сейчас вы находитесь в системе с правами root:
adduser `id -un` libvirtd
Чтобы принадлежность к группе вступила в силу, вы должны сначала выйти из сеанса, а затем снова зайти.
Для того, чтобы проверить, удастся ли успешно установить KVM, запустите следующую команду:
virsh -c qemu:///system list
Вы должны получить результат, похожий на следующий:
root@server1:~# virsh -c qemu:///system list Connecting to uri: qemu:///system Id Name State ---------------------------------- root@server1:~#
Если вместо этого будет выдана ошибка, то это означает, что что-то не так.
Затем нам нужно настроить на нашем сервере сетевой мост с тем, чтобы наши виртуальные машины могли быть доступными из других узлов, как если бы они были физическими системами в сети.
Для того, чтобы сделать это, вы должны установить пакет bridge-utils...
aptitude install bridge-utils
... и сконфигурировать мост. Открываем /etc/network/interfaces:
vi /etc/network/interfaces
Перед модификацией мой файл имел следующий вид:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet static address 192.168.0.100 netmask 255.255.255.0 network 192.168.0.0 broadcast 192.168.0.255 gateway 192.168.0.1
После изменения он стал выглядеть следующим образом:
# This file describes the network interfaces available on your system # and how to activate them. For more information, see interfaces(5). # The loopback network interface auto lo iface lo inet loopback # The primary network interface auto eth0 iface eth0 inet manual auto br0 iface br0 inet static address 192.168.0.100 network 192.168.0.0 netmask 255.255.255.0 broadcast 192.168.0.255 gateway 192.168.0.1 bridge_ports eth0 bridge_fd 9 bridge_hello 2 bridge_maxage 12 bridge_stp off
Удостоверьтесь, что используете правильные настройки вашей сети!
Перезапустите сеть...
/etc/init.d/networking restart
... и запустите
ifconfig
Настройка сетевого моста (br0) должна выглядеть следующим образом:
root@server1:~# ifconfig br0 Link encap:Ethernet HWaddr 00:1e:90:f3:f0:02 inet addr:192.168.0.100 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:14 errors:0 dropped:0 overruns:0 frame:0 TX packets:18 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:1046 (1.0 KB) TX bytes:1560 (1.5 KB) eth0 Link encap:Ethernet HWaddr 00:1e:90:f3:f0:02 inet6 addr: fe80::21e:90ff:fef3:f002/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:21971 errors:0 dropped:0 overruns:0 frame:0 TX packets:11749 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:32162163 (32.1 MB) TX bytes:948375 (948.3 KB) Interrupt:28 Base address:0x8000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) virbr0 Link encap:Ethernet HWaddr 72:64:57:c0:b0:03 inet addr:192.168.122.1 Bcast:192.168.122.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) root@server1:~#
3. Создание виртуальной машины, использующей образ диска
Теперь мы можем создать нашу первую виртуальную машину — виртуальную машину, использующую образ жесткого диска (если предполагается, что через вашу виртуальную машину будет проходить большой трафик или в нем будет выполняться большой объем операций чтения и записи, то используйте виртуальную машину, использующую LVM, - виртуальная машина, использующая образ жесткого диска, очень медленно выполняет ввод/вывод на жесткий диск).
Мы будет создавать новый директорий для каждой виртуальной машины, которую мы хотим создать, например, ~/vm1, ~/vm2, ~/vm3, и так далее, поскольку в каждая виртуальная машина будет иметь поддиректорий, называемый ubuntu-kvm, и, естественно, в каждом отдельном директории, например, в ~/vm1, может быть только один такой поддиректорий. Если вы, например, попытаетесь в ~/vm1 создать вторую виртуальную машину, вы получите сообщение об ошибке, говорящее, что ubuntu-kvm уже существует (если вы, конечно, не запустите vmbuilder с аргументом --dest=DESTDIR):
root@server1:~/vm1# vmbuilder kvm ubuntu -c vm2.cfg 2009-05-07 16:32:44,185 INFO Cleaning up ubuntu-kvm already exists root@server1:~/vm1#
Для создания виртуальных машин мы будем использовать инструментальное средство vmbuilder (о скрипте vmbuilder вы можете больше узнать по следующей ссылке). Скрипт vmbuilder использует шаблон для создания виртуальных машин — этот шаблон расположен в директории /etc/vmbuilder/libvirt/. Сначала создаем копию:
mkdir -p ~/vm1/mytemplates/libvirt cp /etc/vmbuilder/libvirt/* ~/vm1/mytemplates/libvirt/
Теперь мы создаем разделы для вашей виртуальной машины (разделы жесткого диска -прим.пер.). Мы создаем файл, называемый vmbuilder.partition...
vi ~/vm1/vmbuilder.partition
... и создаем нужные разделы следующим образом:
root 8000 swap 4000 --- /var 20000
Здесь задается корневой раздел root (/) размером в 8000MB, раздел подкачки swap размером в 4000 Мб и раздел /var размером в 20000MB. Строка --- указывает, что следующий раздел (/var в данном примере) находится на отдельном образе диска (т.е., здесь должны быть созданы два диска — один для корневого раздела и раздела подкачки и второй диск для раздела /var). Конечно, вы можете задавать разделы так, как вам нравится (после того, как зададите корневой раздел и раздел подкачки), и, конечно, все они могут находиться на одном образе диска - это только пример.
Я хочу установить на виртуальной машине сервер openssh. Для ттого, чтобы обеспечить, что каждая виртуальная машина получила бы уникальный ключ OpenSSH , мы не должны устанавливать сервер openssh каждый раз, когда мы создаем виртуальную машину. Поэтому мы создадим скрипт boot.sh, который будет выполняться, когда виртуальная машина загружается первый раз. Скрипт будет устанавливать сервер openssh (с уникальным ключом), а также предлагать пользователю изменить пароль, когда он входит в систему первый раз (по умолчанию я буду использовать имя пользователя administrator и с паролем howtoforge):
vi ~/vm1/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
Более подробную информацию вы можете найти по ссылке: https://help.ubuntu.com/community/JeOSVMBuilder#First%20boot.
Вы также можете сделать скрипт "first login" ("Первый вход в систему") так, как это описано по следующей ссылке: https://help.ubuntu.com/community/JeOSVMBuilder#First%20login.
Всякий раз, когда скрипт vmbuilder создает новую виртуальную машину, он должен загрузить с "зеркала" Ubuntu все пакеты, на что потребуется некоторое время. Для того, чтобы ускорить процесс, мы установим прокси apt-proxy...
aptitude install apt-proxy
... который кеширует все сгруженные пакеты, так что последующие установки виртуальных машин будут происходить значительно быстрее.
Теперь откроем файл /etc/apt-proxy/apt-proxy-v2.conf...
vi /etc/apt-proxy/apt-proxy-v2.conf
... и заменим "зеркало" Ubuntu, используемое по умолчанию, тем, что ближе к вам (например, http://de.archive.ubuntu.com/ubuntu, если вы находитесь в Германии):
[...] [ubuntu] ;; Ubuntu archive backends = http://de.archive.ubuntu.com/ubuntu min_refresh_delay = 15m [...]
Затем перезапустим apt-proxy:
/etc/init.d/apt-proxy restart
apt-proxy слушает порт 9999, так что мы можем задать наше локальное "зеркало" apt-proxy как параметр скрипта vmbuilder.
Теперь запустим команду
vmbuilder kvm ubuntu --help
И посмотрим, какие параметры допустимы.
Для того, чтобы создать нашу первую виртуальную машину vm1, мы переходим в директорий виртуальной машины ...
cd ~/vm1/
... и запускаем скрипт vmbuilder, например, следующим образом:
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.101 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=boot.sh --mem=256 --hostname=vm1 --bridge=br0
Большинство параметров понятны сами по себе. Параметр --part указывает на файл с подробным описанием разделов, путь указывается относительно нашего рабочего директория (именно поэтому перед запуском vmbuilder нам пришлось перейти в директорий нашей виртуальной машины), параметр --templates указывает на директорий, в котором находится файл шаблона (опять же относительно нашего рабочего директория) и параметр --firstboot указывает на скрипт firstboot. Параметр <nobrake>--libvirt=qemu:///system<nobrake> указывает KVM добавить эту виртуальную машину в список имеющихся виртуальных машин. Параметр --addpkg позволяет указать пакеты Ubuntu, которые вы хотите установить в процессе создания виртуальной машины (смотрите приведенное ранее объяснение, почему вам не следует добавлять сервер openssh в этот список и нужно вместо этого воспользоваться скриптом firstboot). Параметр --bridge указывает сетевой мост; мы здесь указываем сетевой мост br0, который создали во втором разделе.
В строке --mirror я указал мое локальное прокси зеркало apt-proxy (http://192.168.0.100:9999/ubuntu) - я использовал свой общедоступный IP адрес вместо указания localhost или 127.0.0.1, поскольку это зеркало будет использоваться в файле /etc/apt/sources.list виртуальной машины и, конечно, виртуальная машина не сможет подключиться к адресу 127.0.0.1 на хосте. Конечно, вы можете в --mirror также указать официальный репозиторий Ubuntu, например, http://de.archive.ubuntu.com/ubuntu. Если не указывать параметр --mirror, то будет использоваться репозитарий Ubuntu, используемый по умолчанию (http://archive.ubuntu.com/ubuntu).
Процесс создания может занять несколько минут.
После этого в директории /etc/libvirt/qemu/ вы обнаружите конфигурационный файл в формате XML(=> /etc/libvirt/qemu/vm1.xml):
ls -l /etc/libvirt/qemu/ root@server1:~/vm1# ls -l /etc/libvirt/qemu/ total 8 drwxr-xr-x 3 root root 4096 2009-12-16 15:34 networks -rw------- 1 root root 1111 2009-12-16 15:49 vm1.xml root@server1:~/vm1#
Образы дисков расположены в поддиректории ubuntu-kvm/ директория вашей виртуальной машины:
ls -l ~/vm1/ubuntu-kvm/ root@server1:~/vm1# ls -l ~/vm1/ubuntu-kvm/ total 418072 -rw-r--r-- 1 root root 336068608 2009-12-16 15:48 disk0.qcow2 -rw-r--r-- 1 root root 92274688 2009-12-16 15:49 disk1.qcow2 root@server1:~/vm1#
4. Создание второй виртуальной машины
Если вы хотите создать вторую виртуальную машину (vm2), то выполните следующую короткую последовательность команд:
mkdir -p ~/vm2/mytemplates/libvirt cp /etc/vmbuilder/libvirt/* ~/vm2/mytemplates/libvirt/ vi ~/vm2/vmbuilder.partition vi ~/vm2/boot.sh cd ~/vm2/ 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.102 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=boot.sh --mem=256 --hostname=vm2 --bridge=br0
Пожалуйста, обратите внимание на то, что вы не должны создавать новый директорий для виртуальной машины (~/vm2) в том случае, если вы передаете аргумент --dest=DESTDIR в команду vmbuilder — это позволит вам создать виртуальную машину в том же самом директории, в котором вы уже создали другую виртуальную машину. В этом случае вам не нужны новые файлы vmbuilder.partition и boot.sh files и не требуется изменять шаблон; вы можете просто воспользоваться уже существующими файлами:
cd ~/vm1/ 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.102 --part=vmbuilder.partition --templates=mytemplates --user=administrator --name=Administrator --pass=howtoforge --addpkg=vim-nox --addpkg=unattended-upgrades --addpkg=acpid --firstboot=boot.sh --mem=256 --hostname=vm2 --bridge=br0 --destdir=vm2-kvm
5. Управление виртуальными машинами
Виртуальными машинами можно управлять с помощью утилиты virsh - "virtual shell" (прим. переводчика: "виртуальная оболочка", о ней рассказывалось в одной из предыдщих статей, опубликованных на нашем сайте). Для того, чтобы подключиться к виртуальной оболочке, запустите следующую команду:
virsh --connect qemu:///system
Виртуальная оболочка выглядит следующим образом:
root@server1:~/vm2# virsh --connect qemu:///system Connecting to uri: qemu:///system Welcome to virsh, the virtualization interactive terminal. Type: 'help' for help with commands 'quit' to quit virsh #
Теперь вы можете набирать команды в виртуальной оболочке для того, чтобы можно было управлять вашими виртуальными машинами. Запустите команду
help
которая выдаст список допустимых команд:
virsh # help Commands: help print help attach-device attach device from an XML file attach-disk attach disk device attach-interface attach network interface autostart autostart a domain capabilities capabilities cd change the current directory connect (re)connect to hypervisor console connect to the guest console create create a domain from an XML file start start a (previously defined) inactive domain destroy destroy a domain detach-device detach device from an XML file detach-disk detach disk device detach-interface detach network interface define define (but don't start) a domain from an XML file domid convert a domain name or UUID to domain id domuuid convert a domain name or id to domain UUID dominfo domain information domname convert a domain id or UUID to domain name domstate domain state domblkstat get device block stats for a domain domifstat get network interface stats for a domain domxml-from-native Convert native config to domain XML domxml-to-native Convert domain XML to native config dumpxml domain information in XML edit edit XML configuration for a domain find-storage-pool-sources discover potential storage pool sources find-storage-pool-sources-as find potential storage pool sources freecell NUMA free memory hostname print the hypervisor hostname list list domains migrate migrate domain to another host net-autostart autostart a network net-create create a network from an XML file net-define define (but don't start) a network from an XML file net-destroy destroy a network net-dumpxml network information in XML net-edit edit XML configuration for a network net-list list networks net-name convert a network UUID to network name net-start start a (previously defined) inactive network net-undefine undefine an inactive network net-uuid convert a network name to network UUID iface-list list physical host interfaces iface-name convert an interface MAC address to interface name iface-mac convert an interface name to interface MAC address iface-dumpxml interface information in XML iface-define define (but don't start) a physical host interface from an XML file iface-undefine undefine a physical host interface (remove it from configuration) iface-edit edit XML configuration for a physical host interface iface-start start a physical host interface (enable it / "if-up") iface-destroy destroy a physical host interface (disable it / "if-down") nodeinfo node information nodedev-list enumerate devices on this host nodedev-dumpxml node device details in XML nodedev-dettach dettach node device from its device driver nodedev-reattach reattach node device to its device driver nodedev-reset reset node device nodedev-create create a device defined by an XML file on the node nodedev-destroy destroy a device on the node pool-autostart autostart a pool pool-build build a pool pool-create create a pool from an XML file pool-create-as create a pool from a set of args pool-define define (but don't start) a pool from an XML file pool-define-as define a pool from a set of args pool-destroy destroy a pool pool-delete delete a pool pool-dumpxml pool information in XML pool-edit edit XML configuration for a storage pool pool-info storage pool information pool-list list pools pool-name convert a pool UUID to pool name pool-refresh refresh a pool pool-start start a (previously defined) inactive pool pool-undefine undefine an inactive pool pool-uuid convert a pool name to pool UUID pwd print the current directory quit quit this interactive terminal reboot reboot a domain restore restore a domain from a saved state in a file resume resume a domain save save a domain state to a file schedinfo show/set scheduler parameters dump dump the core of a domain to a file for analysis shutdown gracefully shutdown a domain setmem change memory allocation setmaxmem change maximum memory limit setvcpus change number of virtual CPUs suspend suspend a domain ttyconsole tty console undefine undefine an inactive domain uri print the hypervisor canonical URI vol-create create a vol from an XML file vol-create-from create a vol, using another volume as input vol-create-as create a volume from a set of args vol-clone clone a volume. vol-delete delete a vol vol-dumpxml vol information in XML vol-info storage vol information vol-list list vols vol-path convert a vol UUID to vol path vol-name convert a vol UUID to vol name vol-key convert a vol UUID to vol key vcpuinfo domain vcpu information vcpupin control domain vcpu affinity version show version vncdisplay vnc display virsh #
Команда
list
выдает список всех работающих виртуальных машин;
list --all
выдает список всех машин, в том числе и неактивных:
virsh # list --all Id Name State ---------------------------------- - vm1 shut off - vm2 shut off virsh #
Прежде, чем вы первый раз запустите новую виртуальную машину, вы должны определить ее в файле xml (расположен в директории /etc/libvirt/qemu/):
define /etc/libvirt/qemu/vm1.xml
Пожалуйста, запомните, что всякий раз, когда вы изменяете xml файл виртуальной машины,
расположенный в директории /etc/libvirt/qemu/, вы должны еще раз запустить команду define
!
Теперь вы можете запустить виртуальную машину:
start vm
Через несколько секунд вы сможете подключиться к виртуальной машине с помощью клиента SSH, такого как PuTTY; войдите в систему с логином и паролем, используемыми по умолчанию. После того, как вы первый раз войдете в систему, вам будет предложено сменить пароль.
list
должно быть видно, что виртуальная машина работает:
virsh # list Id Name State ---------------------------------- 1 vm1 running virsh #
Для того, чтобы остановить виртуальную машину, выполните следующую команду:
shutdown vm1
Для того, чтобы немедленно остановить ее (отключить шнур питания), выполните команду:
destroy vm1
Приостановка работы виртуальной машины:
suspend vm1
Возобновление работы виртуальной машины:
resume vm1
Это наиболее важные команды.
Наберите
quit
для того, чтобы выйти из виртуальной оболочки.
6. Создание виртуальной машины на базе LVM
Виртуальные машины, использующие LVM, имеют некоторые преимущества перед виртуальными машинами, использующими образы виртуальных дисков. Они не столь медленно работают с операциями ввода/вывода на жесткий диск, и для них проще делать резервные копии (используются мгновенные снимки состояния LVM).
Для того, чтобы создать виртуальную машину, использующую LVM, вам нужна группа томов, на которых есть немного свободного пространства, которое не распределено под какой-либо логический том. В настоящем примере я использую группу томов /dev/vg0 размером приблизительно 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:~#
… который содержит логические тома /dev/vg0/root размером приблизительно 100GB и /dev/vg0/swap_1 размером 1GB — оставшаяся часть не распределена и может использоваться для виртуальных машин:
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:~#
Сейчас я создаю виртуальную машину vm3, которая использует LVM. Мы снова можем воспользоваться командой vmbuilder. В этой команде есть параметр --raw, который позволяет виртуальной машине делать записи на блочное устройство (например, /dev/vg0/vm3).
mkdir -p ~/vm3/mytemplates/libvirt cp /etc/vmbuilder/libvirt/* ~/vm3/mytemplates/libvirt/
Удостоверьтесь, что вы создали все разделы только на одном образе диска, так что в файле vmbuilder.partition не используйте строку ---:
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
Как указано в файле vmbuilder.partition, виртуальная машина будет использовать максимум 20GB, поэтому мы создаем логический том размером в 20GB, называемый /dev/vg0/vm3:
lvcreate -L20G -n vm3 vg0
Мы можем теперь создать новую виртуальную машину следующим образом (пожалуйста, обратите внимание на переключатель --raw=/dev/vg0/vm3):
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
Теперь вы можете воспользоваться утилитой virsh для управления виртуальной машиной:
virsh --connect qemu:///system
Сначала запустите команду define ...
define /etc/libvirt/qemu/vm3.xml
... перед тем, как запустить виртуальную машину:
start vm3