Dateien nach "scripts" hochladen

This commit is contained in:
2026-05-31 17:36:07 +00:00
parent 14274e6260
commit 3e00545453
+92
View File
@@ -0,0 +1,92 @@
#!/usr/bin/env bash
# =============================================================================
# verify-backup.sh Prüft die Integrität des Borg-Repositories und der Archive
# =============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
CONFIG_FILE="${SCRIPT_DIR}/../config/backup.conf"
source "$CONFIG_FILE"
export BORG_PASSPHRASE
export BORG_REPO
GREEN='\033[0;32m'; RED='\033[0;31m'; YELLOW='\033[1;33m'; BLUE='\033[0;34m'; NC='\033[0m'
log() { echo -e "${BLUE}[CHECK]${NC} $*"; }
log_ok() { echo -e "${GREEN}[CHECK] ✓${NC} $*"; }
log_warn(){ echo -e "${YELLOW}[CHECK] ⚠${NC} $*"; }
log_err() { echo -e "${RED}[CHECK] ✗${NC} $*" >&2; }
ERRORS=0
# --- 1. Repository-Integrität ------------------------------------------------
log "Prüfe Repository-Integrität..."
if borg check --repository-only "${BORG_REPO}"; then
log_ok "Repository OK"
else
log_err "Repository-Fehler gefunden!"
((ERRORS++)) || true
fi
# --- 2. Aktuellstes Archiv je Datenbank prüfen -------------------------------
log "Prüfe aktuellste Archive..."
for db in "${PG_DATABASES[@]}"; do
latest=$(borg list --short "${BORG_REPO}" | grep "^${db}-" | sort -r | head -1)
if [[ -z "$latest" ]]; then
log_err "Kein Archiv für Datenbank '${db}' gefunden!"
((ERRORS++)) || true
continue
fi
log "Prüfe Archiv: ${latest}"
if borg check --archives-only "${BORG_REPO}::${latest}"; then
log_ok "Archiv OK: ${latest}"
else
log_err "Archiv fehlerhaft: ${latest}"
((ERRORS++)) || true
fi
# Alter des Backups prüfen
archive_ts=$(borg info "${BORG_REPO}::${latest}" | grep "^Time (start)" | awk '{print $4, $5}')
archive_epoch=$(date -d "$archive_ts" +%s 2>/dev/null || echo 0)
now_epoch=$(date +%s)
age_hours=$(( (now_epoch - archive_epoch) / 3600 ))
if [[ $age_hours -gt 26 ]]; then
log_warn "Letztes Backup von '${db}' ist ${age_hours}h alt (>26h)!"
else
log_ok "Letztes Backup von '${db}': ${age_hours}h alt"
fi
done
# --- 3. Festplattenplatz ------------------------------------------------------
log "Prüfe Speicherplatz..."
REPO_DIR="$(dirname "$BORG_REPO")"
df_out=$(df -h "$REPO_DIR" | tail -1)
used_pct=$(echo "$df_out" | awk '{print $5}' | tr -d '%')
echo " $df_out"
if [[ $used_pct -ge 90 ]]; then
log_err "Speicherplatz kritisch: ${used_pct}% belegt!"
((ERRORS++)) || true
elif [[ $used_pct -ge 80 ]]; then
log_warn "Speicherplatz knapp: ${used_pct}% belegt"
else
log_ok "Speicherplatz OK: ${used_pct}% belegt"
fi
# --- 4. Repo-Statistiken ausgeben --------------------------------------------
log "Repository-Statistiken:"
borg info "${BORG_REPO}" | grep -E "All archives|Unique chmods|Deduplicated" || true
# --- Ergebnis ----------------------------------------------------------------
echo ""
if [[ $ERRORS -eq 0 ]]; then
log_ok "Alle Checks bestanden!"
exit 0
else
log_err "${ERRORS} Fehler gefunden!"
exit 1
fi