Crmgo Блог

Керування віртуальними машинами KVM за допомогою virsh

Керування віртуальними машинами KVM за допомогою virsh

Текстова утиліта virsh призначена для керування гостьовими системами та гіпервізором. virsh використовує libvirt API і слугує альтернативою xm та графічному менеджеру віртуальних машин ( virt-manager ). Непривілейовані користувачі можуть виконувати доступ лише в режимі читання. За допомогою virsh можна…

Керування віртуальними машинами KVM за допомогою virsh

Текстова утиліта virsh призначена для керування гостьовими системами та гіпервізором.

virsh використовує libvirt API і слугує альтернативою xm та графічному менеджеру віртуальних машин (virt-manager). Непривілейовані користувачі можуть виконувати доступ лише в режимі читання. За допомогою virsh можна виконувати сценарії для віртуальних машин.
Огляд команд virsh

Наведені нижче таблиці містять перелік основних параметрів командного рядка virsh.

Команда Description
help Коротка довідка.
list Перегляд усіх віртуальних машин.
dumpxml Вивести файл конфігурації XML для заданої віртуальної машини.
create Створити віртуальну машину з файлу конфігурації XML та її запуск.
start Запустити неактивну віртуальну машину.
destroy Примусово зупинити роботу віртуальної машини.
define Визначає файл конфігурації XML для заданої віртуальної машини.
domid Перегляд ідентифікатора віртуальної машини.
domuuid Перегляд UUID віртуальної машини.
dominfo Перегляд відомостей про віртуальну машину.
domname Перегляд імені віртуальної машини.
domstate Перегляд стану віртуальної машини.
quit Закрити інтерактивний термінал.
reboot Перезавантажити віртуальну машину.
restore Відновити збережену у файлі віртуальну машину.
resume Відновити роботу призупиненої віртуальної машини.
save Зберегти стан віртуальної машини у файл.
shutdown Коректно завершити роботу віртуальної машини.
suspend Призупинити роботу віртуальної машини.
undefine Видалити всі файли віртуальної машини.
migrate Перенести віртуальну машину на інший вузол.
Таблиця 15.1. Команди керування віртуальними машинами

 

Для керування ресурсами віртуальної машини та гіпервізора використовуються такі команди virsh:
Команда Description
setmem Визначає розмір виділеної віртуальній машині пам'яті.
setmaxmem Обмежує максимально доступний гіпервізору обсяг пам'яті.
setvcpus Змінює кількість наданих гостьовій системі віртуальних процесорів.
vcpuinfo Перегляд інформації про віртуальні процесори.
vcpupin Налаштування відповідностей віртуальних процесорів.
domblkstat Перегляд статистики блокових пристроїв для працюючої віртуальної машини.
domifstat Перегляд статистики мережевих інтерфейсів для працюючої віртуальної машини.
attach-device Підключити визначений у XML-файлі пристрій до гостьової системи.
attach-disk Підключити новий дисковий пристрій до гостьової системи
attach-interface Підключити новий мережевий інтерфейс до гостьової системи
detach-device Відключити пристрій від гостьової системи (приймає ті самі визначення XML, що й attach-device).
detach-disk Відключити дисковий пристрій від гостьової системи.
detach-interface Відключити мережевий інтерфейс від гостьової системи.
Таблиця 15.2. Параметри керування ресурсами

 

Інші команди virsh:
Команда Description
version Перегляд версії virsh.
nodeinfo Перегляд інформації про гіпервізор.
Таблиця 15.3. Інші команди

 

Підключення до гіпервізора

Підключення до сесії гіпервізора за допомогою virsh :

# virsh connect {hostname OR URL}
Where <name> is the machine name of the hypervisor. To initiate a read-only connection, append the above command with-readonly.
Створення XML-файлу конфігурації віртуальної машини

Виведіть файл конфігурації віртуальної машини:

# virsh dumpxml {domain-id, domain-name or domain-uuid}
This command outputs the guest's XML configuration file to standard out (stdout). You can save the data by piping the output to a file. An example of piping the output to a file called guest.xml:
# virsh dumpxml GuestID > guest.xml

