Script per backup VM su cluster Proxmox
Ho avuto un problema e ho trovato una soluzione. Ce ne sono molte di soluzioni al medesimo problema, ma questa mi è costata una nottata di test e quindi me la appunto…
Il problema è che, in un cluster Proxmox con VM in HA, potrebbe essere “impossibile” creare un backup da GUI in modalità “stop”. Questa però è una modalità di backup “più sicura” del backup in modalità “snapshot”, sopratutto in presenza di VM con database all’interno.
La soluzione è creare e lanciare uno script con cron che effettua uno “spegnimento controllato” della VM, avvia il backup e alla fine riavvia la VM. Ovviamente sulle VM devono essere installati i driver Qemu. Di seguito lo script, da adattare alle necessità nella riga “vzdump…”.
#!/bin/bash
# Lista di VM ID separati da spazio
VM_IDS="101 102 103"
# Funzione per gestire lo spegnimento, backup e riavvio di una singola VM
handle_vm() {
VMID=$1
# Spegnimento della VM tramite HA manager
echo "Spegnimento della VM ID $VMID"
ha-manager set $VMID --state stopped
# Aspetta fino a quando la VM non è spenta
while qm status $VMID | grep -q "running"; do
echo "In attesa dello spegnimento della VM $VMID..."
sleep 5
done
# Backup della VM
echo "Backup della VM ID $VMID"
vzdump $VMID --mode stop --storage nas --compress zstd --prune-backups 'keep-last=4' --quiet 1 --fleecing 0 --notes-template '{{guestname}}'
# Riavvio della VM tramite HA manager
echo "Riavvio della VM ID $VMID"
ha-manager set $VMID --state started
}
# Loop su ogni VM ID e applica la funzione
for VMID in $VM_IDS; do
handle_vm $VMID
done
echo "Operazioni completate."
Per creare il file “touch nomedelfile.sh”, per modificarlo “nano nomedelfile.sh” per abilitare l’esecuzione “chmod -x nomedelfile.sh”, per avviarlo “./nomedelfile.sh”.
Una volta creato il file, andrà aggiunta una riga in cron (crontab-e) tipo, nel caso di avvio ogni giorno alle 19:30:
30 19 * * * /path/scriptbackup.sh > /path/scriptbackup.log 2>&1
In questo modo abbiamo pure il log di quello che farà lo script sul file indicato.
Potrebbe essere necessario aggiungere il path di sistema allo script; quindi, da console,
echo "$PATH"
ci restituisce il path di sistema, che andremo a mettere all’inizio dello script con una riga
export PATH="/usr/local/bin:/usr/bin:/bin"
…e se capita di creare/modificare il file con Winzoz, potrebbe essere necessario “ripulire” il file dalla formattazione incompatibile con il comando
sed -i -e 's/\r$//' nomefile.sh
…che Winzoz non fallisce mai…

Commenti recenti