--- Title: "🖥️ virsh — Libvirt Shell" Group: Virtualization Icon: "🖥️" Order: 2 tags: - virtualization - sysadmin - linux --- # 🖥️ virsh — Libvirt Shell Cheatsheet ## Description **virsh** is the command-line management tool for **libvirt**, the standard virtualization API for Linux. It provides a consistent interface to manage KVM/QEMU, Xen, LXC, and other hypervisors. With virsh you can create, configure, monitor, and control virtual machines, storage pools, virtual networks, snapshots, and more — all from the terminal. **Alternatives / Альтернативы:** - **virt-manager** — GUI frontend for libvirt / Графический интерфейс для libvirt - **Cockpit** — Web-based server management with VM plugin / Веб-интерфейс управления серверами - **Proxmox VE** — Full-featured web UI on KVM/QEMU + libvirt / Полнофункциональный веб-интерфейс - **oVirt** — Enterprise virtualization management / Корпоративное управление виртуализацией **Common use cases / Типичные сценарии:** - Automated VM provisioning and lifecycle management / Автоматизация развёртывания и управления ВМ - Remote hypervisor administration over SSH / Удалённое управление гипервизором через SSH - Snapshot-based rollback and backup / Откат и бэкап на основе снимков - Live and offline migration between hosts / Живая и оффлайн-миграция между хостами - Storage pool and volume management / Управление пулами хранилищ и томами - Virtual network and bridge configuration / Настройка виртуальных сетей и мостов > [!NOTE] > virsh is actively maintained as part of the libvirt project. It is the recommended CLI for scripted and manual VM management on KVM/QEMU hosts. For GUI-based alternatives, see virt-manager (local), Cockpit (web), Proxmox VE, or oVirt. > virsh активно поддерживается как часть проекта libvirt. Рекомендуется для CLI-управления ВМ на KVM/QEMU хостах. Для GUI-альтернатив см. virt-manager (локально), Cockpit (веб), Proxmox VE, oVirt. --- ## Table of Contents - [Description](#Description) - [Installation & Configuration](#Installation%20&%20Configuration) - [Core Management (VM Lifecycle)](#Core%20Management%20(VM%20Lifecycle)) - [VM Information & Inspection](#VM%20Information%20&%20Inspection) - [Console Access & Interaction](#Console%20Access%20&%20Interaction) - [Resource Management](#Resource%20Management) - [Storage Management](#Storage%20Management) - [Networking](#Networking) - [Snapshots & Checkpoints](#Snapshots%20&%20Checkpoints) - [Migration](#Migration) - [Templates & Cloning](#Templates%20&%20Cloning) - [XML Editing & Device Management](#XML%20Editing%20&%20Device%20Management) - [Security & Access Control](#Security%20&%20Access%20Control) - [Host & Hypervisor Info](#Host%20&%20Hypervisor%20Info) - [Advanced Operations](#Advanced%20Operations) - [Troubleshooting](#Troubleshooting) - [Comparison Tables](#Comparison%20Tables) - [Quick Reference Cards](#Quick%20Reference%20Cards) - [Logrotate Configuration](#Logrotate%20Configuration) - [Documentation Links](#Documentation%20Links) --- ## Installation & Configuration ### Install virsh / Установка virsh #### Debian / Ubuntu ```bash sudo apt install -y libvirt-clients # Install virsh client / Установить клиент virsh sudo apt install -y libvirt-daemon-system # Install libvirt daemon / Установить демон libvirt sudo apt install -y qemu-kvm bridge-utils virtinst # Full stack / Полный стек ``` #### RHEL / CentOS / AlmaLinux ```bash sudo dnf install -y libvirt # Install libvirt package / Установить пакет libvirt sudo dnf install -y qemu-kvm # Install QEMU/KVM / Установить QEMU/KVM ``` ### Enable Libvirt Daemon ```bash sudo systemctl enable --now libvirtd # Enable and start / Включить и запустить sudo systemctl status libvirtd # Check status / Проверить статус ``` ### Verify Installation ```bash virsh version # Show virsh and libvirt version / Версия virsh и libvirt virsh capabilities # Hypervisor capabilities / Возможности гипервизора sudo virt-host-validate # Validate host configuration / Валидация конфигурации хоста ``` **Sample Output:** ``` virsh version Compiled against library: libvirt 9.0.0 Using library: libvirt 9.0.0 Using API: QEMU 9.0.0 Running hypervisor: QEMU 8.2.0 ``` ### Add User to libvirt Group ```bash sudo usermod -aG libvirt # Add user to libvirt group / Добавить в группу libvirt sudo usermod -aG kvm # Add to kvm group / Добавить в группу kvm newgrp libvirt # Apply without logout / Применить без перелогина ``` ### Configuration Paths - **Libvirt daemon:** `/etc/libvirt/libvirtd.conf` - **QEMU config:** `/etc/libvirt/qemu.conf` - **VM definitions:** `/etc/libvirt/qemu/.xml` - **Default storage pool:** `/var/lib/libvirt/images/` - **Default network:** `/etc/libvirt/qemu/networks/default.xml` ### Remote Connection Modes / Режимы удалённого подключения #### Unix Socket (Local / Локально) ```bash virsh connect qemu:///system # Local system connection / Локальное подключение к системе ``` #### SSH (Recommended / Рекомендуемый) ```bash virsh connect qemu+ssh://root@/system # SSH connection / Подключение через SSH ``` > [!TIP] > SSH is the most secure remote connection method. It uses existing SSH key authentication and encrypts all traffic. No additional ports need to be opened. > SSH — самый безопасный метод удалённого подключения. Использует аутентификацию по SSH-ключам и шифрует весь трафик. Дополнительные порты открывать не нужно. #### TLS (Encrypted / Шифрование) ```bash virsh connect qemu+tls:///system # TLS connection / Подключение через TLS ``` > [!WARNING] > TLS requires proper PKI certificates on both client and server. Incorrect certificate setup can lead to connection failures or security vulnerabilities. > TLS требует корректных PKI-сертификатов на клиенте и сервере. Неправильная настройка сертификатов может привести к сбоям подключения или уязвимостям. #### TCP (Unencrypted / Без шифрования) ```bash virsh connect qemu+tcp:///system # TCP connection / Подключение через TCP ``` > [!CAUTION] > TCP connections are **unencrypted**. Never use TCP over untrusted networks. It requires explicit enabling in `/etc/libvirt/libvirtd.conf` (`listen_tcp = 1`) and is **disabled by default** for security. > TCP-подключения **не шифруются**. Никогда не используйте TCP в ненадёжных сетях. Требует явного включения в `/etc/libvirt/libvirtd.conf` (`listen_tcp = 1`) и **отключён по умолчанию** в целях безопасности. ### Default Ports | Port | Protocol | Description (EN / RU) | | :--- | :--- | :--- | | 16509 | TCP | Libvirt remote (unencrypted) / Удалённое подключение libvirt (без шифрования) | | 16514 | TLS | Libvirt remote (encrypted) / Удалённое подключение libvirt (TLS) | | 5900+ | TCP | VNC console / VNC консоль | | 5800+ | TCP | SPICE console / SPICE консоль | | 22 | TCP | SSH (for qemu+ssh) / SSH (для qemu+ssh) | ### Log Locations - **Libvirt daemon:** `/var/log/libvirt/libvirtd.log` - **Per-VM QEMU logs:** `/var/log/libvirt/qemu/.log` - **Journal:** `journalctl -u libvirtd` --- ## Core Management (VM Lifecycle) ### List VMs / Список ВМ ```bash virsh list # List running VMs / Список запущенных ВМ virsh list --all # List all VMs / Список всех ВМ virsh list --inactive # List stopped VMs / Список остановленных ВМ virsh list --autostart # List autostart VMs / Список ВМ с автозапуском virsh list --state-running # Filter by running state / Фильтр по состоянию running virsh list --state-shutoff # Filter by stopped state / Фильтр по состоянию shutoff ``` **Sample Output:** ``` Id Name State -------------------------------- 1 ubuntu2204 running 2 centos9 running 3 win11 shutoff ``` ### Start VM / Запуск ВМ ```bash virsh start # Start VM / Запустить ВМ virsh start --paused # Start in paused state / Запустить в приостановленном состоянии virsh start --autoboot # Start if set autostart / Запустить если включён автозапуск ``` ### Shutdown VM / Выключение ВМ ```bash virsh shutdown # Graceful ACPI shutdown / Мягкое выключение через ACPI virsh shutdown --mode acpi # ACPI shutdown (default) / Выключение через ACPI (по умолчанию) virsh shutdown --mode agent # Guest agent shutdown / Выключение через гостевой агент ``` > [!TIP] > `virsh shutdown` sends an ACPI signal or uses the guest agent. The VM may take time to shut down. If it doesn't shut down within a timeout, use `virsh destroy` as a last resort. > `virsh shutdown` отправляет ACPI-сигнал или использует гостевой агент. ВМ может занять время на выключение. Если не выключается — используйте `virsh destroy` как крайнюю меру. ### Reboot VM / Перезагрузка ВМ ```bash virsh reboot # Graceful reboot / Мягкая перезагрузка ``` ### Pause / Resume / Приостановка / Возобновление ```bash virsh suspend # Pause VM (freeze processes) / Приостановить ВМ (заморозить процессы) virsh resume # Resume paused VM / Возобновить приостановленную ВМ ``` ### Force Stop / Принудительное выключение ```bash virsh destroy # Force kill VM (DANGER) / Принудительное завершение ВМ (ОПАСНО) ``` > [!CAUTION] > `virsh destroy` is equivalent to pulling the power cord on a physical machine. It does **not** shut down the guest OS cleanly. Use only when `virsh shutdown` fails. Data loss is possible. > `virsh destroy` эквивалентен выдергиванию кабеля питания из физической машины. **Не** выполняет корректное завершение работы гостевой ОС. Используйте только когда `virsh shutdown` не работает. Возможна потеря данных. ### Delete VM / Удаление ВМ ```bash virsh destroy # Force stop first / Сначала принудительно остановить virsh undefine # Remove VM definition / Удалить определение ВМ virsh undefine --remove-all-storage # Delete VM + all disks / Удалить ВМ и все диски virsh undefine --nvram # For UEFI VMs / Для UEFI ВМ (удалить NVRAM) virsh undefine --storage vda # Delete specific disk / Удалить конкретный диск ``` > [!WARNING] > `--remove-all-storage` permanently deletes all attached disk images. This is **irreversible**. Always verify your VM name and backup important data before running this command. > `--remove-all-storage` безвозвратно удаляет все подключённые образы дисков. Это **необратимо**. Всегда проверяйте имя ВМ и делайте бэкап важных данных перед выполнением. ### Autostart / Автозапуск ```bash virsh autostart # Enable autostart / Включить автозапуск virsh autostart --disable # Disable autostart / Отключить автозапуск ``` ### Define / Redefine / Определение / Переопределение ```bash virsh define .xml # Define VM from XML / Определить ВМ из XML virsh define /dev/stdin < # Define from stdin / Определить из stdin ``` --- ## VM Information & Inspection ### VM Details / Детали ВМ ```bash virsh dominfo # VM information / Информация о ВМ virsh domid # Get VM numeric ID / Получить числовой ID ВМ virsh domname # Get VM name from ID / Получить имя ВМ по ID virsh domstate # VM power state / Состояние питания ВМ virsh domuuid # Get VM UUID / Получить UUID ВМ ``` **Sample Output of `virsh dominfo`:** ``` Id: 1 Name: ubuntu2204 UUID: a1b2c3d4-e5f6-7890-abcd-ef1234567890 OS Type: hvm State: running CPU(s): 4 CPU time: 123.45s Max memory: 8388608 KiB Used memory: 4194304 KiB Persistent: yes Autostart: disable Managed save: no Security model: selinux Security DOI: 0 ``` ### Block Devices / Блочные устройства ```bash virsh domblklist # List block devices / Список блочных устройств virsh domblkinfo # Disk details / Детали диска virsh domblkstat # Disk I/O stats / Статистика ввода-вывода диска ``` **Sample Output of `virsh domblklist`:** ``` Target Source ------------------------------------------------ vda /var/lib/libvirt/images/ubuntu2204.qcow2 hdc - ``` ### Network Interfaces / Сетевые интерфейсы ```bash virsh domiflist # List network interfaces / Список сетевых интерфейсов virsh domifstat # Interface stats / Статистика интерфейса virsh domifaddr # Guest IP addresses (requires agent) / IP-адреса гостя (нужен агент) ``` **Sample Output of `virsh domiflist`:** ``` Interface Type Source Model MAC ------------------------------------------------------- vnet0 bridge br0 virtio 52:54:00:ab:cd:ef ``` ### CPU & Memory / Процессор и память ```bash virsh vcpuinfo # vCPU mapping to physical CPUs / Маппинг vCPU на физические CPU virsh vcpucount # vCPU counts / Количество vCPU virsh dommemstat # Memory statistics / Статистика памяти ``` ### Full XML Dump / Полный XML дамп ```bash virsh dumpxml # Full XML definition / Полное XML-определение virsh dumpxml > .xml # Save to file / Сохранить в файл virsh dumpxml --inactive # Inactive config (persistent) / Неактивная конфигурация virsh dumpxml --update-cap # Update to current capabilities / Обновить до текущих возможностей ``` --- ## Console Access & Interaction ### Serial Console / Серийная консоль ```bash virsh console # Connect to serial console / Подключиться к серийной консоли ``` > [!TIP] > To exit the serial console, press `Ctrl+ ]`. The guest must have a serial console configured (e.g., `console=ttyS0` in kernel boot parameters). > Для выхода из серийной консоли нажмите `Ctrl+ ]`. В госте должна быть настроена серийная консоль (например, `console=ttyS0` в параметрах загрузки ядра). ### Graphical Console / Графическая консоль ```bash virt-viewer # GUI console viewer / Графический просмотр консоли virt-viewer --connect qemu+ssh://root@/system # Remote console / Удалённая консоль ``` ### SPICE Console / SPICE консоль ```bash remote-viewer spice://:5900 # Connect via SPICE / Подключиться через SPICE ``` ### VNC Console / VNC консоль ```bash remote-viewer vnc://:5900 # Connect via VNC / Подключиться через VNC ``` ### Send Keys / Отправка клавиш ```bash virsh send-key KEY_ENTER # Send Enter key / Отправить клавишу Enter virsh send-key KEY_LEFTCTRL KEY_LEFTALT KEY_DELETE # Ctrl+Alt+Del / Отправить Ctrl+Alt+Del ``` ### Guest Agent Commands / Команды гостевого агента ```bash virsh qemu-agent-command '{"execute":"guest-info"}' # Get guest info / Информация о госте virsh qemu-agent-command '{"execute":"guest-sync","arguments":{"id":12345}}' # Sync / Синхронизация virsh qemu-agent-command '{"execute":"guest-shutdown","arguments":{"mode":"powerdown"}}' # Shutdown / Выключение virsh qemu-agent-command '{"execute":"guest-exec","arguments":{"path":"/bin/true"}}' # Run command / Запустить команду virsh qemu-agent-command '{"execute":"guest-ping"}' # Ping agent / Пинг агента virsh qemu-agent-command '{"execute":"guest-info"}' | python3 -m json.tool # Pretty print / Красивый вывод ``` > [!NOTE] > Guest agent commands require `qemu-guest-agent` installed and running inside the VM. These commands execute within the guest OS. > Команды гостевого агента требуют установленного и запущенного `qemu-guest-agent` внутри ВМ. Эти команды выполняются внутри гостевой ОС. ### QEMU Monitor (HMP/QMP) / Монитор QEMU ```bash virsh qemu-monitor-command --hmp "info status" # HMP status / Статус через HMP virsh qemu-monitor-command --hmp "info block" # Block devices / Блочные устройства virsh qemu-monitor-command --hmp "info cpus" # CPU info / Информация о CPU virsh qemu-monitor-command --hmp "info registers" # CPU registers / Регистры CPU virsh qemu-monitor-command --hmp "screendump .ppm" # Screenshot / Снимок экрана virsh qemu-monitor-command --hmp "migrate " # Migrate via HMP / Миграция через HMP virsh qemu-monitor-command --qmp '{"execute":"query-status"}' # QMP query / Запрос через QMP virsh qemu-monitor-command --qmp '{"execute":"query-blockstats"}' # Block stats / Статистика блоков virsh qemu-monitor-command --qmp '{"execute":"human-monitor-command","arguments":{"command-line":"info status"}}' # QMP→HMP bridge / Мост QMP→HMP ``` > [!WARNING] > `qemu-monitor-command` bypasses libvirt's abstraction layer. Use it only when virsh commands cannot accomplish the task. Improper use can corrupt VM state. > `qemu-monitor-command` обходит слой абстракции libvirt. Используйте только когда команды virsh не помогают. Неправильное использование может повредить состояние ВМ. --- ## Resource Management ### CPU / Процессор ```bash virsh setvcpus 4 --config # Set vCPUs (next boot) / Установить vCPU (при следующей загрузке) virsh setvcpus 4 --live # Hot-add/remove vCPU / Добавить/удалить vCPU на лету virsh setvcpus 2 --maximum --config # Set max vCPUs / Установить макс. vCPU ``` ### Memory / Память ```bash virsh setmaxmem 8G --config # Set max RAM (next boot) / Установить макс. RAM (при следующей загрузке) virsh setmem 4G --live # Hot-change RAM / Изменить RAM на лету virsh setmem 4G --config # Set RAM (next boot) / Установить RAM (при следующей загрузке) virsh dommemstat # Show memory statistics / Показать статистику памяти ``` > [!CAUTION] > You cannot set memory larger than max memory. Always call `setmaxmem` before `setmem` if you need to increase beyond the current maximum. > Нельзя установить память больше максимальной. Всегда вызывайте `setmaxmem` перед `setmem`, если нужно увеличить сверх текущего максимума. ### Device Hotplug / Подключение устройств на лету ```bash virsh attach-device .xml --live # Attach device (live) / Подключить устройство (на лету) virsh detach-device .xml --live # Detach device (live) / Отключить устройство (на лету) virsh attach-disk /path/to/disk.qcow2 vdb --subdriver qcow2 --live # Attach disk / Подключить диск virsh detach-disk vdb --live # Detach disk / Отключить диск virsh attach-interface bridge br1 --model virtio --live # Attach NIC / Подключить сетевую карту virsh detach-interface bridge --live # Detach NIC / Отключить сетевую карту ``` ### CPU Pinning & NUMA / Привязка CPU и NUMA ```bash virsh vcpupin 0 0 --live # Pin vCPU 0 to pCPU 0 / Привязать vCPU 0 к pCPU 0 virsh vcpupin --current # Show current pinning / Показать текущую привязку virsh vcpupin 0-3 0-3 --live # Pin vCPU range / Привязать диапазон vCPU virsh numatune --memnodes 0-1 --memorymode preferred --live # NUMA memory policy / NUMA-политика памяти virsh numatune --memorymode strict --memorynode 0 --live # Strict NUMA / Строгий NUMA virsh dominfo | grep numa # Show NUMA topology / Показать топологию NUMA ``` > [!TIP] > CPU pinning improves latency consistency for latency-sensitive workloads (databases, trading). Pair with NUMA-aware memory policy to avoid cross-node access penalties. > Привязка CPU улучшает согласованность задержек для нагрузок, чувствительных к latency (базы данных, трейдинг). Сочетайте с NUMA-политикой памяти для избежания штрафов кросс-узлового доступа. ### I/O Threads / Потоки ввода-вывода ```bash virsh qemu-monitor-command --hmp "info block" 2>/dev/null | grep iothread # Check iothreads / Проверить iothreads ``` **I/O Thread XML configuration (via `virsh edit `):** ```xml ``` > [!NOTE] > I/O threads are configured via XML (not a direct virsh command). Use `virsh edit ` to add `iothreadids` and assign `iothread` attributes to disk controllers or individual disks. > I/O threads настраиваются через XML (не прямой командой virsh). Используйте `virsh edit ` для добавления `iothreadids` и назначения атрибутов `iothread` дискам или контроллерам. --- ## Storage Management ### Storage Pools / Пулы хранилищ ```bash virsh pool-list --all # List all storage pools / Список всех пулов хранилищ virsh pool-list --all --details # Detailed pool list / Детальный список пулов virsh pool-info # Pool information / Информация о пуле virsh pool-define-as dir --target /data/images/ # Define directory pool / Определить пул каталога virsh pool-build # Build pool structure / Создать структуру пула virsh pool-start # Start pool / Запустить пул virsh pool-destroy # Stop and delete pool / Остановить и удалить пул virsh pool-undefine # Remove pool definition / Удалить определение пула virsh pool-autostart # Enable autostart / Включить автозапуск virsh pool-autostart --disable # Disable autostart / Отключить автозапуск ``` ### Create NFS Pool / Создание NFS пула ```bash virsh pool-define-as nfs-pool netfs --source-host --source-path /export/images --target /var/lib/libvirt/images/ # Define NFS pool / Определить NFS пул virsh pool-build nfs-pool # Build pool / Создать пул virsh pool-start nfs-pool # Start pool / Запустить пул virsh pool-autostart nfs-pool # Autostart / Автозапуск ``` ### Volumes / Тома ```bash virsh vol-list # List volumes in pool / Список томов в пуле virsh vol-info --pool # Volume details / Детали тома virsh vol-create-as 20G # Create 20G volume / Создать том 20G virsh vol-create-as 20G --format qcow2 # Create qcow2 volume / Создать qcow2 том virsh vol-delete --pool # Delete volume / Удалить том virsh vol-resize 30G --pool # Resize volume / Изменить размер тома ``` ### Disk Image Operations / Операции с образами дисков ```bash qemu-img create -f qcow2 .qcow2 20G # Create 20G disk / Создать диск 20G qemu-img info .qcow2 # Show image info / Информация об образе qemu-img resize .qcow2 +10G # Grow disk / Увеличить диск на 10G qemu-img convert -f raw -O qcow2 .raw .qcow2 # Convert format / Конвертировать формат qemu-img snapshot -l .qcow2 # List internal snapshots / Список внутренних снимков qemu-img snapshot -c .qcow2 # Create internal snapshot / Создать внутренний снимок ``` > [!WARNING] > Shrinking a qcow2 image is dangerous and can corrupt data. Always grow, never shrink without a full backup. > Уменьшение образа qcow2 опасно и может повредить данные. Всегда увеличивайте, никогда не уменьшайте без полного бэкапа. ### Block Device Operations / Операции с блочными устройствами ```bash virsh domblkinfo # Block device info / Информация о блочном устройстве virsh domblkstat # Block I/O statistics / Статистика ввода-вывода virsh domblklist --details # List all disks with details / Список всех дисков с деталями # Block commit — merge overlay into backing file / Блочное слияние — слить overlay в backing-файл virsh blockcommit --base .qcow2 --top .qcow2 --active --wait virsh blockcommit --base .qcow2 --top .qcow2 --wait # Commit & pivot / Слить и переключить # Block copy — copy disk to new file (live) / Блочное копирование — скопировать диск в новый файл (на лету) virsh blockcopy .qcow2 --wait --pivot # Copy & pivot / Копировать и переключить virsh blockcopy .qcow2 --wait # Copy without pivot / Копировать без переключения # Block resize — grow disk online / Изменение размера блока — увеличить диск онлайн virsh blockresize 30G --live ``` **Sample `virsh domblkinfo` output:** ``` Capacity: 21474836480 Physical: 21474836480 Allocation: 1073741824 Virtual size: 21474836480 ``` > [!TIP] > `blockcommit --active` keeps the VM running during the merge (dirty block tracking). Use `--pivot` to switch to the new top image after copy completes. Always snapshot before block operations. > `blockcommit --active` поддерживает работу ВМ во время слияния (отслеживание изменённых блоков). Используйте `--pivot` для переключения на новый верхний образ после завершения копирования. Всегда создавайте снимок перед блочными операциями. --- ## Networking ### Virtual Networks / Виртуальные сети ```bash virsh net-list --all # List all networks / Список всех сетей virsh net-list --all --details # Detailed network list / Детальный список сетей virsh net-info # Network details / Детали сети virsh net-dumpxml # Network XML / XML сети virsh net-start # Start network / Запустить сеть virsh net-destroy # Stop network / Остановить сеть virsh net-autostart # Enable autostart / Включить автозапуск virsh net-autostart --disable # Disable autostart / Отключить автозапуск virsh net-dhcp-leases # Active DHCP leases / Активные DHCP аренды ``` ### Create Virtual Network / Создание виртуальной сети ```bash virsh net-define-as isolated-net isolated --bridge virbr1 # Define isolated network / Определить изолированную сеть virsh net-start isolated-net # Start network / Запустить сеть virsh net-autostart isolated-net # Autostart / Автозапуск ``` ### Attach/Detach NIC / Подключение/отключение сетевой карты ```bash virsh attach-interface network default --model virtio --live # Attach NIC to network / Подключить НИС к сети virsh detach-interface network --live # Detach NIC / Отключить НИС ``` ### Bridge Networking / Сетевой мост `/etc/netplan/01-netcfg.yaml` (Ubuntu/Netplan) ```yaml network: version: 2 renderer: networkd ethernets: enp0s3: dhcp4: false bridges: br0: interfaces: [enp0s3] dhcp4: true ``` ```bash sudo netplan apply # Apply bridge config / Применить конфигурацию моста ``` > [!TIP] > Bridge networking gives VMs direct access to the physical LAN, making them appear as separate hosts. NAT (default) is simpler but isolates VMs behind the host. > Сетевой мост даёт ВМ прямой доступ к физической LAN, делая их видимыми как отдельные хосты. NAT (по умолчанию) проще, но изолирует ВМ за хостом. --- ## Snapshots & Checkpoints ### Snapshot Operations / Операции со снимками ```bash virsh snapshot-list # List all snapshots / Список всех снимков virsh snapshot-list --tree # Tree view of snapshots / Древовидный вид снимков virsh snapshot-info # Snapshot details / Детали снимка virsh snapshot-create .xml # Create from XML / Создать из XML virsh snapshot-create-as "Description" # Create named snapshot / Создать именованный снимок virsh snapshot-revert # Revert to snapshot / Откат к снимку virsh snapshot-delete # Delete snapshot / Удалить снимку virsh snapshot-current # Show current snapshot / Показать текущий снимок virsh snapshot-num # Count snapshots / Подсчёт снимков ``` **Sample Output of `virsh snapshot-list`:** ``` Name Creation Time State -------------------------------------------------------------- pre-update 2024-01-15 10:30:00 +0000 running post-update 2024-02-20 14:15:00 +0000 shutoff ``` ### Snapshot XML Example / Пример XML снимка ```xml pre-update Snapshot before system update ``` ### Checkpoint Operations / Операции с контрольными точками ```bash virsh checkpoint-list # List all checkpoints / Список всех контрольных точек virsh checkpoint-list --tree # Tree view / Древовидный вид virsh checkpoint-info # Checkpoint details / Детали контрольной точки virsh checkpoint-create-as "Description" # Create named checkpoint / Создать именованную точку virsh checkpoint-create-as "Desc" --reuse / --no-shutdown # Advanced options / Расширенные опции virsh checkpoint-revert # Revert to checkpoint / Откат к контрольной точке virsh checkpoint-delete # Delete checkpoint / Удалить контрольную точку virsh checkpoint-current # Show current checkpoint / Показать текущую точку virsh checkpoint-dumpxml # Checkpoint XML / XML контрольной точки virsh domcheckpoint-set # Set checkpoint name / Установить имя контрольной точки virsh domcheckpoint-get # Get checkpoint metadata / Получить метаданные контрольной точки ``` **Sample `virsh checkpoint-list` output:** ``` Name Creation Time State ------------------------------------------------------------------ pre-update 2024-01-15 10:30:00 +0000 running post-update 2024-02-20 14:15:00 +0000 shutoff ``` > [!NOTE] > Checkpoints are similar to snapshots but also capture guest memory state. They require the QEMU guest agent for full memory capture. Use `--no-shutdown` for faster (but less consistent) checkpoints. > Контрольные точки похожи на снимки, но также сохраняют состояние памяти гостя. Требуют QEMU guest agent для полного захвата памяти. Используйте `--no-shutdown` для более быстрых (но менее согласованных) контрольных точек. --- ## Migration ### Live Migration (Running VM) / Живая миграция (запущенная ВМ) ```bash virsh migrate qemu+ssh:///system # Live migrate / Живая миграция virsh migrate --live qemu+ssh:///system # Explicit live / Явно live virsh migrate --persistent qemu+ssh:///system # Make persistent on dest / Сделать постоянной на цели virsh migrate --suspend qemu+ssh:///system # Suspend after migration / Приостановить после миграции virsh migrate --abort-on-error qemu+ssh:///system # Abort on error / Прервать при ошибке virsh migrate --unsafe qemu+ssh:///system # Allow unsafe options / Разрешить небезопасные опции ``` > [!TIP] > Live migration moves a running VM to another host with minimal downtime. The VM continues to run during migration. Requires shared or identical storage, and compatible CPU features on both hosts. > Живая миграция переносит запущенную ВМ на другой хост с минимальным простоем. ВМ продолжает работать во время миграции. Требует общего или идентичного хранилища и совместимых возможностей CPU на обоих хостах. ### Offline Migration (Stopped VM) / Оффлайн миграция (остановленная ВМ) ```bash virsh migrate qemu+ssh:///system # Offline migrate (VM must be off) / Оффлайн миграция (ВМ должна быть выключена) virsh migrate --offline qemu+ssh:///system # Explicit offline / Явно offline virsh migrate --offline --persistent qemu+ssh:///system # Persistent on dest / Постоянная на цели ``` > [!NOTE] > Offline migration moves the VM definition and disk images. No downtime is needed since the VM is already off. Ensure sufficient disk space on the destination. > Оффлайн миграция переносит определение ВМ и образы дисков. Простой не требуется, так как ВМ уже выключена. Убедитесь в достаточном месте на диске на целевом хосте. ### Migration Options / Опции миграции | Option | Description (EN / RU) | | :--- | :--- | | `--live` | Live migration (running VM) / Живая миграция (запущенная ВМ) | | `--offline` | Offline migration (stopped VM) / Оффлайн миграция (остановленная ВМ) | | `--persistent` | Make VM persistent on destination / Сделать ВМ постоянной на цели | | `--suspend` | Suspend VM after migration / Приостановить ВМ после миграции | | `--abort-on-error` | Abort if migration error occurs / Прервать при ошибке миграции | | `--unsafe` | Allow unsafe migration options / Разрешить небезопасные опции миграции | | `--destxml` | Override destination XML / Переопределить XML назначения | | `--copy-storage-all` | Copy all storage / Копировать все хранилище | | `--copy-storage-inc` | Copy only new/changed storage / Копировать только новое/изменённое хранилище | ### Check Migration Progress / Проверка прогресса миграции ```bash virsh domjobinfo # Migration job info / Информация о задаче миграции virsh domjobabort # Abort migration / Прервать миграцию ``` --- ## Templates & Cloning ### Create VM Template from Running VM / Создание шаблона ВМ из запущенной ВМ ```bash virsh shutdown # Graceful shutdown / Мягкое выключение virsh dumpxml > template.xml # Export XML definition / Экспорт XML-определения # Edit template.xml: remove UUID, MAC, name / Редактировать template.xml: удалить UUID, MAC, имя virsh define template.xml # Define template VM / Определить шаблонную ВМ virsh autostart --disable template # Disable autostart for template / Отключить автозапуск шаблона ``` > [!TIP] > Set `autostart=disable` on template VMs to prevent them from booting accidentally. Templates should be kept in a clean, unconfigured state. > Отключите автозапуск на шаблонных ВМ, чтобы предотвратить случайную загрузку. Шаблоны должны поддерживаться в чистом, не настроенном состоянии. ### Clone VM from Template / Клонирование ВМ из шаблона ```bash virt-clone --original