Определение простыми словами
libvirt — это открытая библиотека и API, написанная на C, которая скрывает различия между гипервизорами за единым интерфейсом. Вместо того чтобы учить команды KVM, Xen или VMware по отдельности, администратор работает с одним набором вызовов: создать ВМ, запустить, остановить, снять снимок. Демон libvirtd принимает запросы и транслирует их в нативные вызовы нужного гипервизора.
Библиотека входит в стандартные репозитории всех major дистрибутивов Linux. На её базе работают virt-manager, virsh и платформа Proxmox VE. Без libvirt невозможна большинство операций управления ВМ в современных дата-центрах на Linux.
Сравнение
| Инструмент | Уровень | Поддерживаемые гипервизоры | GUI |
|---|---|---|---|
| libvirt | API / daemon | KVM, QEMU, Xen, VMware, LXC | Нет (основа для GUI) |
| virsh | CLI поверх libvirt | Все, что поддерживает libvirt | Нет |
| virt-manager | GUI поверх libvirt | Все, что поддерживает libvirt | Да (GTK) |
| Proxmox VE | Платформа поверх libvirt/QEMU | KVM, LXC | Да (Web) |
Кейсы использования
- Автоматизация через API — Python-скрипт или Ansible-плейбук создаёт, клонирует и удаляет ВМ через libvirt Python bindings без ручных команд.
- Управление пулами хранилища — libvirt описывает пулы дисков (dir, LVM, iSCSI, NFS) и тома в XML, что упрощает провизионирование образов qcow2.
- Live Migration — перенос работающей ВМ между физическими хостами командой
virsh migrate --liveчерез libvirt без остановки сервиса. - Снимки (snapshots) — атомарный снимок диска и состояния RAM перед обновлением ПО:
virsh snapshot-create-as vm1 before-update. - Сетевые бриджи и NAT — libvirt создаёт виртуальные сети (virbr0) с DHCP и NAT для изолированных стендов разработки.
- Негативный пример: использовать libvirt поверх VMware ESXi в production — поддержка ESXi через libvirt ограничена и не получает активного развития; для ESXi используйте vSphere API или govc напрямую.
Технические детали
libvirt описывает конфигурацию ВМ в XML-формате. Минимальный пример домена KVM:
virsh define /etc/libvirt/qemu/myvm.xml
virsh start myvm
virsh list --all
Подключение к удалённому хосту по SSH без пароля (ключ уже добавлен):
virsh -c qemu+ssh://root@192.168.1.10/system list --all
Клонирование существующей ВМ с новым MAC-адресом:
virt-clone --original myvm --name myvm-clone --auto-clone
Просмотр XML-конфигурации запущенной ВМ:
virsh dumpxml myvm
Статус демона и логи:
systemctl status libvirtd
journalctl -u libvirtd -n 50
Версия и поддерживаемые драйверы:
virsh version --daemon
virsh capabilities | grep -A2 'guest>'
libvirt хранит конфигурации ВМ в /etc/libvirt/qemu/, логи ВМ — в /var/log/libvirt/qemu/, образы по умолчанию — в /var/lib/libvirt/images/. Сокет управления: /var/run/libvirt/libvirt-sock. Пользователь должен состоять в группе libvirt для работы без sudo.
🔥 Где это применяется
Частые вопросы
Чем libvirt отличается от QEMU и KVM?
KVM — модуль ядра Linux для аппаратной виртуализации, QEMU — эмулятор оборудования. libvirt — управляющий слой поверх них: принимает команды через API и транслирует в вызовы QEMU/KVM, добавляя управление сетью, хранилищем и снимками.
Можно ли управлять libvirt удалённо?
Да. libvirt поддерживает подключение через SSH (qemu+ssh://), TLS (qemu+tls://) и TCP. Достаточно установить libvirt-client на рабочей машине и указать URI удалённого хоста в команде virsh -c.
Поддерживает ли libvirt контейнеры LXC?
Да, libvirt имеет драйвер LXC и управляет контейнерами через тот же XML-формат и те же команды virsh. Однако это отдельная реализация, не совместимая с lxd или docker.
Как добавить пользователя в группу libvirt?
Выполните команду usermod -aG libvirt $USER и перелогиньтесь. После этого virsh и virt-manager будут работать без sudo.