#!/bin/bash # Stellt ein Backup wieder her. # # ./restore.sh backups/unifi-full-backup_XXXX.tar.gz # Komplett-Restore: stoppt die Container, ersetzt ./data durch den # Stand aus dem Archiv und startet die Container wieder. # # ./restore.sh backups/autobackup_XXXX/datei.unf # Legt die .unf-Datei in den Autobackup-Ordner der UniFi-App, sodass sie # in der Weboberfläche unter Einstellungen -> System -> Backups # ausgewählt und wiederhergestellt werden kann. set -euo pipefail cd "$(dirname "$0")" if [[ $# -ne 1 ]]; then echo "Aufruf: $0 " echo " z.B.: $0 backups/unifi-full-backup_2026-07-26_20-00-00.tar.gz" echo " oder: $0 backups/autobackup_2026-07-26_20-00-00/autobackup_9.1.120.unf" exit 1 fi FILE="$1" if [[ ! -f "$FILE" ]]; then echo "Datei nicht gefunden: $FILE" exit 1 fi case "$FILE" in *.tar.gz) echo "ACHTUNG: Das aktuelle ./data-Verzeichnis wird ersetzt!" read -r -p "Fortfahren? [j/N] " answer [[ "$answer" =~ ^[jJyY]$ ]] || { echo "Abgebrochen."; exit 1; } echo "==> Container stoppen..." docker-compose down if [[ -d data ]]; then SAFETY="data.vor-restore.$(date +%Y-%m-%d_%H-%M-%S)" echo "==> Aktuelles ./data wird aufbewahrt als ./$SAFETY" mv data "$SAFETY" fi echo "==> Backup entpacken..." tar xzf "$FILE" echo "==> Container starten..." docker-compose up -d echo "==> Fertig. Wenn alles läuft, kann ./$SAFETY gelöscht werden." ;; *.unf) DEST="./data/unifi/data/backup/autobackup" mkdir -p "$DEST" cp "$FILE" "$DEST/" echo "==> $(basename "$FILE") wurde nach $DEST kopiert." echo "Wiederherstellen in der Weboberfläche:" echo " Einstellungen -> System -> Backups -> Wiederherstellen" echo "(Bei einer Neuinstallation kann die Datei auch direkt im" echo " Einrichtungs-Assistenten unter 'Restore from backup' gewählt werden.)" ;; *) echo "Unbekanntes Format. Erwartet: *.tar.gz (Komplett) oder *.unf (UniFi-Backup)" exit 1 ;; esac