diff --git a/backup-theseus.sh b/backup-theseus.sh new file mode 100755 index 0000000..8d6d47b --- /dev/null +++ b/backup-theseus.sh @@ -0,0 +1,77 @@ +#!/usr/bin/env bash +# check if password was set +if [[ -z "${BORG_PASSPHRASE}" ]]; then + echo 'BORG_PASSPHRASE is not set, `export BORG_PASSPHRASE=PASS`' +fi +export BORG_REPO=plex@homeserver.box:/srv/data/backup/borg/theseus + +# 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: + +/usr/local/bin/borg create \ + --verbose \ + --filter AME \ + --list \ + --stats \ + --show-rc \ + --compression zstd,11 \ + --exclude-caches \ + --exclude 'home/*/.cache/*' \ + --exclude 'var/tmp/*' \ + --exclude 'var/cache/*' \ + --exclude 'srv/data/backup' \ + --exclude '*/.Trash*' \ + \ + ::'{hostname}-{now}' \ + /home \ + /etc \ + /var + +backup_exit=$? + +info "Pruning repository" + +# Use the `prune` subcommand to maintain 3 daily, 3 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: + +/usr/local/bin/borg prune \ + --list \ + --glob-archives '{hostname}-*' \ + --show-rc \ + --keep-daily 3 \ + --keep-weekly 3 \ + --keep-monthly 6 + +prune_exit=$? + +# actually free repo disk space by compacting segments + +info "Compacting repository" + +/usr/local/bin/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 + +du -hs $BORG_REPO + +exit ${global_exit} diff --git a/backup.sh b/backup.sh deleted file mode 100755 index 73b3ba5..0000000 --- a/backup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -# check if password was set -if [[ -z "${THESEUS_BORG_PASS}" ]]; then - echo 'THESEUS_BORG_PASS is not set, `export THESEUS_BORG_PASS=PASS`' -fi -REPO_URL = plex@homeserver.box:/srv/data/backup/borg/theseus