BackupZit

Как делать резервные копии виртуальных машин Proxmox VE

Полное руководство: от пустого узла Proxmox до запланированных, зашифрованных и дедуплицированных копий всех ВМ и контейнеров — с внешней копией, автоматическими тестами восстановления и ВМ, которая при необходимости за секунды запускается прямо из копии.

Что вы настроите

BackupZit делает резервные копии виртуальных машин (QEMU) и контейнеров (LXC) Proxmox VE, ничего не устанавливая внутрь гостей. Небольшой агент работает на каждом узле Proxmox, делает временный снимок каждого гостя, читает его диски и сохраняет их на выбранное хранилище. Веб-консоль планирует задания, хранит историю и запускает восстановление.

У Proxmox VE есть и собственные средства резервного копирования: vzdump и Proxmox Backup Server. Если у вас только Proxmox, это хороший бесплатный выбор. BackupZit имеет смысл, если нужна одна консоль для Proxmox и серверов Windows и Linux, VMware, Hyper-V, баз данных и Microsoft 365, или такие функции, как копии с проверкой загрузки и реплики в другом кластере.

Что нужно

  • Один или несколько узлов с Proxmox VE 7, 8 или 9 (они основаны на Debian, поэтому подходит Debian-пакет агента).
  • Место для консоли BackupZit: небольшая Linux-ВМ с 2 vCPU, 2–4 ГБ ОЗУ и диском 16–20 ГБ. Консоль сама не хранит данные копий, поэтому может работать как ВМ в том же кластере.
  • Хранилище для копий вне узла Proxmox — например, Linux-сервер или NAS по SFTP, общая папка SMB, S3-совместимый бакет или защищённый репозиторий BackupZit (hardened repository). Агенты пишут в него напрямую.
  • Сеть: агенты подключаются к консоли по TCP-порту 8443.

Шаг 1 — Установите консоль

Быстрее всего на Proxmox использовать готовый образ appliance backupzit-appliance.qcow2 со страницы загрузки (Debian, PostgreSQL и консоль уже настроены):

  1. Создайте ВМ без диска: 2 vCPU, 2–4 ГБ ОЗУ, сеть VirtIO.
  2. Скопируйте backupzit-appliance.qcow2 на узел и импортируйте его как диск ВМ (замените <vmid>):
    qm importdisk <vmid> backupzit-appliance.qcow2 local-lvm
  3. Подключите импортированный диск как SCSI, сделайте его загрузочным и включите QEMU guest agent в параметрах ВМ.
  4. Запустите ВМ. На её экране показаны адрес веб-консоли и начальный пароль пользователя admin. Откройте https://<адрес>:8443, войдите и смените пароль.

На экране ВМ можно войти как bzadmin и задать статический адрес, имя сервера и часовой пояс (appliance стартует в UTC, а расписания работают по часовому поясу консоли). Предпочитаете существующий сервер Debian, Ubuntu, AlmaLinux или Rocky Linux? Однострочный скрипт установки со страницы загрузки сделает там то же самое.

Шаг 2 — Добавьте хранилище

В консоли откройте Хранилище и добавьте место назначения. Типичный выбор для копий Proxmox:

ТипПодходит для
SFTPЛюбого Linux-сервера или NAS с SSH; ключ хоста сервера закрепляется.
Общая папка SMBФайловых серверов Windows, NAS Synology или QNAP (SMB 2/3).
S3-совместимоеВнешних копий: AWS S3, Wasabi, Backblaze B2, MinIO, Ceph; неизменяемых с Object Lock.
Защищённый репозиторийLinux-сервер с backupzit-repo: копии нельзя удалить до конца срока неизменяемости.

Оставьте включённым Шифровать копии (AES-256) (по умолчанию): всё шифруется AES-256-GCM на узле до того, как покинет его. Затем консоль покажет ключ восстановления — распечатайте лист восстановления или сохраните ключ в менеджере паролей отдельно от копий. С ключом, адресом хранилища и учётными данными вы восстановите данные даже без консоли; без ключа копии никто не прочитает.

Шаг 3 — Установите агент на каждый узел

  1. В консоли откройте Агенты и нажмите Создать токен регистрации. Вы получите код регистрации (BZ1-…), действующий 7 дней и подходящий для любого числа машин.
  2. Загрузите пакет Агент Linux — Debian / Ubuntu со страницы «Агенты» на узел и выполните:
    apt install ./backupzit-agent_*.deb
    backupzit-agent enroll --code "BZ1-..."
    systemctl enable --now backupzit-agent
  3. В течение минуты узел появится на странице «Агенты» с меткой Proxmox VE · N guests.

