Библиотека сайта rus-linux.net
Работа с KVM в Debian или Ubuntu из командной строки
Оригинал: How to use KVM from the command line on Debian or UbuntuАвтор: Dan Nanni
Дата публикации: 27 февраля 2014 года
Перевод: А. Кривошей
Дата перевода: декабрь 2014 г.
Есть несколько способов управлять виртуальными машинами, запущенными в гипервизоре KVM, например с помощью популярного графического фронтенда virt-manager. Однако, если вы хотите использовать KVM на сервере, графические решения вряд ли будут хорошим выбором. В этом случае удобным инструментом будет virsh - утилита командной строки для управления гостевыми виртуальными машинами. Она работает со службой libvirtd, которая может управлять несколькими различными гипервизорами, включая KVM, Xen, QEMU, LXC и OpenVZ.
Интерфейс командной строки virsh также полезен в случае, если вы хотите автоматизировать инициализацию и управление виртуальными машинами. Кроме того, способность virsh работать с различными гипервизорами обеспечивает единый интерфейс для управления виртуальными машинами различных типов.
В этом руководстве я продемонстрирую вам, как запускать KVM из командной строки с использованием virsh в Debian или Ubuntu.
Этап 1: проверка аппаратной поддержки виртуализации
В качестве первого этапа проверьте, поддерживает ли ваш процессор аппаратную виртуализацию (то есть Intel VT или AMD-V), которая требуется для KVM. Это можно сделать с помощью команды:
Если в выводе нет флага vmx или svm, это значит, что процессор не поддерживает аппаратную виртуализацию, поэтому вы не сможете использовать KVM на этом хосте. После проверки самое время установить KVM.
Этап 2: Установка KVM
Установите KVM и соответствующие пользовательские утилиты с помощью apt-get:
$ sudo apt-get install qemu-kvm libvirt-bin
Во время инсталляции будет создана группа libvirtd, и ваш userID будет автоматически добавлен в группу. Это позволит вам управлять виртуальными машинами от имени обычного пользователя. Вы можете проверить это с помощью команды id, которая выводит ваш group ID.
$ id your-userID
Если по каким-либо причинам в списке вашего groupID нет libvirtd, вы можете вручную добавить себя в эту группу.
$ sudo adduser [youruserID] libvirt
Перезагрузите обновленную информацию о группе, как показано ниже. Когда появится запрос, введите свой пользовательский пароль.
$ exec su -l $USER
Теперь вы можете запускать virsh как обычный пользователь. В качестве теста попробуйте приведенную ниже команду, которая выведет список доступных виртуальных машин. Если вы не получите сообщение об ошибке прав доступа, значит все в порядке.
$ virsh --connect qemu:///system list Id Name State ----------------------------------------------------
Этап 3: Настройка сетевого моста
Один из способов получения доступа из виртуальной машины к внешним сетям - мост, встроенный в ваш хост Linux. Это называется сетевой мост. Ниже описано, как создать и настроить сетевой мост Linux br0 для мостового соединения с KVM.
Сначала установим необходимый для создания сетевого моста пакет.
$ sudo apt-get install bridge-utils $ sudo brctl addbr br0
Далее необходимо настроить сетевой мост в файле /etc/network/interfaces, чтобы он активировался при загрузке системы. Для использования файла /etc/network/interfaces необходимо отключить Network Manager (если он у вас используется). Как это сделать, описано здесь.
После отключения Network Manager настраиваем сетевой мост br0 в /etc/network/interfaces, как показано ниже.
#auto eth0 #iface eth0 inet dhcp auto br0 iface br0 inet dhcp bridge_ports eth0 bridge_stp off bridge_fd 0 bridge_maxwait 0
Здесь предполагается, что главным сетевым интерфейсом, который имеет доступ к внешним сетям, является eth0. Кроме того, предполагается, что eth0 получает IP-адреса посредством DHCP. Обратите внимание, что в /etc/network/interface нет настроек для eth0, так как он подключается к сетевому мосту br0.
Перезагрузите сетевые службы и убедитесь, что сетевой мост настроен успешно. В этом случае br0 должен присвоить сетевой адрес интерфейса eth0, в свою очередь интерфейсу eth0 не должно быть присвоено сетевого адреса.
$ sudo /etc/init.d/networking restart $ ifconfig
Этап 4: создание виртуальной машины из командной строки
В KVM настройки виртуальной машины хранятся в XML-файле домена. Поэтому сначала необходимо подготовить этот файл.
Ниже пример простого XML-файла для виртуальной машины. Вы можете использовать его, откорректировав в соответствии со своими потребностями.
<domain type='kvm'>
<name>alice</name>
<uuid>f5b8c05b-9c7a-3211-49b9-2bd635f7e2aa</uuid>
<memory>1048576</memory>
<currentMemory>1048576</currentMemory>
<vcpu>1</vcpu>
<os>
<type>hvm</type>
<boot dev='cdrom'/>
</os>
<features>
<acpi/>
</features>
<clock offset='utc'/>
<on_poweroff>destroy</on_poweroff>
<on_reboot>restart</on_reboot>
<on_crash>destroy</on_crash>
<devices>
<emulator>/usr/bin/kvm</emulator>
<disk type="file" device="disk">
<driver name="qemu" type="raw"/>
<source file="/home/dev/images/alice.img"/>
<target dev="vda" bus="virtio"/>
<address type="pci" domain="0x0000" bus="0x00" slot="0x04" function="0x0"/>
</disk>
<disk type="file" device="cdrom">
<driver name="qemu" type="raw"/>
<source file="/home/dev/iso/ubuntu-13.10-server-amd64.iso"/>
<target dev="hdc" bus="ide"/>
<readonly/>
<address type="drive" controller="0" bus="1" target="0" unit="0"/>
</disk>
<controller type="ide" index="0">
<address type="pci" domain="0x0000" bus="0x00" slot="0x01" function="0x1"/>
</controller>
<interface type='bridge'>
<mac address='52:54:aa:00:f0:51'/>
<source bridge='br0'/>
</interface>
<input type='mouse' bus='ps2'/>
<graphics type='vnc' port='-1' autoport="yes" listen='127.0.0.1'/>
</devices>
</domain>
Этот XML-файл определяет следующую виртуальную машину:
1 Гб оперативной памяти, один CPU и один жесткий диск.
Образ диска: /home/dev/images/alice.img.
Загрузка с CD: (/home/dev/iso/ubuntu-13.10-server-amd64.iso).
Сеть: сетевой мост br0.
Строка UUID между тегами <uuid></uuid> может быть сгенерирована случайным образом. Для этого используется утилита командной строки uuid.
$ sudo apt-get install uuid $ uuid
Доменный XML-файл можно также создать, сделав дамп информации о домене существующей виртуальной машины:
$ virsh --connect qemu:///system dumpxml alice > bob.xml
Этап 5: запуск виртуальной машины из командной строки.
Перед запуском виртуальной машины необходимо создать образ диска для нее. Для этого можно воспользоваться командой qemu-img, входящей в пакет qemu-kvm.
$ qemu-img create -f qcow2 /home/dev/images/alice.img 5G
Преимущество опции qcow2 в том, что создаваемый при ее использовании образ диска не резервирует сразу весь свой свой объем (5 Гб), а динамически увеличивается при наполнении в процессе работы виртуальной машины.
Теперь вы готовы к запуску виртуальной машины с использованием созданного ранее доменного XML-файла. Это делается с помощью приведенной ниже команды:
$ virsh --connect qemu:///system create alice.xml Domain alice created from alice.xml
Проверьте, что домен создан успешно.
$ virsh --connect qemu:///system list Id Name State ---------------------------------------------------- 3 alice running
Кроме того, проверьте, что виртуальный сетевой интерфейс для виртуальной машины (то есть vnet0) успешно добавлен в созданный ранее сетевой мост br0.
$ sudo brctl show
Этап 6. Удаленный доступ к виртуальной машине.
Для удаленного доступа к консоли виртуальной машины вы можете использовать любой VNC-клиент.
Сначала определите номер порта VNC для виртуальной машины:
$ sudo netstat -nap | grep kvm
В этом примере номер порта для виртуальной машины alice 5900.
Затем запустите VNC-клиент и подключитесь к VNC-серверу, работающему по адресу KVM-host-IP:5900.
Управление виртуальной машиной с помощью virsh
Ниже список наиболее часто употребляемых команд virsh.
Для создания нового гостевого домена и запуска виртуальной машины:
$ virsh --connect qemu:///system create alice.xml
Для остановки виртуальной машины и уничтожения гостевого домена:
$ virsh --connect qemu:///system destroy alice
Для выключения виртуальной машины (без уничтожения домена):
$ virsh --connect qemu:///system shutdown alice
Для приостановки виртуальной машины:
$ virsh --connect qemu:///system suspend alice
Для возобновления работы виртуальной машины:
$ virsh --connect qemu:///system resume alice
Для автозапуска виртуальной машины после загрузки хоста:
$ virsh --connect qemu:///system autostart alice
Для получения информации о домене виртуальной машины:
$ virsh --connect qemu:///system dominfo alice
Вы можете также управлять виртуальными машинами из сессии virsh. Для создания новой сессии virsh и входа в нее, просто введите:
$ virsh --connect qemu:///system
В командной строке вы можете использовать любые команды virsh.
Решение проблем
1. Я получил ошибку, когда попытался создать виртуальную машину:
error: internal error: no supported architecture for os type 'hvm'
Вы получите эту ошибку, если ваш процессор не поддерживает аппаратную виртуализацию (то есть Intel VT или AMD-V), которая требуется для работы KVM. Если же вы получили эту ошибку с процессором, поддерживающим Intel VT или AMD-V, возможные решения этой проблемы:
Во-первых, проверьте, загружены ли требуемые модули ядра.
$ lsmod | grep kvm
Если модуль kvm не загружен, вам необходимо загрузить его:
$ sudo modprobe kvm_intel (для процессоров Intel) $ sudo modprobe kvm_amd (для процессоров AMD)
Второе решение - добавление аргумента "--connect qemu:///system" к команде virsh, как показано ниже. Этот аргумент может потребоваться, если вы используете более одного гипервизора (то есть VMware, VirtualBox) на сервере.
$ virsh --connect qemu:///system create alice.xml
2. Я получил ошибку, когда пытался запустить консоль своей виртуальной машины:
$ virsh console alice error: internal error: cannot find character device <null>
Эта ошибка возникает потому, что вы не определили устройство консоли в XML-файле виртуальной машины. Добавьте приведенные ниже строки в раздел "device" XML-файла.
<console type='pty'>
<target port='0'/>
</console>