Под капотом · Виртуализация · Обслуживание
Наведение порядка в цепочке образов
Пользователь вливает оверлеи в базу, чтобы укоротить цепочку образов. Вот какие команды он использует:
Команда
virsh blockcommit vm1 vda --active --pivot virsh blockpull vm1 vda --wait
После выполнения команд цепочка становится короче:
- Команда blockcommit вливает оверлеи в базу и переключает на неё живой процесс;
- Команда blockpull подтягивает данные из backing в активный слой;
- Промежуточные файлы после этого невалидны и удаляются вручную.
-
пользователь 1. Пользователь вводит команду слияния
virDomainBlockCommit(disk, base, top, …) # или virDomainBlockPull(disk, …)
Commit: оверлеи → в базу. Pull (stream): база → в активный слой.
-
QEMU 2. QEMU выполняет job в фоне
{"execute":"block-commit", "arguments":{"device":"node-D","top":"d.qcow2","base":"a.qcow2"}}ВМ продолжает работать; прогресс виден в query-block-jobs.
-
QEMU 3. Для активного слоя нужна вторая фаза
{"event":"BLOCK_JOB_READY"} → block-job-completeТолько active commit требует подтверждения; остальные job завершаются сами.
-
диск / RAM 4. Цепочка стала короче
[A] ← [B] ← [C] ← [D] → [A] ← [D]
Промежуточные образы после commit невалидны: строить на них новые слои нельзя.
-
диск / RAM 5. После stream - наоборот
stream: промежуточные образы остаются валидными
Их можно использовать как основу для новых оверлеев - разница принципиальная.
-
libvirt 6. Файлы сами не удаляются
QEMU не удаляет слитые файлы → удалять вручную
Отсюда «место не освободилось» после успешного слияния.