Вопрос или проблема
Используя Proxmox с ZFS хранилищами, возможно ли восстановить LXC контейнер или QEMU виртуальную машину к более раннему снимку (не самому последнему), не теряя или уничтожая никакие снимки?
Попытка сделать это через графический интерфейс Proxmox выдает сообщение об ошибке:
невозможно откатить, ‘snapshotname’ не является самым последним снимком на ‘storage:vmname’
Другими словами, возможно ли иметь нелинейные снимки? Например, дерево снимков, которое выглядит вот так, где есть истинное “дерево” с ветвями, и некоторые снимки имеют более чем одного потомка?
Несколько источников в интернете указывают на то, что это невозможно (пример 1 или пример 2), но я знаю, что это неверно, потому что я сам это сделал 🙂
Да, несмотря на многочисленные сообщения на форумах и документацию, указывающие на то, что это возможно только с qcow2, это довольно легко сделать с помощью командной строки и ZFS клонов:
-
Определите текущие ZFS снимки, которые представляют снимок, к которому вы хотите откатиться. Вы можете проверить файл конфигурации VM или LXC в директории
/etc/pve/qemu-server/
или/etc/pve/lxc/
, если вы не уверены. Используйтеzfs list
(возможно, в сочетании сgrep
по мере необходимости), чтобы их найти.В этом примере предположим, что я работаю с LXC контейнером ID
113
, поэтому мои ZFS файловые системыrpool/data/lxc/subvol-113-disk-0@creation
иrpool/data/lxc/subvol-113-disk-1@creation
-
Клонируйте снимки всех релевантных томов и создайте новые ZFS множества, используя
zfs clone $dataset@$snapshot $new_dataset
. Я обычно назначаю новому множеству имя следующего доступного номера диска, но вы можете выбрать почти любое новое имя по своему усмотрению:zfs clone rpool/data/lxc/subvol-113-disk-0@creation rpool/data/lxc/subvol-113-disk-2 zfs clone rpool/data/lxc/subvol-113-disk-1@creation rpool/data/lxc/subvol-113-disk-3
-
Отредактируйте файл конфигурации VM или LXC (в директории
/etc/pve/qemu-server
или/etc/pve/lxc
) и внесите два изменения: обновите пути к томам и установите свойствоparent
на имя снимка, к которому вы откатываетесь (creation
в моем примере)- Для LXC контейнера отредактируйте аргумент
rootfs
, а также всеmp$n
аргументы - Для VM отредактируйте строки
scsi$n
или строкиide$n
, если используете IDE диски
- Для LXC контейнера отредактируйте аргумент
-
Интерфейс пользователя теперь должен показывать дерево снимков, и все должно работать как ожидается. Вы можете создавать новые снимки как обычно. Если вы хотите вернуться к предыдущему дереву, вам нужно будет отредактировать файл конфигурации и отрегулировать
parent
, а также восстановить/отредактировать строки хранилищ, которые вы изменили.
Ответ или решение
Если вы используете Proxmox с хранилищем ZFS и хотите восстановить LXC-контейнер или виртуальную машину QEMU до предыдущего снимка, сохранив при этом все текущие снимки, то это возможно посредством использования ZFS клонов через командную строку. Ниже приведено детальное руководство по выполнению этой операции.
Шаги для отката к предыдущему снимку ZFS без потери текущих снимков
-
Определите существующие ZFS снимки: Для начала, вы должны выявить текущие ZFS снимки, представляющие состояние, к которому вы хотите откатиться. Вы можете это сделать, проверив конфигурационный файл вашей виртуальной машины или контейнера, расположенный в
/etc/pve/qemu-server/
или/etc/pve/lxc/
. Используйте командуzfs list
и утилитуgrep
для фильтрации нужных снимков.Например, если вы работаете с LXC-контейнером ID
113
, ваши ZFS-файловые системы могут быть такими:rpool/data/lxc/subvol-113-disk-0@creation rpool/data/lxc/subvol-113-disk-1@creation
-
Клонирование снимков: Создайте новые ZFS наборы данных на основе требуемых снимков с помощью команды
zfs clone $dataset@$snapshot $new_dataset
. Рекомендуется давать новым наборам данных уникальное имя, например, следующий доступный номер диска или любое другое удобное имя.zfs clone rpool/data/lxc/subvol-113-disk-0@creation rpool/data/lxc/subvol-113-disk-2 zfs clone rpool/data/lxc/subvol-113-disk-1@creation rpool/data/lxc/subvol-113-disk-3
-
Редактирование конфигурационного файла: Откройте конфигурационный файл вашей виртуальной машины или контейнера и внесите следующие изменения:
- Обновите пути к новым наборам данных.
- Установите свойство
parent
на имя снимка, к которому вы откатываетесь.
Для LXC контейнера внесите изменения в аргумент
rootfs
и любые параметрыmp$n
. Для виртуальной машины измените строкиscsi$n
илиide$n
в зависимости от используемого типа диска. -
Проверьте результат в пользовательском интерфейсе: Теперь в интерфейсе Proxmox должен отображаться древовидный вид снимков. Вы можете создавать новые снимки как обычно. В случае необходимости возврата к предыдущей конфигурации, вам придется заново отредактировать свойства
parent
и восстановить изначальные пути к хранилищу.
Эти шаги позволяют управлять сложными структурами снимков без потери данных и обеспечивают гибкость работы с различными состояниями вашей виртуальной среды. Использование данной методики позволяет поддерживать нелинейную версию снимков, что является мощным инструментом для тестирования и развертывания приложений в Proxmox с данных в ZFS.