restore.sh aktualisiert

main
sebastian.serfling 2026-03-18 08:13:59 +00:00
parent d897ad53e4
commit 6ff36336e8
1 changed files with 59 additions and 39 deletions

View File

@ -84,7 +84,14 @@ PVE_BACKUP_REF="${PBS_STORAGE}:backup/${SNAPSHOT_PATH}"
# ── Messvariablen ───────────────────────────────────────────────────────────── # ── Messvariablen ─────────────────────────────────────────────────────────────
LAST_DATE=$(date +"%Y-%m-%d" -d "1 day ago") 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 \ BACKUP_SERVER_HOST=$(cat /opt/windmill-restore/backup_server_host 2>/dev/null \
|| echo "backup-server") || echo "backup-server")
# SERVER_HOSTNAME kommt als Parameter --server-hostname # SERVER_HOSTNAME kommt als Parameter --server-hostname
@ -521,19 +528,27 @@ echo " ZIP: $(( ZIP_SIZE_BYTES / 1024 / 1024 )) MB in ${ZIP_DURATION}s"
# ═════════════════════════════════════════════════════════════════════════════ # ═════════════════════════════════════════════════════════════════════════════
echo "" echo ""
RSYNC_TARGET_DATE="${RSYNC_TARGET}/${LAST_DATE}" RSYNC_TARGET_DATE="${RSYNC_TARGET}/${LAST_DATE}"
echo "==> [11/13] Rsync → ${BACKUP_SERVER_HOST}:${RSYNC_TARGET_DATE}..." echo "==> [11/13] Rsync / Datei-Transfer..."
MAX_RETRIES=3
rsync_transfer() { 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
rsync_transfer() {
rsync -avz --progress --timeout=300 \ rsync -avz --progress --timeout=300 \
"$ZIP_FILE" \ "$ZIP_FILE" \
"${BACKUP_SERVER_HOST}:${RSYNC_TARGET_DATE}/" \ "${BACKUP_SERVER_HOST}:${RSYNC_TARGET_DATE}/" \
2>&1 2>&1
} }
ssh "$BACKUP_SERVER_HOST" "mkdir -p '${RSYNC_TARGET_DATE}'" 2>/dev/null || true ssh "$BACKUP_SERVER_HOST" "mkdir -p '${RSYNC_TARGET_DATE}'" 2>/dev/null || true
while [[ $RSYNC_RETRIES -lt $MAX_RETRIES ]]; do while [[ $RSYNC_RETRIES -lt $MAX_RETRIES ]]; do
if rsync_transfer; then if rsync_transfer; then
RSYNC_OK="true" RSYNC_OK="true"
RSYNC_SIZE_BYTES=$ZIP_SIZE_BYTES RSYNC_SIZE_BYTES=$ZIP_SIZE_BYTES
@ -551,9 +566,9 @@ while [[ $RSYNC_RETRIES -lt $MAX_RETRIES ]]; do
echo " FEHLER: $ERROR_MSG" echo " FEHLER: $ERROR_MSG"
fi fi
fi fi
done done
if [[ "$RSYNC_OK" == "true" ]]; then if [[ "$RSYNC_OK" == "true" ]]; then
REMOTE_SIZE=$(ssh "$BACKUP_SERVER_HOST" \ REMOTE_SIZE=$(ssh "$BACKUP_SERVER_HOST" \
"stat -c%s '${RSYNC_TARGET_DATE}/$(basename "$ZIP_FILE")'" \ "stat -c%s '${RSYNC_TARGET_DATE}/$(basename "$ZIP_FILE")'" \
2>/dev/null || echo "0") 2>/dev/null || echo "0")
@ -561,9 +576,10 @@ if [[ "$RSYNC_OK" == "true" ]]; then
echo " WARNUNG: Remote ${REMOTE_SIZE}B != lokal ${ZIP_SIZE_BYTES}B" echo " WARNUNG: Remote ${REMOTE_SIZE}B != lokal ${ZIP_SIZE_BYTES}B"
RSYNC_OK="false" RSYNC_OK="false"
STATUS="failed" STATUS="failed"
ERROR_MSG="Größenabweichung: lokal=${ZIP_SIZE_BYTES} remote=${REMOTE_SIZE}" ERROR_MSG="Groessenabweichung: lokal=${ZIP_SIZE_BYTES} remote=${REMOTE_SIZE}"
else else
echo " Größenprüfung OK: ${REMOTE_SIZE} Bytes." echo " Groessenprüfung OK: ${REMOTE_SIZE} Bytes."
fi
fi fi
fi fi
@ -581,8 +597,12 @@ else
--purge 1 \ --purge 1 \
2>/dev/null || echo " VM $VM_ID_RESTORED nicht mehr vorhanden." 2>/dev/null || echo " VM $VM_ID_RESTORED nicht mehr vorhanden."
fi fi
rm -f "$ZIP_FILE" if [[ "$SKIP_RSYNC" == "1" ]]; then
echo " ${BACKUP_TYPE^^} ${VM_ID_RESTORED} entfernt, ZIP gelöscht." 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 ───────────────────────────────────────────────── # ── Zusammenfassung & Webhook ─────────────────────────────────────────────────
TOTAL=$(( $(date +%s) - RESTORE_START )) TOTAL=$(( $(date +%s) - RESTORE_START ))