pruning
This commit is contained in:
-79
@@ -1,79 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
REPO="/backup/borgrepo"
|
||||
MOUNT_BASE="/tmp/borg-sshfs"
|
||||
|
||||
export BORG_PASSPHRASE
|
||||
BORG_PASSPHRASE="$(cat /app/host_vars/repokey)"
|
||||
|
||||
HOSTS_FILE="$(dirname "$0")/host_vars/hosts"
|
||||
TIMESTAMP="$(date +%Y-%m-%dT%H%M%S)"
|
||||
|
||||
HOSTS=()
|
||||
while read -r host; do
|
||||
[[ -z "$host" || "$host" =~ ^# ]] && continue
|
||||
HOSTS+=("$host")
|
||||
done < "$HOSTS_FILE"
|
||||
|
||||
echo "Backing up hosts:"
|
||||
printf ' - %s\n' "${HOSTS[@]}"
|
||||
|
||||
FAILED_HOSTS=()
|
||||
|
||||
for HOST in "${HOSTS[@]}"; do
|
||||
ARCHIVE="${HOST}-backup-${TIMESTAMP}"
|
||||
MOUNT_DIR="${MOUNT_BASE}/${HOST}"
|
||||
echo "--- Backing up $HOST ---"
|
||||
|
||||
mkdir -p "$MOUNT_DIR"
|
||||
|
||||
# Pull mode: mount client's /BACKUP locally via SSHFS
|
||||
if ! sshfs "${HOST}:/BACKUP" "$MOUNT_DIR" \
|
||||
-o BatchMode=yes,reconnect,follow_symlinks,ServerAliveInterval=15,ServerAliveCountMax=3; then
|
||||
echo "WARNING: Failed to mount $HOST:/BACKUP via SSHFS"
|
||||
FAILED_HOSTS+=("$HOST")
|
||||
rmdir "$MOUNT_DIR"
|
||||
continue
|
||||
fi
|
||||
|
||||
# SSHFS (FUSE/SFTP) does not guarantee stable inode numbers,
|
||||
# so instruct borg to use ctime+size for file change detection instead.
|
||||
if ! borg create \
|
||||
"$REPO::$ARCHIVE" \
|
||||
"$MOUNT_DIR" \
|
||||
--pattern "+ sh:**/current*" \
|
||||
--pattern "- *" \
|
||||
--files-cache ctime,size \
|
||||
--stats \
|
||||
--compression lz4; then
|
||||
|
||||
echo "WARNING: Failed to back up $HOST"
|
||||
FAILED_HOSTS+=("$HOST")
|
||||
fi
|
||||
|
||||
# Unmount and clean up regardless of borg exit status
|
||||
umount "$MOUNT_DIR"
|
||||
rmdir "$MOUNT_DIR"
|
||||
done
|
||||
|
||||
rmdir "$MOUNT_BASE" 2>/dev/null || true
|
||||
|
||||
echo "Applying retention policy..."
|
||||
|
||||
for HOST in "${HOSTS[@]}"; do
|
||||
borg prune \
|
||||
"$REPO" \
|
||||
--keep-daily=7 \
|
||||
--keep-weekly=8 \
|
||||
--glob-archives "${HOST}-backup-*" \
|
||||
--stats
|
||||
done
|
||||
|
||||
if [[ ${#FAILED_HOSTS[@]} -gt 0 ]]; then
|
||||
echo "DONE WITH ERRORS:"
|
||||
printf ' - %s\n' "${FAILED_HOSTS[@]}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Done: all hosts backed up at $TIMESTAMP"
|
||||
Executable
+15
@@ -0,0 +1,15 @@
|
||||
#!/bin/bash
|
||||
set -e
|
||||
|
||||
export BORG_REPO="ssh://e7e9h45y@e7e9h45y.repo.borgbase.com/./repo"
|
||||
export BORG_RSH="ssh -i ~/.ssh/borg-backup"
|
||||
|
||||
echo "Applying retention policy..."
|
||||
|
||||
borg prune \
|
||||
--keep-daily=7 \
|
||||
--keep-weekly=8 \
|
||||
--keep-monthly=12 \
|
||||
--stats
|
||||
|
||||
echo "Done: pruning complete"
|
||||
@@ -5,7 +5,6 @@ services:
|
||||
volumes:
|
||||
- ./app:/app
|
||||
- ./exchange:/app/exchange
|
||||
- ./backup:/backup
|
||||
tty: true
|
||||
privileged: true
|
||||
extra_hosts:
|
||||
|
||||
Reference in New Issue
Block a user