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"