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:
- export (aka ‘dump’) the xml of the virtual machine you want to edit
- edit the xml
- 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
Здравствуйте, а какими еще способами можно удалить виртуальную машину? Через ctrl + c еще можно же? Один из способов это destroy и undefine, а вот еще какие есть?
Ctrl + C врядли поможет с этим — это сочетание для прерывания текущей задачи, запущенной в консоли прямо сейчас.
Вируальные машины запускаются «гипервизором», который работает в фоне.