Home > Server > Script per backup VM su cluster Proxmox

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…

Categorie:Server Tag: , , ,
  1. Nessun commento ancora...
  1. Nessun trackback ancora...