This commit is contained in:
oliver
2026-04-21 13:49:29 -03:00
parent 1f08c66c78
commit c94bac2db3
+25 -4
View File
@@ -2,12 +2,11 @@
set -euo pipefail set -euo pipefail
REPO="/backup/borgrepo" REPO="/backup/borgrepo"
MOUNT_BASE="/tmp/borg-sshfs"
export BORG_PASSPHRASE export BORG_PASSPHRASE
BORG_PASSPHRASE="$(cat /app/host_vars/repokey)" BORG_PASSPHRASE="$(cat /app/host_vars/repokey)"
export BORG_RSH="ssh -o BatchMode=yes"
HOSTS_FILE="$(dirname "$0")/host_vars/hosts" HOSTS_FILE="$(dirname "$0")/host_vars/hosts"
TIMESTAMP="$(date +%Y-%m-%dT%H%M%S)" TIMESTAMP="$(date +%Y-%m-%dT%H%M%S)"
@@ -24,20 +23,42 @@ FAILED_HOSTS=()
for HOST in "${HOSTS[@]}"; do for HOST in "${HOSTS[@]}"; do
ARCHIVE="${HOST}-backup-${TIMESTAMP}" ARCHIVE="${HOST}-backup-${TIMESTAMP}"
MOUNT_DIR="${MOUNT_BASE}/${HOST}"
echo "--- Backing up $HOST ---" echo "--- Backing up $HOST ---"
# IMPORTANT: repo is LOCAL, source is REMOTE via SSH mkdir -p "$MOUNT_DIR"
# Pull mode: mount client's /BACKUP locally via SSHFS
if ! sshfs "${HOST}:/BACKUP" "$MOUNT_DIR" \
-o BatchMode=yes,reconnect,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 \ if ! borg create \
"$REPO::$ARCHIVE" \ "$REPO::$ARCHIVE" \
"$HOST:/BACKUP" \ "$MOUNT_DIR" \
--pattern "+ sh:*/current*" \
--pattern "- *" \
--files-cache ctime,size \
--stats \ --stats \
--compression lz4; then --compression lz4; then
echo "WARNING: Failed to back up $HOST" echo "WARNING: Failed to back up $HOST"
FAILED_HOSTS+=("$HOST") FAILED_HOSTS+=("$HOST")
fi fi
# Unmount and clean up regardless of borg exit status
umount "$MOUNT_DIR"
rmdir "$MOUNT_DIR"
done done
rmdir "$MOUNT_BASE" 2>/dev/null || true
echo "Applying retention policy..." echo "Applying retention policy..."
for HOST in "${HOSTS[@]}"; do for HOST in "${HOSTS[@]}"; do