Add automated UniFi backup to Biff

This commit is contained in:
Urban Modig
2026-07-14 09:17:25 +02:00
parent 018be6c778
commit 2cbaadd8b1

72
scripts/backup-to-biff.sh Executable file
View File

@ -0,0 +1,72 @@
#!/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}"