Proxmox. Бэкапирование виртуальных машин и контейнеров на сетевой ресурс

Материал из Wiki
Перейти к навигации Перейти к поиску


Ссылки

https://pve.proxmox.com/wiki/Backup_and_Restore

Бэкапирование через веб-интерфейс

Бэкапирование ВМ

Datacenter - Storage - Add - CIFS

Заполняем данные для подключения к сетевой шаре,

а также:

Max backups: XX  // кол-во хранимых файлов бэкапов, самые старые бэкапы будут удаляться
Content: VZDump backup file  // такого типа файлов будет достаточно
Datacenter - Backup - Add

Заполняем поля в соответствии с необходимостью,

а также:

Storage: <созданное_в_предыдущем_пункте_сетевое_хранилище_CIFS>

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

Восстановление на тот же хост, на котором находится оригинал машины

ВМ должна быть выключена

pve1 - <VM> - Backup - Restore
Storage: Выбираем хранилище, на которое будем восстанавливать ВМ

Восстановление на другом хосте кластера, на котором была машина (например, pve2)

pve2 - <созданное_в_предыдущем_пункте_сетевое_хранилище> - <выбираем_файл_бэкапа> - Restore
ID: Новый ID ВМ, по сути это новый клон машины, с которой сняли бэкап
Storage: Выбираем хранилище, на которое будем восстанавливать ВМ
Unique: Сгенерировать новый MAC-адрес, иначе эта машина будет полным клоном машины, с которой сняли бэкап

HINTS

ОШИБКА ПРИ МОНТИРОВАНИИ В PROXMOX СЕТЕВОГО РЕСУРСА CIFS/SMB

create storage failed: error with cfs lock 'file-storage_cfg': mount error: Refer to the mount.cifs(8) manual page (e.g. man mount.cifs) (500)

РЕШЕНИЕ:

В NAS (Nas4free), с которого монитровался ресурс, в CIFS/SMB стояла максимальная версия протокола SMB2,

необходимо поднять до версии SMB3 или выставить опцию "Default"

Изменение шаблона имени бэкапа ВМ

https://forum.proxmox.com/threads/put-vm-name-into-backup-name.27495/

Создаем скрипт переименования имени фала бэкапа после его создания

Правим шаблон имени: $1"-"$2"-"$3"---'${HOSTNAME}'---"$4"-"$5 в 2-х местах

Имя бэкапа будет таким: vzdump-qemu-108---centos7-system01---2021_02_18-22_57_15

! Не надо пытаться ставить имя машины в начале имени шаблона бэкапа !

В имени бэкапа в начале обязательно должно быть "vzdump-qemu-108" ($1"-"$2"-"$3" в шаблоне имени).

! Иначе ни восстановить бэкап ни получить инфо о бэкапе в хранилище не получится !

mkdir /root/scripts nano /root/scripts/vzdump-rename.sh

#!/bin/bash

# backup-start | backup-end | backup-abort | log-end | pre-stop | pre-restart | post-restart | job-start | job-end | job-abort

cd "${DUMPDIR}"
MAXFILES=$(grep "maxfiles:" /etc/vzdump.conf | tr -d " " | awk -F":" '{print $2}')

case "${1}" in
  backup-end)
VM_FNAM_OLD=$(basename ${TARFILE})
VM_FNAM_NEW=$(basename ${TARFILE} | awk -F "-" '{print $1"-"$2"-"$3"---'${HOSTNAME}'---"$4"-"$5}')
VM_FNAM_DUP=$(basename ${TARFILE} | awk -F "-" '{print $1"-"$2"-"$3"---'${HOSTNAME}'"}')
VM_TYPE=$(basename ${TARFILE} | awk -F "-" '{print $2}')
mv "${VM_FNAM_OLD}" "${VM_FNAM_NEW}"

case "${VM_TYPE}" in
lxc)
NUMFILES=$(ls -1 ${VM_FNAM_DUP}*.tar* | wc -l)
if [[ $MAXFILES =~ ^-?[0-9]+$ ]] && [ ${NUMFILES} -gt ${MAXFILES} ]; then
echo "-- maxfiles set to ${MAXFILES} but ${NUMFILES} present. Deleting the older ones."
ls ${VM_FNAM_DUP}*.tar* | head -n $((${NUMFILES}-${MAXFILES})) | xargs rm
fi
;;
qemu)
NUMFILES=$(ls -1 ${VM_FNAM_DUP}*.vma* | wc -l)
if [[ $MAXFILES =~ ^-?[0-9]+$ ]] && [ ${NUMFILES} -gt ${MAXFILES} ]; then
echo "-- maxfiles set to ${MAXFILES} but ${NUMFILES} present. Deleting the older ones."
ls ${VM_FNAM_DUP}*.vma* | head -n $((${NUMFILES}-${MAXFILES})) | xargs rm
fi
;;
esac
;;

