Files
cc/app/backup
T
oliver 1f08c66c78 c
2026-04-21 13:08:18 -03:00

59 lines
1.2 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
REPO="/backup/borgrepo"
export BORG_PASSPHRASE
BORG_PASSPHRASE="$(cat /app/host_vars/repokey)"
export BORG_RSH="ssh -o BatchMode=yes"
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}"
echo "--- Backing up $HOST ---"
# IMPORTANT: repo is LOCAL, source is REMOTE via SSH
if ! borg create \
"$REPO::$ARCHIVE" \
"$HOST:/BACKUP" \
--stats \
--compression lz4; then
echo "WARNING: Failed to back up $HOST"
FAILED_HOSTS+=("$HOST")
fi
done
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"