diff options
author | Matthew Lemon <y@yulqen.org> | 2024-09-15 14:24:42 +0100 |
---|---|---|
committer | Matthew Lemon <y@yulqen.org> | 2024-09-15 14:24:42 +0100 |
commit | 6fd94f891da2221c1bf781288aa1e0aad9d759bb (patch) | |
tree | 84b6c952accf2fe68ca8d4779efe4d7740f5734e | |
parent | ca6b824a82bc8f277c370b4ae24ba40d248988ce (diff) |
Adds borg backup script
-rwxr-xr-x | backup-to-borg.sh | 79 |
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} |