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:
|
volumes:
|
||||||
- ./app:/app
|
- ./app:/app
|
||||||
- ./exchange:/app/exchange
|
- ./exchange:/app/exchange
|
||||||
- ./backup:/backup
|
|
||||||
tty: true
|
tty: true
|
||||||
privileged: true
|
privileged: true
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
|
|||||||
Reference in New Issue
Block a user