Агент использует собственные средства узла (qm, pct, pvesm, LVM, ZFS, Ceph). В консоли не хранится ни токен API Proxmox, ни пароль root. В кластере установите агент на каждый узел.

Шаг 4 — Создайте задание копирования

  1. Откройте Задания копирования, создайте задание и выберите агент узла.
  2. Выберите Виртуальные машины (Proxmox VE, Hyper-V, VMware), затем Все ВМ (и контейнеры) на хосте — гости, созданные позже, добавляются автоматически — или отметьте отдельных гостей.
  3. Выберите хранилище из шага 2.
  4. Задайте расписание, например каждый рабочий день в 22:00. Задания также могут повторяться каждые 15 минут — 12 часов, запускаться раз в месяц или после другого задания.
  5. Задайте хранение. Пример: 3 последних, 7 ежедневных, 4 еженедельных, 6 ежемесячных — около полугода истории и примерно 20 точек восстановления.

Что происходит при каждом запуске:

  1. Создаётся временный снимок Proxmox (backupzit_…); гость продолжает работать.
  2. Каждый диск читается из снимка блоками по 1 МиБ. Пустые блоки не сохраняются, а блоки, уже имеющиеся в репозитории, повторно не загружаются — после первой копии по сети идут только изменённые данные. При этом каждая копия остаётся полной точкой восстановления.
  3. Снимок удаляется. Конфигурация гостя (CPU, память, сеть, диски) сохраняется вместе с копией.

Неизменённые данные хранятся один раз, поэтому долгое хранение почти не требует дополнительного места.

Какие диски можно копировать при работающем госте

Хранилище ProxmoxКопия работающего гостя
LVM-thin (local-lvm)да, из снимка
ZFS (диски ВМ / zvol)да, из снимка
Ceph RBDда, из снимка
Каталог, NFS, CIFS с qcow2да, из снимка
Каталог, NFS, CIFS с raw; толстый LVMнет — остановите гостя или перенесите диск

Остановленных гостей можно копировать на всех этих хранилищах. Диски с пометкой Backup: no (backup=0), проброшенные физические диски и bind mount пропускаются с предупреждением.

Шаг 5 — Копии, согласованные на уровне приложений

Если внутри ВМ работает QEMU guest agent и он включён в её параметрах, Proxmox замораживает файловые системы ВМ на время снимка, и базы данных и другие приложения фиксируются в чистом состоянии. Без него копия согласована как после сбоя — как после отключения питания.

В ВМ с Debian или Ubuntu:

apt install qemu-guest-agent
systemctl enable --now qemu-guest-agent

В ВМ с Windows установите VirtIO guest tools. Затем включите агент для ВМ на узле (вступит в силу после следующей полной остановки и запуска ВМ):

qm set <vmid> --agent enabled=1

Страница каждого запуска показывает по каждому гостю, какие диски прочитаны и как был зафиксирован гость.

Шаг 6 — Внешняя копия (3-2-1)

Правило 3-2-1: три копии данных на двух разных носителях, одна из них за пределами офиса. Добавьте второе задание типа Копия резервной копии, указав задание Proxmox как источник и внешнее место назначения, например бакет S3 с Object Lock или защищённый репозиторий в другом здании.

  • Агент копирует существующие копии; ВМ повторно не читаются.
  • Отправляются только данные, которых ещё нет в месте назначения, зашифрованные его ключом.
  • По умолчанию копия запускается после каждой копии исходного задания; подходит любое расписание, например раз в ночь на медленном канале.
  • У копии своё хранение, например 7 ежедневных на NAS и 12 ежемесячных в облаке.

ВМ восстанавливаются из копии так же, как из оригинала, — целые ВМ, отдельные файлы и мгновенное восстановление. Подробнее о неизменяемых копиях в разделе защита от программ-вымогателей.

Шаг 7 — Докажите, что копии загружаются

Читаемые блоки не доказывают, что ВМ всё ещё загрузится. В Настройки → Тесты восстановления включите Тест загрузки для копий ВМ Proxmox. Тест восстановления по очереди запускает каждую ВМ из последней копии на узле задания прямо из копии, с новым ID и отключёнными сетевыми картами, чтобы не конфликтовать с оригиналом, — а затем удаляет её.

  • ВМ проходит тест, если её QEMU guest agent вовремя отвечает, то есть ОС загрузилась. ВМ без guest agent проходят, если проработают минуту, и отображаются как работающие, а не загруженные.
  • Во время теста узлу нужна свободная память ещё для одной ВМ.
  • Кроме того, проверка данных (по умолчанию ежемесячно) читает все сохранённые данные и сверяет их с контрольными суммами, чтобы найти повреждения самого хранилища до того, как копия понадобится.

