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