This commit is contained in:
oliver
2026-04-21 17:00:44 -03:00
parent 11a1c2635f
commit 72243d8b18
3 changed files with 15 additions and 80 deletions
-79
View File
@@ -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"
+15
View File
@@ -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"
-1
View File
@@ -5,7 +5,6 @@ services:
volumes:
- ./app:/app
- ./exchange:/app/exchange
- ./backup:/backup
tty: true
privileged: true
extra_hosts: