diff --git a/macos/Backup-Recordings/backup-recordings-to-bfds.sh b/macos/Backup-Recordings/backup-recordings-to-bfds.sh index 31a7a43..1b518e3 100755 --- a/macos/Backup-Recordings/backup-recordings-to-bfds.sh +++ b/macos/Backup-Recordings/backup-recordings-to-bfds.sh @@ -30,54 +30,96 @@ notify() { osascript -e "display notification \"$message\" with title \"Backup Recordings\" subtitle \"$subtitle\"" } +# Funktion zum Formatieren von Bytes in menschenlesbare Größe +format_bytes() { + local bytes=$1 + if [ "$bytes" -lt 1024 ]; then + echo "${bytes} B" + elif [ "$bytes" -lt 1048576 ]; then + awk "BEGIN {printf \"%.1f KB\", $bytes/1024}" + elif [ "$bytes" -lt 1073741824 ]; then + awk "BEGIN {printf \"%.1f MB\", $bytes/1048576}" + else + awk "BEGIN {printf \"%.2f GB\", $bytes/1073741824}" + fi +} + # Log rotieren falls nötig rotate_log # Quelle und Ziel definieren -SOURCE="/Users/rob/Recordings/Work/00_MacOS" -TARGET="/Volumes/rob/recordings/Progress/Work/" -MOUNT_POINT="/Volumes/rob" -SERVER_ADDRESS="smb://bfds/rob" +SOURCE="/Users/rob/Recordings/Work/00_MacOS/" +SERVER="bfds" +REMOTE_PATH="/mnt/bfds-nix/rob/recordings/Progress/Work/00_MacOS/" +TARGET="$SERVER:$REMOTE_PATH" -# Prüfen, ob das Netzlaufwerk gemountet ist -if mount | grep -q "$MOUNT_POINT"; then - log "Netzlaufwerk ist gemountet. Backup startet..." -else - log "Netzlaufwerk nicht gefunden. Versuche zu mounten..." - osascript -e "mount volume \"$SERVER_ADDRESS\"" - - # Nach dem Mounten erneut prüfen - if mount | grep -q "$MOUNT_POINT"; then - log "Netzlaufwerk erfolgreich gemountet." - else - log "Fehler: Netzlaufwerk konnte nicht gemountet werden." - notify "Fehler" "Server nicht erreichbar!\nRecordings -> BFDS" - exit 1 - fi +# Prüfen, ob SSH-Verbindung zum Server möglich ist +log "Prüfe SSH-Verbindung zu $SERVER..." +if ! ssh -o ConnectTimeout=5 -o BatchMode=yes "$SERVER" "exit" 2>/dev/null; then + log "Fehler: SSH-Verbindung zu $SERVER fehlgeschlagen" + notify "Fehler" "Server $SERVER nicht erreichbar!" + exit 1 fi +log "SSH-Verbindung erfolgreich" + +# Prüfen, ob das Remote-Zielverzeichnis existiert +log "Prüfe Remote-Zielverzeichnis..." +if ! ssh "$SERVER" "test -d \"$REMOTE_PATH\""; then + log "Fehler: Remote-Verzeichnis existiert nicht: $REMOTE_PATH" + notify "Fehler" "Zielverzeichnis nicht gefunden!\n$REMOTE_PATH" + exit 1 +fi + +# Prüfen, ob Schreibrechte vorhanden sind +if ! ssh "$SERVER" "test -w \"$REMOTE_PATH\""; then + log "Fehler: Keine Schreibrechte für Remote-Verzeichnis: $REMOTE_PATH" + notify "Fehler" "Keine Schreibrechte!\n$REMOTE_PATH" + exit 1 +fi + +log "Remote-Verzeichnis ist bereit für Backup" # Sicherung starten log "Starte rsync..." RSYNC_OUTPUT=$(mktemp) -rsync -v -r -l -t -D --stats "$SOURCE" "$TARGET" 2>&1 | tee -a "$LOGFILE" > "$RSYNC_OUTPUT" +log "Befehl: rsync -av --stats --no-owner --no-group \"$SOURCE\" > \"$RSYNC_OUTPUT\" \"$TARGET\"" +rsync -av --stats --no-owner --no-group "$SOURCE" "$TARGET" > "$RSYNC_OUTPUT" 2>&1 -# -r → Rekursiv kopieren (alle Unterordner & Dateien) -# -l → Symbolische Links kopieren -# -t → Zeitstempel beibehalten -# -D → Geräte- und Sonderdateien kopieren +# Rsync-Output komplett ins Logfile schreiben +cat "$RSYNC_OUTPUT" >> "$LOGFILE" + +# -a → Archive-Modus (erhält Zeitstempel, Links, etc.) +# -v → Verbose # --stats → Statistiken anzeigen +# --no-owner → Besitzer nicht übertragen +# --no-group → Gruppe nicht übertragen -# Statistiken auslesen -TOTAL_FILES=$(grep "Number of regular files transferred:" "$RSYNC_OUTPUT" | awk '{print $6}' | tr -d ',') -TOTAL_SIZE=$(grep "Total transferred file size:" "$RSYNC_OUTPUT" | awk '{print $5, $6}') +# Statistiken auslesen - rsync gibt mehrere Formate aus, teste beide +TOTAL_FILES=$(grep -E "Number of (regular )?files transferred:" "$RSYNC_OUTPUT" | awk '{print $NF}' | tr -d ',') +if [ -z "$TOTAL_FILES" ]; then + # Alternativer Versuch + TOTAL_FILES=$(grep "files transferred:" "$RSYNC_OUTPUT" | awk '{print $(NF)}' | tr -d ',') +fi + +# Dateigröße in Bytes auslesen +# macOS rsync gibt aus: "Total transferred file size: 86137390 B" +TOTAL_BYTES=$(grep "Total transferred file size:" "$RSYNC_OUTPUT" | awk '{print $5}') +# Konvertiere String in Integer +TOTAL_BYTES=$((TOTAL_BYTES)) + +# Formatiere Größe in menschenlesbares Format +TOTAL_SIZE=$(format_bytes "$TOTAL_BYTES") # Fallback falls keine Werte gefunden wurden [ -z "$TOTAL_FILES" ] && TOTAL_FILES="0" -[ -z "$TOTAL_SIZE" ] && TOTAL_SIZE="0 bytes" # Temporäre Datei löschen rm -f "$RSYNC_OUTPUT" +# Setze Besitzer und Rechte auf dem Server +log "Setze Besitzer und Rechte..." +ssh "$SERVER" "chown -R smbuser:smbuser \"$REMOTE_PATH\" && chmod -R 777 \"$REMOTE_PATH\" && find \"$REMOTE_PATH\" -type f -exec chmod 666 {} \;" 2>&1 | tee -a "$LOGFILE" + # Erfolgsmeldung ausgeben log "Backup abgeschlossen: $TOTAL_FILES Dateien, $TOTAL_SIZE übertragen"