aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthew Lemon <y@yulqen.org>2024-09-15 14:24:42 +0100
committerMatthew Lemon <y@yulqen.org>2024-09-15 14:24:42 +0100
commit6fd94f891da2221c1bf781288aa1e0aad9d759bb (patch)
tree84b6c952accf2fe68ca8d4779efe4d7740f5734e
parentca6b824a82bc8f277c370b4ae24ba40d248988ce (diff)
Adds borg backup script
-rwxr-xr-xbackup-to-borg.sh79
1 files changed, 79 insertions, 0 deletions
diff --git a/backup-to-borg.sh b/backup-to-borg.sh
new file mode 100755
index 0000000..035cf87
--- /dev/null
+++ b/backup-to-borg.sh
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+ARCHIVE_NAME=matt_desktop
+SBUSER=my_storagebox_user
+
+# Setting this, so the repo does not need to be given on the commandline:
+export BORG_REPO=ssh://$SBUSER@$SBUSER.your-storagebox.de:23/~/backups/$ARCHIVE_NAME
+
+# See the section "Passphrase notes" for more infos.
+#export BORG_PASSPHRASE='HERE'
+
+# some helpers and error handling:
+info() { printf "\n%s %s\n\n" "$( date )" "$*" >&2; }
+trap 'echo $( date ) Backup interrupted >&2; exit 2' INT TERM
+
+info "Starting backup"
+
+# Backup the most important directories into an archive named after
+# the machine this script is currently running on:
+
+borg create \
+ --progress \
+ --verbose \
+ --filter AME \
+ --list \
+ --stats \
+ --show-rc \
+ --compression lz4 \
+ --exclude-caches \
+ --exclude 'home/*/.cache/*' \
+ --exclude 'Factorio/*' \
+ --exclude 'Zeal/*' \
+ --exclude 'share/JetBrains/*' \
+ \
+ ::'{hostname}-{now}' \
+ /etc \
+ /home \
+ /root \
+
+backup_exit=$?
+
+info "Pruning repository"
+
+# Use the `prune` subcommand to maintain 7 daily, 4 weekly and 6 monthly
+# archives of THIS machine. The '{hostname}-*' matching is very important to
+# limit prune's operation to this machine's archives and not apply to
+# other machines' archives also:
+
+borg prune \
+ --list \
+ --glob-archives '{hostname}-*' \
+ --show-rc \
+ --keep-daily 7 \
+ --keep-weekly 4 \
+ --keep-monthly 6
+
+prune_exit=$?
+
+# actually free repo disk space by compacting segments
+
+info "Compacting repository"
+
+borg compact
+
+compact_exit=$?
+
+# use highest exit code as global exit code
+global_exit=$(( backup_exit > prune_exit ? backup_exit : prune_exit ))
+global_exit=$(( compact_exit > global_exit ? compact_exit : global_exit ))
+
+if [ ${global_exit} -eq 0 ]; then
+ info "Backup, Prune, and Compact finished successfully"
+elif [ ${global_exit} -eq 1 ]; then
+ info "Backup, Prune, and/or Compact finished with warnings"
+else
+ info "Backup, Prune, and/or Compact finished with errors"
+fi
+
+exit ${global_exit}