n
This commit is contained in:
+25
-4
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user