This commit is contained in:
Andras Schmelczer 2026-03-15 14:21:26 +00:00
commit 99bf0f857f
3 changed files with 16 additions and 22 deletions

View file

@ -5,15 +5,14 @@ KEEP_WEEKLY=${KEEP_WEEKLY:-3}
KEEP_MONTHLY=${KEEP_MONTHLY:-48}
KEEP_YEARLY=${KEEP_YEARLY:-10}
echo "Starting backup script at `date`"
echo "Starting backup script at $(date)"
export BORG_RSH='ssh -oBatchMode=yes' # https://borgbackup.readthedocs.io/en/stable/usage/notes.html#ssh-batch-mode
# break any stale locks in case the script was interrupted
borg break-lock
borg info # test whether we have a valid repository
if [ $? -ne 0 ]; then
if ! borg info; then
echo "Borg info returned a non-zero status. Initializing Borg..."
borg init --encryption=repokey
fi
@ -32,18 +31,18 @@ btrfs subvolume snapshot /btrfs-root /snapshot
cd "/snapshot/btrfs-root$BACKUP_RELATIVE_PATH"
# Generate exclusions for git-untracked files if enabled
EXCLUDE_ARGS="--exclude-from /exclude.conf"
EXCLUDE_ARGS=(--exclude-from /exclude.conf)
if [ "${IGNORE_GIT_UNTRACKED:-false}" = "true" ]; then
echo "Generating exclusions for git-untracked files..."
GIT_EXCLUDE_FILE=$(mktemp)
# Find all git repositories and list their untracked files
find . -name .git -type d 2>/dev/null | while read gitdir; do
find . -name .git -type d 2>/dev/null | while read -r gitdir; do
repo_dir=$(dirname "$gitdir")
(
cd "$repo_dir"
# Get untracked files (respecting .gitignore)
git ls-files --others --exclude-standard 2>/dev/null | while read file; do
git ls-files --others --exclude-standard 2>/dev/null | while read -r file; do
# Output path relative to backup root
echo "${repo_dir#./}/$file"
done
@ -53,7 +52,7 @@ if [ "${IGNORE_GIT_UNTRACKED:-false}" = "true" ]; then
excluded_count=$(wc -l < "$GIT_EXCLUDE_FILE")
echo "Found $excluded_count git-untracked files to exclude"
EXCLUDE_ARGS="$EXCLUDE_ARGS --exclude-from $GIT_EXCLUDE_FILE"
EXCLUDE_ARGS+=(--exclude-from "$GIT_EXCLUDE_FILE")
fi
borg create --stats \
@ -61,7 +60,7 @@ borg create --stats \
--filter=AMCE \
--files-cache=ctime,size,inode \
--compression=zstd,12 \
$EXCLUDE_ARGS ::"{hostname}-{now:%Y-%m-%dT%H:%M:%S}" .
"${EXCLUDE_ARGS[@]}" ::"{hostname}-{now:%Y-%m-%dT%H:%M:%S}" .
# Clean up temporary exclude file
if [ -n "$GIT_EXCLUDE_FILE" ] && [ -f "$GIT_EXCLUDE_FILE" ]; then
@ -71,10 +70,10 @@ fi
cd -
borg prune --list --stats \
--keep-daily=$KEEP_DAILY \
--keep-weekly=$KEEP_WEEKLY \
--keep-monthly=$KEEP_MONTHLY \
--keep-yearly=$KEEP_YEARLY
--keep-daily="$KEEP_DAILY" \
--keep-weekly="$KEEP_WEEKLY" \
--keep-monthly="$KEEP_MONTHLY" \
--keep-yearly="$KEEP_YEARLY"
borg compact --threshold=5 --cleanup-commits --verbose --progress