Определение простыми словами
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 не применяется.