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"