Под капотом · Виртуализация · Бэкапы
Резервная копия на внешний сервер (pull)
Пользователь отдаёт диски внешнему серверу, чтобы копию забирал он. Для этого он вводит команды:
Команда
virsh backup-begin vm1 backup-pull.xml virsh domjobinfo vm1
После выполнения команд копию забирает внешняя система:
- Команда backup-begin с mode=pull поднимает NBD-сервер;
- Команда domjobinfo показывает адрес экспорта и прогресс;
- На время операции нужен временный файл под scratch.
-
пользователь 1. Пользователь вводит команду pull-бэкапа
<domainbackup mode="pull"> <server transport="unix" socket="/run/bk.sock"/>
Порт при необходимости выделяется из диапазона в /etc/libvirt/qemu.conf.
-
libvirt 2. Демон готовит временное хранилище
<disk name="vda" type="file"> <scratch file="/var/tmp/vda.scratch"/>
Файл создаёт и удаляет libvirt; блочное устройство должно существовать заранее и быть отформатировано.
-
QEMU 3. QEMU поднимает NBD-сервер
экспорты: vda, vdb … на момент старта бэкапа
Клиент видит стабильный снимок, хотя гость продолжает писать.
-
диск / RAM 4. Внешняя система читает данные
NBD read → хранилище бэкапов # здесь проходит основное время
В этом и смысл: тяжёлое чтение не нагружает гипервизор.
-
libvirt 5. Демон закрывает операцию
virDomainBackupEnd() scratch удалён, NBD остановлен
Если клиент отвалился, job надо закрыть корректно - иначе временные файлы останутся.