Под капотом · Виртуализация · Снимки
Снимок диска (внешний)
Пользователь делает снимок диска так, чтобы данные не копировались целиком. Для этого он вводит команду:
virsh snapshot-create-as vm1 snap1 --disk-only --atomic
После выполнения команды рядом появляется пустой оверлей, а прежний файл становится доступен только для чтения.
-
пользователь 1. Пользователь вводит команду внешнего снимка
virDomainSnapshotCreateXML(xml, VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY | VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC)
DISK_ONLY - без памяти; ATOMIC - это тот самый --atomic в CLI: не оставлять полуготовый снимок. Без предварительного virDomainFSFreeze снимок crash-consistent - как после внезапного выключения.
-
libvirt 2. Демон описывает, что снимать
<domainsnapshot> <disks><disk name="vda" snapshot="external"/></disks>
Можно исключить диск (snapshot="no") или задать имя нового файла через <source file=…>.
-
QEMU 3. QEMU создаёт оверлей
{"execute":"blockdev-snapshot-sync", "arguments":{"node-name":"node-A", "snapshot-file":"b.qcow2","format":"qcow2"}}Это примитив блочного слоя: новый слой поверх текущего образа, без копирования данных.
-
диск / RAM 4. Цепочка образов изменилась
[base qcow2] ← [overlay qcow2] ← сюда пишет QEMU
Оригинальный файл стал доступен только для чтения - это и есть «состояние на момент снимка».
-
libvirt 5. Активная конфигурация переключилась
active XML: source file → /path/to/new <state>running</state>, creationTime
Поэтому «изменился путь к диску» - ВМ действительно работает уже на другом файле.
-
диск / RAM 6. Главное, что стоит запомнить
точка во времени - это цепочка, а не файл состояние «до» = base, а не «файл с датой в имени»
Имя файла вводит в заблуждение: данные того момента лежат во всей цепочке ниже.
-
пользователь 7. Пользователь видит снимок в дереве
virsh snapshot-list vm1 --tree
Снимки образуют дерево parent/child; ветки появляются после откатов.