Восстановление

Откройте запуск копирования (со страницы задания или из раздела Активность) и выберите Восстановить ВМ или контейнер.

ВМ или контейнер целиком

  • Восстановление на любой узел с агентом — в том числе на узел другого кластера.
  • Как новый гость со следующим свободным ID (по умолчанию), пока оригинал продолжает работать; копия получает новые MAC-адреса. Или с исходным ID после удаления гостя, при желании с заменой существующего.
  • Выберите имя и хранилище для дисков и нужно ли запускать гостя после восстановления.
  • При каждом восстановлении ВМ получает новый generation ID (vmgenid), чтобы контроллеры домена Windows безопасно распознали откат.

Мгновенное восстановление: ВМ работает через секунды

Обычное восстановление длится столько, сколько копирование дисков. В режиме Мгновенно, работая из копии агент отдаёт диски из копии только для чтения и запускает новую ВМ, записи которой идут в локальные оверлеи. Когда всё в порядке, Завершить переносит диски на выбранное хранилище, пока ВМ продолжает работать (qm disk move); Удалить ВМ удаляет ВМ и её изменения. ВМ работает со скоростью хранилища копий, поэтому лучше всего подходит репозиторий на локальном диске или быстрой сетевой папке. Мгновенное восстановление — для ВМ, не для контейнеров.

Отдельные файлы

Нажмите Просмотр файлов в таблице гостей запуска копирования. Консоль читает диск прямо из копии — ничего заранее не восстанавливается — и позволяет просматривать NTFS, ext2/3/4 и XFS, в том числе внутри LVM. Скачайте файлы (несколько — архивом ZIP) или восстановите их в папку на любом агенте. Для просмотра в консоли копия должна лежать на сетевом хранилище (SFTP, S3, SMB, Azure или защищённый репозиторий).

Реплики самых важных гостей

В разделе Дополнительно задания параметр Поддерживать реплики ВМ после каждой копии обновляет остановленную копию каждого гостя на другом узле или кластере. Записываются только изменённые блоки — обычно несколько секунд на копию. Если гость потерян, Запустить реплику запускает его с данными последней копии, без восстановления.

Из командной строки

Всё работает и без консоли, например при восстановлении узла после аварии:

backupzit-agent pve list
backupzit-agent pve show    --repo ... latest
backupzit-agent pve restore --repo ... --vmid 100 --new-vmid -1 --storage local-lvm --start latest

Резервная копия самого хоста Proxmox

Гости — это лишь половина узла: определения хранилищ, сеть, пользователи, брандмауэр, сертификаты и настройки каждой ВМ и контейнера хранятся в его конфигурации. Сохраняйте её обычным заданием Файлы и папки на агенте узла, например ежедневно, с путями /etc (включает /etc/pve, сеть и /etc/hosts) и /var/lib/pve-cluster (база конфигурации config.db). Для полностью согласованной копии базы на работающем узле добавьте это как Команда перед копированием и включите также /root/pve-config.db:

# one-time: apt install sqlite3
sqlite3 /var/lib/pve-cluster/config.db ".backup /root/pve-config.db"

Чтобы восстановить вышедший из строя узел: установите ту же версию Proxmox VE с тем же именем хоста и адресом, установите агента, восстановите /etc/network/interfaces и /etc/hosts, остановите службу кластера (systemctl stop pve-cluster), восстановите config.db в /var/lib/pve-cluster, снова запустите службу и затем восстановите гостей. В кластере вместо восстановления config.db снова присоедините переустановленный узел к кластеру.

Ограничения

  • Поддерживаются Proxmox VE 7, 8 и 9. XCP-ng не поддерживается.
  • Диски контейнеров на подтомах ZFS пока не поддерживаются.
  • Диски raw на хранилищах типа каталог, NFS или CIFS и диски на толстом LVM копируются только при остановленном госте.
  • В кластере задание копирует гостей своего узла. Гость, перенесённый на другой узел, вызывает предупреждение — используйте Все ВМ (и контейнеры) на хосте на каждом узле, чтобы перенесённые гости оставались защищёнными.
  • Диски cloud-init не сохраняются; при восстановлении они создаются заново из конфигурации.

Что дальше

BackupZit бесплатен и с открытым исходным кодом (AGPLv3), без ограничений на число ВМ и узлов. Скачайте его, посмотрите все функции для Proxmox или прочитайте полный раздел о Proxmox VE в руководстве в консоли. Вопросы можно задать в GitHub Discussions. Компании могут получить коммерческую поддержку от MaxZit (только на английском).