log-end)
LOG_FNAM_OLD=$(basename ${LOGFILE})
LOG_FNAM_NEW=$(basename ${LOGFILE} | awk -F "-" '{print $1"-"$2"-"$3"---'${HOSTNAME}'---"$4"-"$5}')
LOG_FNAM_DUP=$(basename ${TARFILE} | awk -F "-" '{print $1"-"$2"-"$3"---'${HOSTNAME}'"}')
mv "${LOG_FNAM_OLD}" "${LOG_FNAM_NEW}"
NUMFILES=$(ls -1 ${LOG_FNAM_DUP}*.log | wc -l)
if [[ $MAXFILES =~ ^-?[0-9]+$ ]] && [ ${NUMFILES} -gt ${MAXFILES} ]; then ls ${LOG_FNAM_DUP}*.log | head -n $((${NUMFILES}-${MAXFILES})) | xargs rm; fi
;;

esac

Права запуска скрипта

chmod +x /root/scripts/vzdump-rename.sh

Правим конфиг запуска заданий бэкапов утилитой vzdump

ПРИ ТАКОЙ НАСТРОЙКЕ КАСТОМНЫХ ИМЕН БЭКАПОВ

КОНФИГУРАЦИЯ УДАЛЕНИЯ СТАРЫХ БЭКАПОВ В GUI (keep-last, keep-daily в настройках "Datacenter - Storage - <Storage_name> - Backup retention")

БУДЕТ ИГНОРИРОВАТЬСЯ!

maxfiles: 5 - означает что будут оставлены 5 последних бэкапов, более старые будут удалены

nano /etc/vzdump.conf

INFO:

Prune backups. Only those using the standard naming scheme are considered. If no keep options are specified, those from the storage configuration are used.

<storage>: <string>

The storage identifier.

--dry-run <boolean>

Only show what would be pruned, don’t delete anything.

--keep-all <boolean>

Keep all backups. Conflicts with the other options when true.

--keep-daily <N>

Keep backups for the last <N> different days. If there is morethan one backup for a single day, only the latest one is kept.

--keep-hourly <N>

Keep backups for the last <N> different hours. If there is morethan one backup for a single hour, only the latest one is kept.

--keep-last <N>

Keep the last <N> backups.

--keep-monthly <N>

Keep backups for the last <N> different months. If there is morethan one backup for a single month, only the latest one is kept.

--keep-weekly <N>

Keep backups for the last <N> different weeks. If there is morethan one backup for a single week, only the latest one is kept.

--keep-yearly <N>

Keep backups for the last <N> different years. If there is morethan one backup for a single year, only the latest one is kept.

--type <lxc | qemu>

Either qemu or lxc. Only consider backups for guests of this type.

--vmid <integer> (1 - N)

Only consider backups for this guest.

# vzdump default settings
#tmpdir: DIR
#dumpdir: DIR
#storage: STORAGE_ID
#mode: snapshot|suspend|stop
#bwlimit: KBPS
#ionice: PRI
#lockwait: MINUTES
#stopwait: MINUTES
#size: MB
#stdexcludes: BOOLEAN
#mailto: ADDRESSLIST

# DEPRECATED KEEP LAST N BACKUPS
#maxfiles: 5

# USE THIS FOR KEEP LAST N BACKUPS!
prune-backups: keep-last=5

# BACKUP SCRIPT TO USE
script: /root/scripts/vzdump-rename.sh

#exclude-path: PATHLIST
#pigz: N

Настраиваем автоматический бэкап в веб-интерфейсе:

Datacenter - Backup

Бэкапирование вручную

Временно монтируем шару SMB

mount -t cifs -o username=backup //192.168.17.12/pve01/custom/vm-backup /opt/tmp/

Бэкап всех ВМ

vzdump --all --compress zstd --mode suspend --maxfiles 3 --script /root/scripts/vzdump-rename.sh --dumpdir /opt/tmp/

vzdump OPTIONS [--all | <VMID>]
      --exclude VMID          exclude VMID (assumes --all)
      --exclude-path REGEX    exclude certain files/directories. You
                              can use this option more than once to specify
                              multiple exclude paths
      --stdexcludes           exclude temporary files and logs
      --compress              compress dump file (gzip)
      --storage STORAGE_ID    store resulting files to STORAGE_ID (PVE only)
      --script                execute hook script
      --dumpdir DIR           store resulting files in DIR
      --maxfiles N            maximal number of backup files per VM.
      --tmpdir DIR            store temporary files in DIR. --suspend and --stop
                              are using this directory to store a copy of the VM.
      --mailto EMAIL          send notification mail to EMAIL. You can use
                              this option more than once to specify multiple
                              receivers
      --stop                  stop/start VM if running
      --suspend               suspend/resume VM when running
      --snapshot              use LVM snapshot when running
      --size MB               LVM snapshot size (default 1024)
      --bwlimit KBPS          limit I/O bandwidth; KBytes per second
      --lockwait MINUTES      maximal time to wait for the global
                              lock. vzdump uses a global lock file to make
                              sure that only one instance is running
                              (running several instance puts too much load
                              on a server). Default is 180 (3 hours).
      --stopwait MINUTES      maximal time to wait until a VM is stopped.