diff --git a/restore.sh b/restore.sh index 8d4b191..50298fd 100644 --- a/restore.sh +++ b/restore.sh @@ -84,7 +84,14 @@ PVE_BACKUP_REF="${PBS_STORAGE}:backup/${SNAPSHOT_PATH}" # ── Messvariablen ───────────────────────────────────────────────────────────── LAST_DATE=$(date +"%Y-%m-%d" -d "1 day ago") -ZIP_DIR="${RESTORE_MOUNT}/zips/${LAST_DATE}" +# STI-BAC01: rsync_target ist lokal gemountet → ZIP direkt dorthin, kein Rsync +if [[ "$SERVER_HOSTNAME" == "bac01" ]]; then + ZIP_DIR="${RSYNC_TARGET}/${LAST_DATE}" + SKIP_RSYNC=1 +else + ZIP_DIR="${RESTORE_MOUNT}/zips/${LAST_DATE}" + SKIP_RSYNC=0 +fi BACKUP_SERVER_HOST=$(cat /opt/windmill-restore/backup_server_host 2>/dev/null \ || echo "backup-server") # SERVER_HOSTNAME kommt als Parameter --server-hostname @@ -521,50 +528,59 @@ echo " ZIP: $(( ZIP_SIZE_BYTES / 1024 / 1024 )) MB in ${ZIP_DURATION}s" # ═════════════════════════════════════════════════════════════════════════════ echo "" RSYNC_TARGET_DATE="${RSYNC_TARGET}/${LAST_DATE}" -echo "==> [11/13] Rsync → ${BACKUP_SERVER_HOST}:${RSYNC_TARGET_DATE}..." -MAX_RETRIES=3 +echo "==> [11/13] Rsync / Datei-Transfer..." -rsync_transfer() { - rsync -avz --progress --timeout=300 \ - "$ZIP_FILE" \ - "${BACKUP_SERVER_HOST}:${RSYNC_TARGET_DATE}/" \ - 2>&1 -} +if [[ "$SKIP_RSYNC" == "1" ]]; then + # STI-BAC01: ZIP liegt bereits im Zielverzeichnis – kein Rsync nötig + echo " Lokaler Modus: ZIP bereits in ${RSYNC_TARGET_DATE} – kein Rsync." + RSYNC_OK="true" + RSYNC_SIZE_BYTES=$ZIP_SIZE_BYTES + echo " Groesse: $(( RSYNC_SIZE_BYTES / 1024 / 1024 )) MB" +else + MAX_RETRIES=3 -ssh "$BACKUP_SERVER_HOST" "mkdir -p '${RSYNC_TARGET_DATE}'" 2>/dev/null || true + rsync_transfer() { + rsync -avz --progress --timeout=300 \ + "$ZIP_FILE" \ + "${BACKUP_SERVER_HOST}:${RSYNC_TARGET_DATE}/" \ + 2>&1 + } -while [[ $RSYNC_RETRIES -lt $MAX_RETRIES ]]; do - if rsync_transfer; then - RSYNC_OK="true" - RSYNC_SIZE_BYTES=$ZIP_SIZE_BYTES - echo " Rsync OK: $(( RSYNC_SIZE_BYTES / 1024 / 1024 )) MB" - break - else - RSYNC_RETRIES=$(( RSYNC_RETRIES + 1 )) - if [[ $RSYNC_RETRIES -lt $MAX_RETRIES ]]; then - echo " Fehlgeschlagen ($RSYNC_RETRIES/$MAX_RETRIES). Warte 60s..." - sleep 60 + ssh "$BACKUP_SERVER_HOST" "mkdir -p '${RSYNC_TARGET_DATE}'" 2>/dev/null || true + + while [[ $RSYNC_RETRIES -lt $MAX_RETRIES ]]; do + if rsync_transfer; then + RSYNC_OK="true" + RSYNC_SIZE_BYTES=$ZIP_SIZE_BYTES + echo " Rsync OK: $(( RSYNC_SIZE_BYTES / 1024 / 1024 )) MB" + break else + RSYNC_RETRIES=$(( RSYNC_RETRIES + 1 )) + if [[ $RSYNC_RETRIES -lt $MAX_RETRIES ]]; then + echo " Fehlgeschlagen ($RSYNC_RETRIES/$MAX_RETRIES). Warte 60s..." + sleep 60 + else + RSYNC_OK="false" + STATUS="failed" + ERROR_MSG="Rsync fehlgeschlagen nach ${RSYNC_RETRIES} Versuchen" + echo " FEHLER: $ERROR_MSG" + fi + fi + done + + if [[ "$RSYNC_OK" == "true" ]]; then + REMOTE_SIZE=$(ssh "$BACKUP_SERVER_HOST" \ + "stat -c%s '${RSYNC_TARGET_DATE}/$(basename "$ZIP_FILE")'" \ + 2>/dev/null || echo "0") + if [[ "$REMOTE_SIZE" != "$ZIP_SIZE_BYTES" ]]; then + echo " WARNUNG: Remote ${REMOTE_SIZE}B != lokal ${ZIP_SIZE_BYTES}B" RSYNC_OK="false" STATUS="failed" - ERROR_MSG="Rsync fehlgeschlagen nach ${RSYNC_RETRIES} Versuchen" - echo " FEHLER: $ERROR_MSG" + ERROR_MSG="Groessenabweichung: lokal=${ZIP_SIZE_BYTES} remote=${REMOTE_SIZE}" + else + echo " Groessenprüfung OK: ${REMOTE_SIZE} Bytes." fi fi -done - -if [[ "$RSYNC_OK" == "true" ]]; then - REMOTE_SIZE=$(ssh "$BACKUP_SERVER_HOST" \ - "stat -c%s '${RSYNC_TARGET_DATE}/$(basename "$ZIP_FILE")'" \ - 2>/dev/null || echo "0") - if [[ "$REMOTE_SIZE" != "$ZIP_SIZE_BYTES" ]]; then - echo " WARNUNG: Remote ${REMOTE_SIZE}B != lokal ${ZIP_SIZE_BYTES}B" - RSYNC_OK="false" - STATUS="failed" - ERROR_MSG="Größenabweichung: lokal=${ZIP_SIZE_BYTES} remote=${REMOTE_SIZE}" - else - echo " Größenprüfung OK: ${REMOTE_SIZE} Bytes." - fi fi # ═════════════════════════════════════════════════════════════════════════════ @@ -581,8 +597,12 @@ else --purge 1 \ 2>/dev/null || echo " VM $VM_ID_RESTORED nicht mehr vorhanden." fi -rm -f "$ZIP_FILE" -echo " ${BACKUP_TYPE^^} ${VM_ID_RESTORED} entfernt, ZIP gelöscht." +if [[ "$SKIP_RSYNC" == "1" ]]; then + echo " ${BACKUP_TYPE^^} ${VM_ID_RESTORED} entfernt. ZIP bleibt am Zielort." +else + rm -f "$ZIP_FILE" + echo " ${BACKUP_TYPE^^} ${VM_ID_RESTORED} entfernt, ZIP gelöscht." +fi # ── Zusammenfassung & Webhook ───────────────────────────────────────────────── TOTAL=$(( $(date +%s) - RESTORE_START ))