Снапшоты и клонирование — одни из самых мощных возможностей 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
# Убедиться, что full-клон не зависит от источника
qm config 103 | grep scsi0
Если после отката VM запускается и работает штатно, а у полного клона диск указывает на отдельное хранилище — результат корректный. Про создание шаблонов и Cloud-Init читайте в статье шаблоны и Cloud-Init в Proxmox.