#!/usr/bin/env bash if [[ "$HOME" == "/" ]] ; then HOME="/root/" fi HOME=${HOME:-"/root/"} PERSONALCONFIG="$HOME/.config/borg.conf" BORGHOST="" USER="" REPO="" MAC="" BORG_PASSPHRASE="" BORG_EXCLUDE_FILE="" BORG_EXCLUDE_PATTERN=("/var/cache/*" "/var/tmp/*" ) BORG_BACKUP_DIRS=( "/etc" "/var" "/home" "/usr/local" ) APPENDONLY="YES" #unset if not used BORG_PRUNEARG=("--keep-daily=7" "--keep-weekly=4" "--keep-monthly=12") MYREPO=${USER}@${BORGHOST}:${REPO} BORG_ARGS="" if [[ -e "$PERSONALCONFIG" ]] ; then ls -l "$PERSONALCONFIG" #shellcheck disable=SC1090 source "$PERSONALCONFIG" else echo "$PERSONALCONFIG not found" fi MYREPO="${USER}@${BORGHOST}:${REPO}" export BORG_PASSPHRASE export HOME echo using repo: $MYREPO SNAPSHOT="$(date +%a-%Y-%m-%d)" echo #### borg backup #### if [[ -n "${MAC}" ]] ; then if ! ping -c 1 $BORGHOST &> /dev/null ; then wakeonlan $MAC #wakup may take some time sleep 10 else echo $BORGHOST is up fi fi #wordsplitting is needed for arguments #shellcheck disable=SC2046 nice ionice -c 3 borg create --stats \ --exclude-caches \ --one-file-system \ ${BORG_ARGS} \ $([[ -n "${BORG_EXCLUDE_PATTERN[*]}" ]] && printf " --exclude \"%s\" " "${BORG_EXCLUDE_PATTERN[@]}" ) \ $([[ -n "$BORG_EXCLUDE_FILE" ]] && printf " --exclude-from \"%s\" " "${BORG_EXCLUDE_FILE}" ) \ "${MYREPO}::${SNAPSHOT}" \ "${BORG_BACKUP_DIRS[@]}" echo RetVal = $? if [[ "${APPENDONLY}" != "YES" ]] ; then time borg prune -v "$MYREPO" "${BORG_PRUNEARG[@]}" echo RetVal = $? time borg list -v $MYREPO echo RetVal = $? else echo "#############" echo "You should purge the repository from time to time" fi echo ##### borg end ######