Add automated UniFi backup to Biff
This commit is contained in:
72
scripts/backup-to-biff.sh
Executable file
72
scripts/backup-to-biff.sh
Executable 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}"
|
||||
Reference in New Issue
Block a user