Backup VMs Using VZDUMP on Local Storage

Script to backup VMs using VZDUMP on Local Storage.

#!/bin/bash

LOCAL_DIR="local"
REMOTE_USER="user@host"
LOCAL_RETENTION=2
REMOTE_RETENTION=4

VMIDS=(100)

for VMID in "${VMIDS[@]}"; do
    echo "Processing VM $VMID..."
    
    REMOTE_DIR="path/vm$VMID"
    
    vzdump $VMID --compress zstd --mode snapshot --storage "$LOCAL_DIR" --maxfiles "$LOCAL_RETENTION" --remove 1
    
    NEWEST=$(ls -t /var/lib/vz/dump/vzdump-qemu-$VMID-*.zst 2>/dev/null | head -1)
    if [ -n "$NEWEST" ]; then
        scp -i /root/.ssh/backup_key "$NEWEST" "$REMOTE_USER:$REMOTE_DIR/"
    else
        echo "Warning: No backup found for VM $VMID"
        continue
    fi
    
    ssh -i /root/.ssh/backup_key "$REMOTE_USER" "cd '$REMOTE_DIR' && ls -t vzdump-qemu-$VMID-* 2>/dev/null | tail -n +$(($REMOTE_RETENTION+1)) | xargs -r rm -f"
    
    echo "Completed VM $VMID"
done

echo "All backups completed"