Backup VMs Using VZDUMP on ZFS

Script to backup VMs using VZDUMP on ZFS.

#!/bin/bash

LOCAL_DIR="/zfsstorage"
REMOTE_USER="user@host"
LOCAL_RETENTION=2
REMOTE_RETENTION=4

VMIDS=(302)

for VMID in "${VMIDS[@]}"; do
    echo "Processing VM $VMID..."
    
    REMOTE_DIR="path/vm$VMID"
    
    vzdump $VMID --dumpdir "$LOCAL_DIR" --compress zstd --maxfiles $LOCAL_RETENTION --mode snapshot
    
    NEWEST=$(ls -t "$LOCAL_DIR"/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"