Цей файл guest.xml може відтворити гостьову систему (див. Редагування файлу конфігурації віртуальної машини. Ви можете редагувати цей XML-файл конфігурації, щоб налаштувати додаткові пристрої або розгорнути додаткові гостьові системи. Див. Розділ 18.1, «Використання файлів конфігурації за допомогою virsh» для отримання додаткової інформації про змінення файлів, створених за допомогоюvirsh dumpxml.

Приклад виведення virsh dumpxml:
# virsh dumpxml r5b2-mySQL01
<domain type='xen' id='13'>
    <name>r5b2-mySQL01</name>
    <uuid>4a4c59a7ee3fc78196e4288f2862f011</uuid>
    <bootloader>/usr/bin/pygrub</bootloader>
    <os>
        <type>linux</type>
        <kernel>/var/lib/libvirt/vmlinuz.2dgnU_</kernel>
	<initrd>/var/lib/libvirt/initrd.UQafMw</initrd>
        <cmdline>ro root=/dev/VolGroup00/LogVol00 rhgb quiet</cmdline>
    </os>
    <memory>512000</memory>
    <vcpu>1</vcpu>
    <on_poweroff>destroy</on_poweroff>
    <on_reboot>restart</on_reboot>
    <on_crash>restart</on_crash>
    <devices>
        <interface type='bridge'>
            <source bridge='xenbr0'/>
            <mac address='00:16:3e:49:1d:11'/>
            <script path='vif-bridge'/>
        </interface>
        <graphics type='vnc' port='5900'/>
        <console tty='/dev/pts/4'/>
    </devices>
</domain>

Створення віртуальної машини на основі файлу конфігурації

Гостьові системи можна створювати з XML-файлів конфігурації. Ви можете скопіювати наявний XML із раніше створених гостьових систем або скористатися параметромdumpxml (див. Створення XML-файлу конфігурації віртуальної машини). Щоб створити гостьову систему за допомогою virsh з XML-файлу:

# virsh create configuration_file.xml
Редагування файлу конфігурації віртуальної машини

Замість використання параметра dumpxml (див. Створення XML-файлу конфігурації віртуальної машини) гостьові системи можна редагувати як під час їх роботи, так і в автономному режимі. Команда virsh edit надає цю функціональність. Наприклад, щоб відредагувати гостьову систему з назвою softwaretesting:

# virsh edit softwaretesting
Відкриється вікно текстового редактора, заданого змінною оболонки $EDITOR (за замовчуванням використовується vi).
Призупинення віртуальної машини

Команда призупинення віртуальної машини за допомогою virsh:

# virsh suspend {domain-id, domain-name or domain-uuid}
Коли гостьова система перебуває в призупиненому стані, вона споживає системну RAM, але не ресурси процесора. Дисковий та мережевий ввід/вивід не відбувається, поки гостьова система призупинена. Ця операція виконується негайно, і гостьову систему можна перезапустити за допомогою параметра resume(Відновлення роботи віртуальної машини).
Відновлення роботи віртуальної машини

Відновити роботу призупиненої віртуальної машини можна за допомогою параметра resume команди virsh:

# virsh resume {domain-id, domain-name or domain-uuid}
Роботу машини буде відновлено негайно. Параметри зберігатимуться між циклами suspend і resume.
Збереження віртуальної машини

Команда збереження поточного стану віртуальної машини:

# virsh save {domain-name, domain-id or domain-uuid} filename
This stops the guest you specify and saves the data to a file, which may take some time given the amount of memory in use by your guest. You can restore the state of the guest with the restore (Відновлення віртуальної машини) option. Save is similar to pause, instead of just pausing a guest the present state of the guest is saved.
Відновлення віртуальної машини

Restore a guest previously saved with the virsh save command (Збереження віртуальної машини) using virsh:

# virsh restore filename
Збережену машину буде відновлено з файлу та перезапущено, що може зайняти деякий час. Ім'я та ідентифікатор UUID віртуальної машини залишаться незмінними, але буде надано новий ідентифікатор домену.
Завершення роботи віртуальної машини

Команда завершення роботи:

# virsh shutdown {domain-id, domain-name or domain-uuid}
Поведінку гостьової системи, що вимикається, можна контролювати за допомогою параметра on_shutdown у її файлі конфігурації.
Перезавантаження віртуальної машини

Команда перезавантаження:

#virsh reboot {domain-id, domain-name or domain-uuid}
Поведінку гостьової системи, що перезавантажується, можна контролювати за допомогою параметра on_reboot у її файлі конфігурації.
Примусова зупинка віртуальної машини

Команда примусової зупинки:

# virsh destroy {domain-id, domain-name or domain-uuid}
This command does an immediate ungraceful shutdown and stops the specified guest. Using virsh destroy can corrupt guest file systems . Use the destroy option only when the guest is unresponsive. For para-virtualized guests, use theshutdown option(Завершення роботи віртуальної машини) instead.
Визначення ідентифікатора домену

Команда визначення ідентифікатора домену віртуальної машини:

# virsh domid {domain-name or domain-uuid}
Визначення імені домену

Команда визначення імені домену віртуальної машини:

# virsh domname {domain-id or domain-uuid}
Визначення UUID

Команда визначення універсального ідентифікатора UUID віртуальної машини:

# virsh domuuid {domain-id or domain-name}
Приклад виводу virsh domuuid:
# virsh domuuid r5b2-mySQL01
4a4c59a7-ee3f-c781-96e4-288f2862f011

Отримання інформації про віртуальну машину

Команда для отримання інформації:

# virsh dominfo {domain-id, domain-name or domain-uuid}
Приклад виводу virsh dominfo:
# virsh dominfo r5b2-mySQL01
id:             13
name:           r5b2-mysql01
uuid:           4a4c59a7-ee3f-c781-96e4-288f2862f011
os type:      	linux
state:          blocked
cpu(s):         1
cpu time:     	11.0s
max memory:     512000 kb
used memory:    512000 kb

Отримання інформації про вузол

Команда отримання інформації про вузол:

# virsh nodeinfo

Приклад виводу virsh nodeinfo:
# virsh nodeinfo
CPU model                    x86_64
CPU (s)                      8
CPU frequency                2895 Mhz
CPU socket(s)                2      
Core(s) per socket           2
Threads per core:            2
Numa cell(s)                 1
Memory size:                 1046528 kb

Вивід містить інформацію про вузол і машини, що підтримують віртуалізацію.
Перегляд списку віртуальних машин

Команда для перегляду списку віртуальних машин та їхнього стану:

# virsh list

Можна додати аргументи:
--inactive покаже список неактивних доменів (неактивним вважається той домен, який було визначено, але наразі він не є активним).
--all покаже всі віртуальні машини незалежно від їхнього стану. Приклад:
# virsh list --all
 Id Name                 State
----------------------------------
  0 Domain-0             running
  1 Domain202            paused
  2 Domain010            inactive
  3 Domain9600           crashed

Стовпець «Status» може містити такі значення:
  • running — працюючі віртуальні машини, тобто ті машини, які використовують ресурси процесора в момент виконання команди.
  • blocked — заблоковані, непрацюючі машини. Такий статус може бути викликаний очікуванням введення/виведення або перебуванням машини в сплячому режимі.
  • paused — призупинені домени. У цей стан вони переходять, якщо адміністратор натиснув кнопку паузи у вікні менеджера віртуальних машин або виконав команду xm pause або virsh suspend. У призупиненому стані гість продовжує споживати ресурси, але не може займати більше процесорних ресурсів.
  • shutdown — віртуальні машини, що завершують свою роботу. При отриманні віртуальною машиною сигналу завершення роботи вона почне завершувати всі процеси. Варто зазначити, що деякі операційні системи не відповідають на такі сигнали.
  • dying — збійні домени та домени, які не змогли коректно завершити свою роботу.
  • crashed — збійні домени, роботу яких було перервано. У цьому стані домени перебувають, якщо не було налаштовано їхнє перезавантаження у разі збою.
Отримання інформації про віртуальні процесори

Команда отримання інформації про віртуальні процесори:

# virsh vcpuinfo {domain-id, domain-name or domain-uuid}
Приклад виводу:
# virsh vcpuinfo r5b2-mySQL01
VCPU:           0
CPU:            0
State:          blocked
CPU time:       0.0s
CPU Affinity:   yy

Налаштування відповідностей віртуальних процесорів

Команда зіставлення віртуальних процесорів фізичним:

# virsh vcpupin {domain-id, domain-name or domain-uuid} vcpu, cpulist
Тут vcpu — номер віртуального процесора, а список_cpu — фізичні процесори, які йому зіставляються.
Зміна кількості віртуальних процесорів

Команда зміни кількості процесорів для домену:

# virsh setvcpus {domain-name, domain-id or domain-uuid} count
Зверніть увагу, що задане число не може перевищувати значення, визначене під час створення гостьової системи.
Зміна виділеного обсягу пам'яті

Команда зміни виділеного віртуальній машині обсягу пам'яті:

# virsh setmem {domain-id or domain-name} count

Обсяг пам'яті, визначений заданим числом, має бути вказаний у кілобайтах. Зверніть увагу, що обсяг не може перевищувати значення, визначене під час створення віртуальної машини, але водночас не повинен бути меншим за 64 мегабайти. Зміна максимального обсягу пам'яті може вплинути на функціональність гостьової системи лише в тому разі, якщо вказаний розмір менший за початковий. У такому разі використання пам'яті буде обмежено.
Отримання інформації про блочні пристрої

Команда для отримання інформації про блочні пристрої працюючої віртуальної машини:

# virsh domblkstat GuestName block-device
Отримання інформації про мережеві пристрої

Команда для отримання інформації про мережеві інтерфейси працюючої віртуальної машини:

# virsh domifstat GuestName interface-device 
Міграція віртуальних машин

virsh дозволяє переносити віртуальні машини з одного вузла на інший. Для виконання живої міграції просто потрібно вказати параметр --live. Команда перенесення виглядає так:

# virsh migrate --live GuestName DestinationURL
Параметр --live не є обов'язковим.
The GuestName parameter represents the name of the guest which you want to migrate.
The DestinationURL parameter is the URL or hostname of the destination system. The destination system must run the same version of Fedora, be using the same hypervisor and have libvirt running.
Once the command is entered you will be prompted for the root password of the destination system.
Управління віртуальними мережами

У цій секції буде розглянуто керуючі команди virsh. Наприклад, команда перегляду списку віртуальних мереж виглядає так:

# virsh net-list

Приклад виводу цієї команди:
# virsh net-list
Name                 State      Autostart
-----------------------------------------
default              active     yes      
vnet1	             active     yes      
vnet2	             active     yes

Перегляд інформації для заданої віртуальної мережі:
# virsh net-dumpxml NetworkName
Приклад виводу цієї команди (у форматі XML):
# virsh net-dumpxml vnet1
<network>
  <name>vnet1</name>
  <uuid>98361b46-1581-acb7-1643-85a412626e70</uuid>
  <forward dev='eth0'/>
  <bridge name='vnet0' stp='on' forwardDelay='0' />
  <ip address='192.168.100.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.100.128' end='192.168.100.254' />
    </dhcp>
  </ip>
</network>

Інші команди керування віртуальними мережами:
  • virsh net-autostart имя_сети — автоматичний запуск заданої мережі.
  • virsh net-create файл_XML — створення та запуск нової мережі на основі наявного XML-файлу.
  • virsh net-define файл_XML — створення нового мережевого пристрою на основі наявного XML-файлу. Пристрій не буде запущено.
  • virsh net-destroy имя_сети — видалення заданої мережі.
  • virsh net-name UUID_сети — перетворення заданого ідентифікатора на ім'я мережі.
  • virsh net-uuid имя_сети — перетворення заданого імені на ідентифікатор UUID.
  • virsh net-start имя_неактивной_сети — запуск неактивної мережі.
  • virsh net-undefine имя_неактивной_сети — видалення визначення неактивної мережі.

Примітка: матеріал міг бути створений за підтримки ШІ з подальшою людською редакцією. Відповідальний за зміст: Dmytro Lomaka, Kaltenkirchen.

Рубрики: KVM