Virsh — управление виртуальными машинами KVM

virsh — утилита для командной строки Linux, предназначенная для управления виртуальными машинами и гипервизорами KVM и Xen.

Virsh использует API libvirt и является альтернативой для xm и графической программы virt-manager.

С помощью virsh вы можете сохранять состояние виртуальных машин, переносить ВМ между гипервизорами и управлять виртуальными сетями.

С virsh вы всегда можете получить список доступных команд или параметров, используя команду «help». «help command» даст вам дополнительную информацию по команде command.

Создание новой виртуальной машины

Перед тем, как вы сможете управлять виртуальной машиной с помощью virsh, вам нужно определить ее:

$ 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 позволяет просмотреть виртуальные машины на данном узле командой list:

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

Создание, запуск, установка и уничтожение ВМ — define, undefine, start, shutdown, destroy

Виртуальные машины, которые вы видите с командой list —all — являются «defined». Каждая виртуальная машина настраивается через XML файл в каталоге /etc/libvirt/qemu. Если вы хотите удалить ВМ из списка определенных в системе виртуальных машин, вам нужно использовать команду undefine:

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

Чтобы выполнить undefine нужно предварительно остановить виртуальную машину:

virsh # shutdown mirror
Domain mirror is being shutdown

Команда shutdown пытается завершить работу гостевой операционной системы, используя ACPI.

Вы также можете использовать destroy. Эта команда мгновенно отключит виртуальную систему, как если вы выключите кабель питания из компьютера.

virsh # destroy mirror
Domain mirror destroyed

Если вы изменили файл конфигурации виртуальной машины, вам нужно сообщить об этом KVM перед перезапуском ВМ.

virsh # define /etc/libvirt/qemu/mirror.xml
Domain mirror defined from /etc/libvirt/qemu/mirror.xml

Теперь можно запустить виртуальную машину:

virsh # start mirror
Domain mirror started

Приостановка и продолжение работы виртуальных машин

Virsh позволяет приостановить и затем продолжить работу виртуальной машины

virsh # suspend mirror
Domain mirror suspended

virsh # resume mirror
Domain mirror resumed

Изменение параметров виртуальной машины

libvirt stores it’s configuration as xml in ‘/etc/libvirt/qemu’. The xml is easy to understand, and is similar to VMware *.vmx files. While it is possible to edit these files in place and restart libvirt-bin for the changes to take affect, the recommended method for modifying the attributes of a virtual machine is via virsh (or virt-manager, if it supports changing the hardware you want to change). The concept is simple:

  1. export (aka ‘dump’) the xml of the virtual machine you want to edit
  2. edit the xml
  3. import (aka ‘define’) the xml

For example, to edit the machine named ‘foo’ (you can get a list of your machines with ‘virsh list —all’), do:

$ virsh dumpxml foo > /tmp/foo.xml
(edit /tmp/foo.xml as needed)
$ virsh define /tmp/foo.xml

Добавление процессоров

KVM allows you to create SMP guests. To allocate two CPUs to a VM, dump the xml as above, then edit your xml to have:

<domain type='kvm'>
  ...
  <vcpu>2</vcpu>
  ...
</domain>

Now define the VM as above.

Добавление памяти

To change the memory allocation in a VM, dump the xml as above, then edit your xml to have:

<domain type='kvm'>
  ...
  <memory>262144</memory>
  <currentMemory>262144</currentMemory>
  ...
</domain>

Now define the VM as above. Keep in mind that the memory allocation is in kilobytes, so to allocate 512MB of memory, use 512 * 1024, or 524288.

Изменение модели сетевой карты

kvm and qemu currently default to using the rtl8139 NIC. Supported NICs in Ubuntu 8.04 LTS are i82551, i82557b, i82559er, ne2k_pci, pcnet, rtl8139, e1000, and virtio. To use an alternate NIC, dump the xml as above, then edit your xml to have:

<domain type='kvm'>
  ...
    <interface type='network'>
      ...
      <model type='e1000'/>
    </interface>
  ...
</domain>

Now define the VM as above.

Добавление USB устройств

Ограничения для USB устройств в KVM

  • USB протокол 1.1
  • Устройство должно быть подключено до запуска KVM
  • Нужны изменения Apparmor

Изменение Apparmor

Для получения доступа к USB устройствам требуются изменения в настройках apparmor. Отредактируйте /etc/apparmor.d/abstractions/libvirt-qemu и раскомментируйте строки.:

# 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 нужно перезапустить.:

$ sudo /etc/init.d/apparmor restart

Добавление USB устройства

Определите Vendor ID и Product ID.:

$ 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 vendor и product id это 0a5c и 2110. Эти значения нужно добавить в xml профиль. Выполните virsh edit <domain>.:

<domain type='kvm'>
  <name>windowsxp</name>
  …
  <devices>
    …
    <hostdev mode='subsystem' type='usb'>
      <source>
        <vendor id='0x0a5c'/>
        <product id='0x2110'/>
      </source>
    </hostdev>
  </devices>
</domain>

Получение новых ID

Чтобы получить новый MAC адрес для вставки в файл конфигурации виртуальной машины, используйте команду

MACADDR="52:54:$(dd if=/dev/urandom count=1 2>/dev/null | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\).*$/\1:\2:\3:\4/')"; echo $MACADDR

Чтобы получить новый uuid для вашего xml файла, используйте: uuidgen

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *