Откатить на предыдущий снимок Proxmox без потери текущего снимка ZFS?

Вопрос или проблема

Используя Proxmox с ZFS хранилищами, возможно ли восстановить LXC контейнер или QEMU виртуальную машину к более раннему снимку (не самому последнему), не теряя или уничтожая никакие снимки?

Попытка сделать это через графический интерфейс Proxmox выдает сообщение об ошибке:

невозможно откатить, ‘snapshotname’ не является самым последним снимком на ‘storage:vmname’

Другими словами, возможно ли иметь нелинейные снимки? Например, дерево снимков, которое выглядит вот так, где есть истинное “дерево” с ветвями, и некоторые снимки имеют более чем одного потомка?

Скриншот, показывающий, что снимок "creation" на уровне корня имеет двух потомков: "initial" и "wip-working-qemu", и оба имеют независимые деревья снимков.

Несколько источников в интернете указывают на то, что это невозможно (пример 1 или пример 2), но я знаю, что это неверно, потому что я сам это сделал 🙂

Да, несмотря на многочисленные сообщения на форумах и документацию, указывающие на то, что это возможно только с qcow2, это довольно легко сделать с помощью командной строки и ZFS клонов:

  1. Определите текущие 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

  2. Клонируйте снимки всех релевантных томов и создайте новые 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
    
  3. Отредактируйте файл конфигурации VM или LXC (в директории /etc/pve/qemu-server или /etc/pve/lxc) и внесите два изменения: обновите пути к томам и установите свойство parent на имя снимка, к которому вы откатываетесь (creation в моем примере)

    • Для LXC контейнера отредактируйте аргумент rootfs, а также все mp$n аргументы
    • Для VM отредактируйте строки scsi$n или строки ide$n, если используете IDE диски
  4. Интерфейс пользователя теперь должен показывать дерево снимков, и все должно работать как ожидается. Вы можете создавать новые снимки как обычно. Если вы хотите вернуться к предыдущему дереву, вам нужно будет отредактировать файл конфигурации и отрегулировать parent, а также восстановить/отредактировать строки хранилищ, которые вы изменили.

Ответ или решение

Если вы используете Proxmox с хранилищем ZFS и хотите восстановить LXC-контейнер или виртуальную машину QEMU до предыдущего снимка, сохранив при этом все текущие снимки, то это возможно посредством использования ZFS клонов через командную строку. Ниже приведено детальное руководство по выполнению этой операции.

Шаги для отката к предыдущему снимку ZFS без потери текущих снимков

  1. Определите существующие 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
  2. Клонирование снимков: Создайте новые 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
  3. Редактирование конфигурационного файла: Откройте конфигурационный файл вашей виртуальной машины или контейнера и внесите следующие изменения:

    • Обновите пути к новым наборам данных.
    • Установите свойство parent на имя снимка, к которому вы откатываетесь.

    Для LXC контейнера внесите изменения в аргумент rootfs и любые параметры mp$n. Для виртуальной машины измените строки scsi$n или ide$n в зависимости от используемого типа диска.

  4. Проверьте результат в пользовательском интерфейсе: Теперь в интерфейсе Proxmox должен отображаться древовидный вид снимков. Вы можете создавать новые снимки как обычно. В случае необходимости возврата к предыдущей конфигурации, вам придется заново отредактировать свойства parent и восстановить изначальные пути к хранилищу.

Эти шаги позволяют управлять сложными структурами снимков без потери данных и обеспечивают гибкость работы с различными состояниями вашей виртуальной среды. Использование данной методики позволяет поддерживать нелинейную версию снимков, что является мощным инструментом для тестирования и развертывания приложений в Proxmox с данных в ZFS.

Оцените материал
Добавить комментарий

Капча загружается...