commit fe825be8b55d8d2283515a6074923f6dec2718c4 Author: nocci Date: Tue Nov 11 11:54:47 2025 +0100 proxmox-to-hetzner-weekly.sh first init diff --git a/proxmox-to-hetzner-weekly.sh b/proxmox-to-hetzner-weekly.sh new file mode 100644 index 0000000..83a644a --- /dev/null +++ b/proxmox-to-hetzner-weekly.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash +set -euo pipefail + +SRC_DIR="/backup/dump" + +DEST_USER="u423539-sub5" +DEST_HOST="u423539-sub5.your-storagebox.de" +DEST_DIR="proxmox-weekly" + +SSH_KEY="/root/.ssh/hetzner_storagebox_ed25519" +SSH_PORT=23 + +# IDs, die offsite sollen +IDS=(100 101 102 103 104 105 106 107 109 111 113 115 116 117 118 119 120 122 123) + +# Zielverzeichnis auf der Storage Box anlegen +ssh -p "${SSH_PORT}" -i "${SSH_KEY}" -o IdentitiesOnly=yes \ + "${DEST_USER}@${DEST_HOST}" \ + "mkdir -p '${DEST_DIR}'" + +# 1) Upload: pro ID das aktuellste Backup hochschieben +for ID in "${IDS[@]}"; do + echo "Prüfe ID ${ID}..." + + LATEST_FILE="$( + ls -1t "${SRC_DIR}"/vzdump-*-"${ID}"-* 2>/dev/null \ + | grep -E '\.(vma|vma\.zst|vma\.gz|tar|tar\.zst|tar\.gz)$' \ + | head -n1 || true + )" + + if [[ -z "${LATEST_FILE}" ]]; then + echo "WARN: Kein gültiges Backup-File für ID ${ID} in ${SRC_DIR} gefunden, überspringe." + continue + fi + + echo "Sync ID ${ID}: ${LATEST_FILE}" + + ionice -c3 nice -n 19 \ + rsync -av --partial --inplace --bwlimit=5000 \ + -e "ssh -i ${SSH_KEY} -p ${SSH_PORT} -o IdentitiesOnly=yes" \ + "${LATEST_FILE}" \ + "${DEST_USER}@${DEST_HOST}:${DEST_DIR}/" +done + +# 2) Cleanup: pro ID nur das neueste File auf der Box behalten +for ID in "${IDS[@]}"; do + ssh -p "${SSH_PORT}" -i "${SSH_KEY}" -o IdentitiesOnly=yes \ + "${DEST_USER}@${DEST_HOST}" \ + "cd '${DEST_DIR}' 2>/dev/null || exit 0; + # alle Dateien für diese ID nach Datum sortiert + FILES=\$(ls -1t vzdump-*-'${ID}'-* 2>/dev/null || true); + # wenn 0 oder 1 Datei: nix zu tun + [ -z \"\$FILES\" ] && exit 0; + # alles außer der ersten (neuesten) löschen + echo \"Bereinige alte Backups für ID ${ID}...\"; + printf '%s\n' \"\$FILES\" | tail -n +2 | xargs -r rm --" +done + +echo "Fertig: Upload + Cleanup abgeschlossen."