Под капотом · Виртуализация · Снимки
Удаление снимка
Пользователь удаляет ненужный снимок. Для этого он вводит команду:
Команда
virsh snapshot-delete vm1 snap1
После выполнения команды снимок исчезает из списка, но для внешнего варианта данные сначала вливаются в базу.
-
пользователь 1. Пользователь вводит команду удаления снимка
virDomainSnapshotDelete(snap, flags)
Флаги решают, что делать с дочерними снимками и с дисковыми метаданными.
-
libvirt 2. Демон выбирает стратегию
внутренний → убрать запись из таблицы qcow2 внешний → слить сегмент цепочки (blockcommit)
Удаление снимка - не всегда «удалить файл»: сначала данные надо влить в базу.
-
QEMU 3. QEMU выполняет слияние
block-commit / merge → BLOCK_JOB_COMPLETED
Пока job идёт, снимок нельзя считать удалённым.
-
диск / RAM 4. Цепочка укорачивается
[A] ← [B] ← [C] → [A] ← [C]
Промежуточный образ после слияния невалиден: новые оверлеи на нём строить нельзя.
-
libvirt 5. Если операция прервалась
<snapshotDeleteInProgress/> # образы несогласованы - удаление надо довести
С 9.0 такой элемент в XML - сигнал «не трогай руками», иначе повреждение образа.