restore.sh aktualisiert
parent
d897ad53e4
commit
6ff36336e8
98
restore.sh
98
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 ))
|
||||
|
|
|
|||
Loading…
Reference in New Issue