Настройка KVM под Ubuntu Server 10.04 LTS. Часть 4 – Управление гостевыми системами
Содержание
Управление виртуальными машинами
Из командной строки
Вы можете управлять вашими виртуальными машинами из командной строки используя virsh. Вы можете получить список доступных команд если наберете «help». Наберите «help command» чтобы получить дополнительную информацию о конкретной команде.
Создание новых виртуальных машин
Перед тем как вы сможете управлять вашей новой виртуальной машиной, вы должны создать ее:
1 2 3 4 5 6 7 8 9 |
$ 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 # define /etc/libvirt/qemu/newvm.xml Domain newvm defined from /etc/libvirt/qemu/newvm.xml |
Обратите внимание, что для того чтобы увидеть в списке машину newvm, вы должные использовать ‘list —inactive’ или ‘list —all’, так как команда list без параметров показывает список только запущенных в настоящее время машин.
Список виртуальных машин
Virsh позволяет вам получить список доступных виртуальных машин:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
yhamon@paris:/etc/libvirt/qemu$ 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 list NAME list - list domains SYNOPSIS list [--inactive | --all] DESCRIPTION Returns list of domains. OPTIONS --inactive list inactive domains --all list inactive & active domains virsh # list Id Name State ---------------------------------- 15 mirror running 16 vm2 running virsh # list --all Id Name State ---------------------------------- 15 mirror running 16 vm2 running - test5 shut off |
Определение, удаление определения, запуск, выключение и уничтожение виртуальных машин
Виртуальные машины, которые можно увидеть с помощью команды list —all — это машины которые «определены» из XML-файла. Каждая виртуальные машина конфигурируется с помощью XML файла в директории /etc/libvirt/qemu. Если вы желаете удалить виртуальную машину из списка виртуальных машин, вам необходимо удалить ее определение:
1 2 3 4 5 6 7 8 |
virsh # undefine test5 # WARNING: undefine will delete your XML file! Domain test5 has been undefined virsh # list --all Id Name State ---------------------------------- 15 mirror running 16 vm2 running |
Для того чтобы можно было удалить определение виртуально машины, вам для начала нужно ее выключить:
1 2 |
virsh # shutdown mirror Domain mirror is being shutdown |
Это команда запрашивает мягкое выключение (аналогично выполнению shutdown в командной строке).
Примечание: Ubuntu 10.04 server не имеет установленного по умолчанию acpid. Этот пакет необходимо установить в гостевую операционную систему перед тем как она будет принимать любые запросы от хостовой системы.
Вы так же можете использовать «destroy», команда более нагло выключает виртуальную машину, аналогично выдергиванию шнура питания:
1 2 |
virsh # destroy mirror Domain mirror destroyed |
Если вы сделали изменения в конфигурационном XML-файле, вам необходимо попросить KVM перезагрузить его и перезапустить виртуальную машину:
1 2 |
virsh # define /etc/libvirt/qemu/mirror.xml Domain mirror defined from /etc/libvirt/qemu/mirror.xml |
Затем перезапустить виртуальную машину:
1 2 |
virsh # start mirror Domain mirror started |
Пауза и восстановление виртуальной машины
Virsh позволяет вам легко ставить на паузу и восстанавливать виртуальные машины.
1 2 3 4 5 |
virsh # suspend mirror Domain mirror suspended virsh # resume mirror Domain mirror resumed |
Редактирование свойств виртуальных машин
libvirt хранит их конфигурационные файлы как xml в ‘/etc/libvirt/qemu’. xml легок для понимания, и аналогичен файлам VMware *.vmx. Если желаете, то можете редактировать эти файлы и перезапускать libvirt-bin для того, чтобы изменения вступили в силу, но рекомендованный метод изменения свойств виртуальной машины с помощью virsh (или virt-manager, если он поддерживает свойства аппаратной части, которые нужно править). Концепция проста::
- экспортируйте (aka ‘dump’) xml-описание виртуальной машины, которую вы желаете поправить
- отредактируйте xml
- импортируйте (aka ‘define’) xml
К примеру, для того что бы отредактировать машину с именем ‘foo’ (вы можете получить список виртуальных машин с помощью команды ‘virsh list —all’), сделайте следующее:
1 2 3 |
$ virsh dumpxml foo > /tmp/foo.xml (edit /tmp/foo.xml as needed) $ virsh define /tmp/foo.xml |
Добавление процессоров
KVM позволяет вам создатвать многопроцессорные гостевые машины. Для выделения двух CPUs виртуальной машине, экспортируйте xml как описано выше, затем отредактируйте его чтобы получилось:
1 2 3 4 5 |
<domain type='kvm'> ... <vcpu>2</vcpu> ... </domain> |
Теперь импортируйте виртуальную машину как описано выше.
Adding Memory
Для изменения памяти выделенной виртуальной машине, экспортируйте xml, затем отредактируйте его следующим образом:
1 2 3 4 5 6 |
<domain type='kvm'> ... <memory>262144</memory> <currentMemory>262144</currentMemory> ... </domain> |
Теперь импортируйте xml. Помните, что память выделяется в килобайтах, таким образом для выделения 512Мб памяти укажите 512 * 1024, или 524288.
Изменение модели сетевой карты
kvm и qemu сейчас по умолчанию использует rtl8139 NIC. Поддерживаемые модели в i82551, i82557b, i82559er, ne2k_pci, pcnet, rtl8139, e1000, и virtio. Для использования другой NIC, экспортируйте xml как описано выше, затем отредактируйте файл чтобы получилось:
1 2 3 4 5 6 7 8 |
<domain type='kvm'> ... <interface type='network'> ... <model type='e1000'/> </interface> ... </domain> |
Теперь импортируйте описание виртуальной машины.
Добавление проброса USB устройств (USB Pass-through)
Ограничения
- USB protocol 1.1 only
- Device must be plugged in before KVM starts
- Apparmor modifications needed
Модификация Apparmor
Для того, чтобы программы получали доступ к usb устройствам apparmor должен быть изменения. Отредактируйте /etc/apparmor.d/abstractions/libvirt-qemu и отредактируйте:
1 2 3 4 5 6 |
# WARNING: uncommenting these gives the guest direct access to host hardware. # This is required for USB pass through but is a security risk. You have been # warned. /sys/bus/usb/devices/ r, /sys/devices/*/*/usb[0-9]*/** r, /dev/bus/usb/*/[0-9]* rw, |
После изменений нужно перезапустить apparmor:
1 |
$ sudo /etc/init.d/apparmor restart |
Добавление USB устройств
Для начала найдите Vendor ID и Product ID usb устройства:
1 2 3 4 5 6 7 8 |
$ lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 005 Device 012: ID 0a5c:2110 Broadcom Corp. Bluetooth Controller Bus 005 Device 003: ID 0483:2016 SGS Thomson Microelectronics Fingerprint Reader Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub |
В примере Broadcom Corp. Bluetooth Controller имеет вендора и идентификатор продукта соответственно 0a5c и 2110. Это должно быть указано в xml профиле. Это можно сделать с помощью virsh командой edit
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<domain type='kvm'> <name>windowsxp</name> … <devices> … <hostdev mode='subsystem' type='usb'> <source> <vendor id='0x0a5c'/> <product id='0x2110'/> </source> </hostdev> </devices> </domain> |
Получение новых идентификаторов
Для того, чтобы получить новый mac адрес для вставки в xml файл, используйте команду:
1 |
MACADDR="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"; echo $MACADDR |
Для получения уникального идентификатор (uuid) для вашего xml-файла, используйте: uuidgen