-
-
Save notDavid/f8c69add41f50a2f478b66d3484f2d47 to your computer and use it in GitHub Desktop.
This is the script I use to backup my macbook to a borgbackup repository. It should be a drop-in script and suit most users just fine, but I do recommend looking at the values and making them fit for your specific situation.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
# Setting this, so the repo does not need to be given on the commandline: | |
export BORG_REPO='*******' | |
# Setting this, so you won't be asked for your repository passphrase: | |
export BORG_PASSPHRASE='*******' | |
# some helpers and error handling: | |
function info () { echo -e "\n"`date` $@"\n" >&2; } | |
trap "echo `date` Backup interrupted >&2; exit 2" SIGINT SIGTERM | |
info "Starting backup" | |
# Backup the most important directories into an archive named after | |
# the machine this script is currently running on: | |
borg create \ | |
--verbose \ | |
--filter AME \ | |
--list \ | |
--stats \ | |
--show-rc \ | |
--compression lz4 \ | |
--exclude-caches \ | |
--exclude '/Users/*/.cache/*' \ | |
--exclude '/Users/*/.Trash/*' \ | |
--exclude '/Users/*/Library/Caches' \ | |
--exclude '/Users/*/Library/Mobile Documents' \ | |
--exclude '/Users/*/Library/Containers/com.apple.mail/Data/Library/Mail Downloads' \ | |
--exclude '/Users/*/Music/iTunes/iTunes Media/Movies' \ | |
--exclude '/Users/*/Music/iTunes/iTunes Media/TV Shows' \ | |
--exclude '/Users/*/Dropbox' \ | |
--exclude '/Users/*/Google Drive' \ | |
--exclude '/Users/*/VirtualBox VMs' \ | |
\ | |
::'{hostname}-{now}' \ | |
/Users \ | |
/Library \ | |
/Applications \ | |
/usr/local # homebrew | |
backup_exit=$? | |
info "Pruning repository" | |
# Use the `prune` subcommand to maintain 24 hourly, 7 daily, 4 weekly and 6 monthly | |
# archives of THIS machine. The '{hostname}-' prefix is very important to | |
# limit prune's operation to this machine's archives and not apply to | |
# other machines' archives also: | |
borg prune \ | |
--list \ | |
--prefix '{hostname}-' \ | |
--show-rc \ | |
--stats \ | |
--keep-hourly 24 \ | |
--keep-daily 7 \ | |
--keep-weekly 4 \ | |
--keep-monthly 6 \ | |
prune_exit=$? | |
global_exit=$(( ${backup_exit} > ${prune_exit} ? ${backup_exit} : ${prune_exit} )) | |
if [ ${global_exit} -eq 1 ]; | |
then | |
info "Backup and/or Prune finished with a warning" | |
fi | |
if [ ${global_exit} -gt 1 ]; | |
then | |
info "Backup and/or Prune finished with an error" | |
fi | |
exit ${global_exit} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment