Proxmox. Бэкапирование виртуальных машин и контейнеров на сетевой ресурс
Ссылки
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.