#!/usr/bin/env bash set -Eeuo pipefail SOURCE_DIR="/home/urban/docker/unifi/config/data/backup/autobackup" ## SOURCE_DIR="/home/urban/docker/unifi/config/data/backup" REMOTE_HOST="backupserver" REMOTE_DIR="/storage/disk3/backup/unifi/daily" LOG_TAG="unifi-backup" log() { printf '%s [%s] %s\n' \ "$(date --iso-8601=seconds)" \ "$LOG_TAG" \ "$*" } if [[ ! -d "$SOURCE_DIR" ]]; then log "Fel: backupkatalogen saknas: $SOURCE_DIR" >&2 exit 1 fi LATEST_BACKUP="$( find "$SOURCE_DIR" -maxdepth 1 -type f \ \( -name '*.unf' -o -name '*.unifi' \) \ -printf '%T@ %p\n' | sort -nr | head -n 1 | cut -d' ' -f2- )" if [[ -z "${LATEST_BACKUP:-}" ]]; then log "Fel: hittade ingen UniFi-backup i $SOURCE_DIR" >&2 exit 1 fi if [[ ! -s "$LATEST_BACKUP" ]]; then log "Fel: backupfilen är tom: $LATEST_BACKUP" >&2 exit 1 fi TIMESTAMP="$(date '+%Y-%m-%d_%H-%M-%S')" BASENAME="$(basename "$LATEST_BACKUP")" REMOTE_NAME="${TIMESTAMP}_${BASENAME}" log "Kopierar $LATEST_BACKUP till ${REMOTE_HOST}:${REMOTE_DIR}/${REMOTE_NAME}" ssh "$REMOTE_HOST" "mkdir -p '$REMOTE_DIR'" rsync \ --archive \ --compress \ --partial \ --chmod=F600,D700 \ "$LATEST_BACKUP" \ "${REMOTE_HOST}:${REMOTE_DIR}/${REMOTE_NAME}" log "Verifierar fjärrfilen" LOCAL_SIZE="$(stat -c '%s' "$LATEST_BACKUP")" REMOTE_SIZE="$( ssh "$REMOTE_HOST" \ "stat -c '%s' '$REMOTE_DIR/$REMOTE_NAME'" )" if [[ "$LOCAL_SIZE" != "$REMOTE_SIZE" ]]; then log "Fel: storleken skiljer sig: lokal=$LOCAL_SIZE remote=$REMOTE_SIZE" >&2 exit 1 fi ssh "$REMOTE_HOST" \ "find '$REMOTE_DIR' -maxdepth 1 -type f -mtime +90 -delete" log "Backup klar: ${REMOTE_DIR}/${REMOTE_NAME}"