Полезные команды для настройки виртуальных машин KVM посредством virsh
Гипервизор
устанавливаем KVM
apt install --no-install-recommends qemu-system libvirt-daemon-system virtinst dnsmasq qemu-utils
замечание: данная команда предназначена для использования в Debian 12
Сеть
выводим список всех сетей
virsh net-list --all
создаем временный файл с конфигурацией сети
cat <<EOF > /tmp/br0
<network>
<name>br0</name>
<bridge name='br0' stp='on'/>
<ip address='192.168.100.1' netmask='255.255.255.0'>
<dhcp>
<range start='192.168.100.2' end='192.168.100.254'/>
</dhcp>
</ip>
<forward mode='nat'>
<nat>
<port start='1024' end='65535'/>
</nat>
</forward>
</network>
EOF
создаем определение сети
virsh net-define /tmp/br0
настраиваем автозапуск сети
virsh net-autostart br0
активируем сеть
virsh net-start br0
деактивируем сеть
virsh net-destroy br0
удаляем определение сети
virsh net-undefine br0
присоединяем сеть
virsh attach-interface --domain test0 --type bridge --source tmp0 --model virtio --config
отсоединяем сеть
virsh detach-interface --domain test0 --type bridge --mac 00:11:22:33:44:55 --config
Пул
выводим список всех пулов
virsh pool-list --all
создаем папку для пула
mkdir /mnt/pool0
создаем временный файл с конфигурацией пула
cat <<EOF > /tmp/pool0
<pool type='dir'>
<name>pool0</name>
<target>
<path>/mnt/pool0</path>
<permissions>
<mode>0755</mode>
<owner>0</owner>
<group>0</group>
</permissions>
</target>
</pool>
EOF
создаем определение пула
virsh pool-define /tmp/pool0
настраиваем автоматический запуск пула
virsh pool-autostart pool0
активируем пул
virsh pool-start pool0
деактивруем пул
virsh pool-destroy pool0
удаляем определение пула
virsh pool-undefine pool0
Раздел
создаем временный файл с конфигурацией раздела
cat <<EOF > /tmp/vol0
<volume type='file'>
<name>vol0</name>
<capacity unit='G'>20</capacity>
<target>
<format type='qcow2'/>
</target>
</volume>
EOF
создаем раздел
virsh vol-create pool0 /tmp/vol0
удаляем раздел
virsh vol-delete vol0 pool0
присоединяем раздел
virsh attach-disk --domain test0 --source /mnt/pool0/tmp0 --target vdb --driver qemu --subdriver qcow2 --config
отсоединяем раздел
virsh detach-disk --domain test0 --target vdb --config
ВМ
выводим список всех ВМ
virsh list --all
выводим список всех типов ВМ
virt-install --osinfo list
создаем ВМ
virt-install --name test0 --osinfo debian11 --cpu host-passthrough --vcpus 4 --memory 4096 --graphics vnc,listen=1.2.3.4 --disk /mnt/pool0/vol0,bus=virtio --network bridge=br0,model=virtio --noautoconsole --noreboot --import
запускаем ВМ
virsh start test0
приостанавливаем работу ВМ
virsh suspend test0
возобновляем работу ВМ
virsh resume test0
завершаем работу ОС ВМ
virsh shutdown test0 --mode acpi
станавливаем ВМ принудительно
virsh destroy test0
перезагружаем ОС ВМ
virsh reboot test0
перезапускаем ВМ принудительно
virsh reset test0
VNC
получаем прослушиваемый ВМ порт
virsh dumpxml test0 | grep vnc | sed -rn "s/.port='([0-9])'.*/\1/p"
подключаемся к ВМ с использованием любого VNC-клиента
ISO
входим в режим редактирования конфигурации ВМ
virsh edit test0
добавляем строки
<device>
...
<disk type='file' device='cdrom'>
<source file='/home/ISO/debian-12.2.0-amd64-netinst.iso'/>
<target dev='hda' bus='sata'/>
<readonly/>
</disk>
...
</device>
изменяем строки
<os>
...
<boot dev='cdrom'/>
...
</os>
перезапускаем ВМ
Клонирование
останавливаем ВМ
клонируем ВМ
virt-clone --original test0 --name test99 --file /mnt/pool0/vol99
замечание: если к ВМ подключены несколько дисков, то они должны быть перечислены с использованием параметра "--file" в том же порядке, в котором они указаны в XML-описании ВМ
Снимки
выводим список всех снимков
virsh snapshot-list test0
создаем временный файл с конфигурацией снимка
cat <<EOF > /tmp/snapshot0
<domainsnapshot>
<name>snapshot0</name>
</domainsnapshot>
EOF
создаем снимок
virsh snapshot-create --atomic --domain test0 --xmlfile /tmp/snapshot0
применяем снимок
virsh snapshot-revert --domain test0 --snapshotname snapshot0
удаляем снимок
virsh snapshot-delete --domain test0 --snapshotname snapshot0
Мониторинг
использование ЦП
virsh vcpuinfo --domain test0
использование памяти
virsh dommemstat --domain test0
информация о сетевых интерфейсах
virsh domifaddr --domain test0
Ссылки
Network XML format - https://libvirt.org/formatnetwork.html
Storage pool and volume XML format - https://libvirt.org/formatstorage.html
Domain XML format - https://libvirt.org/formatdomain.html
Snapshot XML format - https://libvirt.org/formatsnapshot.html
Manual Snapshots - https://libvirt.org/kbase/snapshots.html