Знімки та клонування — одні з найпотужніших можливостей Proxmox VE. Знімок дозволяє миттєво зафіксувати стан VM і повернутися до нього в будь-який момент, а клонування — швидко створити ідентичну копію.
Знімки VM
# Створити знімок (VM може бути запущена)
qm snapshot 100 pre-update --description "Перед оновленням системи" --vmstate 1
# Список знімків
qm listsnapshot 100
# Відкотити VM до знімка
qm rollback 100 pre-update
# Видалити знімок
qm delsnapshot 100 pre-update
Прапорець --vmstate 1 зберігає оперативну пам'ять VM — це дозволяє відновити її точно в робочому стані.
Клонування VM
| Тип клона | Опис | Час | Залежність від джерела |
|---|---|---|---|
| Linked Clone | Використовує вихідний диск як базу (CoW) | Секунди | Так (не можна видалити джерело) |
| Full Clone | Повна незалежна копія | Хвилини | Ні |
# Повний клон у нову VM з ID 101
qm clone 100 101 --name ubuntu-copy --full 1
# Зв'язаний клон (джерело має бути шаблоном)
qm clone 100 102 --name ubuntu-linked
# Клон на інше сховище
qm clone 100 103 --name ubuntu-ceph --full 1 --storage ceph-pool
Створення шаблону VM
Шаблон — це "заморожена" VM, з якої створюються зв'язані клони. Дозволяє розгорнути нову VM за секунди:
# Підготувати VM до використання як шаблон
# 1. Встановити cloud-init (для Linux)
apt install cloud-init -y
# 2. Очистити унікальні дані
cloud-init clean
truncate -s 0 /etc/machine-id
# 3. На хості Proxmox — перетворити VM на шаблон
qm template 100
# 4. Тепер клони створюються миттєво
qm clone 100 201 --name new-vm --full 0
Інтеграція Cloud-Init
Cloud-Init дозволяє автоматично налаштовувати VM під час першого запуску (hostname, SSH-ключі, мережеві налаштування):
# Додати диск Cloud-Init до VM
qm set 100 --ide2 local-lvm:cloudinit
# Налаштувати параметри Cloud-Init
qm set 100 --ciuser ubuntu --cipassword SecurePass --sshkey ~/.ssh/id_rsa.pub --ipconfig0 ip=dhcp
# Перестворити образ Cloud-Init
qm cloudinit dump 100 network
Помилки знімків і клонування
Три помилки, з якими найчастіше стикаються під час роботи зі знімками та клонами — усі три пов'язані не із самою операцією, а зі станом, що лишився від попередньої незавершеної спроби.
TASK ERROR: unable to create image: rbd: create error: (17) File exists
cannot lock file '/var/lock/qemu-server/100.conf' - got timeout
TASK ERROR: zfs error: cannot destroy 'tank/vm-100-disk-0@pre-update': snapshot has dependent clones
- rbd: create error: (17) File exists: попередня невдала спроба клонування на Ceph залишила частково створений образ. Видаліть його вручну через
rbd rmперед повторною спробою. - cannot lock file ... got timeout: над VM вже виконується інша операція (бекап, міграція, інший знімок). Дочекайтеся її завершення — паралельні операції з конфігурацією VM заборонені навмисно.
- snapshot has dependent clones: у ZFS-знімка є linked clone — спочатку виконайте
qm cloneз прапорцем--full 1, щоб перетворити залежний клон на незалежний, а тоді видаляйте знімок.
У всіх трьох випадках корисно спочатку подивитися список активних завдань і знімків тієї самої VM, перш ніж повторювати команду — повторний запуск на брудному стані зазвичай лише додає нову помилку поверх старої.
Коли знімки і клони не підходять
Обидві технології економлять час, але не замінюють інші механізми захисту даних.
- Знімок без
--vmstate 1— це crash-consistent копія диска, а не гарантія цілісності даних застосунку; для СУБД додатково використовуйте штатний дамп. - Linked Clone не можна розглядати як незалежну копію: джерело (шаблон) не можна видалити чи суттєво змінити, доки існує хоча б один пов'язаний клон.
- Знімок — не резервна копія: він живе на тому самому сховищі й тому самому хості, що й сама VM, і зникає разом із нею у разі відмови диска чи хоста.
Перевірка результату
Після створення знімка чи клону переконайтеся, що вони справді робочі.
# Список знімків та їхній розмір
qm listsnapshot 100
# Після відкату — перевірити стан конфігурації та запуск
qm rollback 100 pre-update
qm start 100
qm status 100
# Переконатися, що повний клон не залежить від джерела
qm config 103 | grep scsi0
Якщо після відкату VM запускається і працює штатно, а в повного клона диск вказує на окреме сховище — результат коректний. Про створення шаблонів і Cloud-Init читайте у статті шаблони та Cloud-Init у Proxmox.