Под капотом · Виртуализация · Бэкапы
Инкрементальные бэкапы
Пользователь настраивает копирование только изменённых блоков. Для этого он вводит команды:
Команда
virsh checkpoint-list vm1 virsh backup-begin vm1 inc.xml
После выполнения команд копируются только изменённые блоки:
- Команда checkpoint-list показывает имя предыдущей точки;
- Команда backup-begin с <incremental> берёт её как точку отсчёта;
- В qcow2 для этого живёт карта изменений.
-
пользователь 1. Пользователь вводит бэкап с чекпоинтом
virDomainBackupBegin(xml, checkpointXml)
Чекпоинт создаётся вместе с бэкапом - он и станет точкой отсчёта для следующих.
-
libvirt 2. Демон описывает чекпоинт
<domaincheckpoint> <disks><disk name="vda" checkpoint="bitmap"/></disks>
Только qcow2 на активном слое: для других форматов инкрементальный бэкап недоступен.
-
диск / RAM 3. В образе включается карта изменений
bitmaps extension: dirty tracking bitmap гранулярность = 1 << granularity_bits (9…31)
Один бит = «в этот диапазон писали, пока карта включена». Живёт внутри qcow2 - образ нельзя подменять.
-
пользователь 4. Пользователь вводит инкрементальный бэкап
<domainbackup> <incremental>1525889631</incremental>
push: в файл пишутся только изменения. pull: сервер сам сообщает клиенту, какие участки изменились.
-
QEMU 5. QEMU отдаёт только изменённое
push → blockdev-backup с картой изменений pull → NBD_OPT_SET_META_CONTEXT
Разница только в том, кто забирает данные; объём одинаковый.
-
libvirt 6. Демон продолжает цепочку
новый чекпоинт → parent = предыдущий
Оценить объём изменений можно, но это может быть дорого по времени.