virsh — управление KVM-машинами через CLI | Глоссарий FREEHOSTING

virsh

Virsh CLI for libvirt
virsh — virsh — командная строка для управления виртуальными машинами через libvirt. Позволяет запускать, останавливать, клонировать и настраивать VM на KVM/QEMU без графического интерфейса.

Определение простыми словами

virsh (virtual shell) — это CLI-инструмент, входящий в состав libvirt. Он предоставляет единый интерфейс для управления виртуальными машинами на гипервизорах KVM, QEMU, Xen и других, поддерживаемых libvirt. По сути, virsh — это оболочка, которая транслирует команды пользователя в вызовы libvirt API.

Инструмент работает как в интерактивном режиме (собственная оболочка со строкой ввода), так и в режиме одиночных команд — удобно для скриптов и автоматизации. Большинство операций, доступных в virt-manager, реализованы в virsh, но без GUI-зависимостей.

Сравнение

Инструмент Интерфейс Гипервизоры Автоматизация
virsh CLI / скрипты KVM, QEMU, Xen, LXC Отличная (bash, cron, Ansible)
virt-manager GUI (GTK) KVM, QEMU, Xen Слабая
Proxmox Web UI Web + API KVM, LXC Хорошая (REST API)

Кейсы использования

  • Управление жизненным циклом VM: запуск, остановка, пауза, перезагрузка без GUI на headless-серверах.
  • Создание снапшотов: virsh snapshot-create-as перед обновлениями ОС или приложений.
  • Клонирование машин: быстрое развёртывание однотипных VM с помощью virt-clone в связке с virsh.
  • Живая миграция: перенос работающей VM между хостами через virsh migrate --live без остановки сервисов.
  • Мониторинг ресурсов: просмотр потребления CPU и памяти через virsh domstats и virsh top.
  • Автоматизация в CI/CD: управление тестовыми средами через bash-скрипты и Ansible-модуль community.libvirt.

Негативный пример: использовать virsh для управления контейнерами Docker — неподходящий инструмент. virsh работает с виртуальными машинами через libvirt, а не с контейнерным runtime. Для Docker используйте docker CLI или podman.

Технические детали

Установка и базовые команды на Ubuntu/Debian:

apt install libvirt-clients libvirt-daemon-system qemu-kvm
virsh list --all
virsh start myvm
virsh shutdown myvm
virsh destroy myvm
virsh dominfo myvm
virsh snapshot-create-as myvm snap1 --description 'before update' --atomic
virsh snapshot-revert myvm snap1
virsh migrate --live myvm qemu+ssh://remotehost/system

Подключение к удалённому хосту без пароля (через SSH-ключ):

virsh -c qemu+ssh://user@remotehost/system list --all

Дамп XML-конфигурации VM (для резервного копирования или редактирования):

virsh dumpxml myvm > myvm.xml
virsh define myvm.xml

Команды выполняются от пользователя с доступом к сокету libvirt (/var/run/libvirt/libvirt-sock) — обычно root или члены группы libvirt. Права настраиваются через polkit.

Частые вопросы

Чем virsh отличается от virt-manager?

virsh — текстовый CLI, работает на серверах без графической оболочки и удобен для скриптов. virt-manager — GUI-приложение на GTK, требует X11 или VNC. Функционально они обращаются к одному и тому же libvirt API.

Можно ли управлять virsh удалённо?

Да. Используйте URI вида qemu+ssh://user@host/system — virsh подключается к libvirtd на удалённом хосте через SSH. Для беспарольного доступа настройте SSH-ключи заранее.

Как посмотреть список всех VM, включая выключенные?

Команда virsh list --all выводит все виртуальные машины независимо от их состояния: running, shut off, paused.

Поддерживает ли virsh контейнеры LXC?

Да, если libvirt скомпилирован с поддержкой LXC. Используйте URI lxc:/// вместо qemu:///system. Однако для Docker-контейнеров virsh не применяется.