#!/bin/bash # # Borg-Backup taeglich, siehe Obsidian für Einrichtung # Anregungen von Artur und # https://www.4rr0wx.com/borgbackup-mit-hetzner-storage-box-verwenden/ # # 2025-05-14, misc # !!!!!!!!!!!!!!!!!!!!--------------------!!!!!!!!!!!!!!!!!!!!! # !!! Unbedingt anpassen in .env (wird beim ersten Start erzeugt)!!! # Anschliessend die include-Datei auf nicht vorhandene Verzeichnisse untersuchen # !!! und anpassen. Die exclude-Datei ist in der Regel ok. # !!!!!!!!!!!!!!!!!!!!--------------------!!!!!!!!!!!!!!!!!!!!! # Wenn nicht vorhanden werden include und exclude geschrieben. Ab da nur noch dort aendern. # --------------------------------------------------------------------- # Ab hier normalerweise nichts anpassen export BORG_REPO="ssh://storagebox/./backup" LOGTIME=`date +%m-%d` BORG=/usr/bin/borg BORG_PATH=/root/sc BORG_INCLUDEFILE="$BORG_PATH/include.lst" BORG_EXCLUDEFILE="$BORG_PATH/exclude.lst" BORG_MOUNTPOINT=$BORG_PATH/mountpoint BORG_COMPRESSION=lz4 BORG_ENCRYPTION=repokey LOG="$BORG_PATH/workdir/borgbackup-$LOGTIME.log" HOST="$(hostname)" include_list() { cat <&2 ; exit 1; } ## neues Backup erzeugen borg_create() { echo "###### Starting $0 $* on $(date) ######" $BORG create -v \ --warning \ --filter AME \ --list \ --stats \ --show-rc \ --compression $BORG_COMPRESSION \ --exclude-caches \ --exclude-if-present ".nobackup" \ --keep-exclude-tags \ --exclude-from $BORG_EXCLUDEFILE \ $BORG_REPO::'{now:%Y-%m-%d_%H:%M}' \ $(cat ${BORG_INCLUDEFILE}) if [ $? -eq 0 ]; then echo Calling Success_URL curl -o /dev/null -s $SUCCESS_URL else echo Calling Error_URL curl -o /dev/null -s $ERROR_URL fi echo "###### Finished backup on $(date) ######" } # Hilfe zur Nutzung des Skripts usage() { cat < >(tee -i ${LOG}) exec 2>&1 # Include/Exclude [ -f $BORG_INCLUDEFILE ] || include_list >$BORG_INCLUDEFILE [ -f $BORG_EXCLUDEFILE ] || exclude_list >$BORG_EXCLUDEFILE # beim ersten Aufruf .env anlegen [ -f $BORG_PATH/.env ] || borg_env >$BORG_PATH/.env # Variablen aus .env einlesen source "$BORG_PATH/.env" case "$1" in check | init) # überprüfen, ob borg-Repository bereits initialisiert wurde # und führen borg init aus, falls nötig borg_check ;; run | create) borg_umount #eventuell eingebundene Backups entfernen borg_check || die "$BORG_REPO kann nicht angelegt werden" borg_create borg_prune #send_log ;; info) #zeige ausführliche Informationen zum Repo borg_info ;; list) #zeige vorhanden Sicherungen borg_list ;; prune) #bereinige das Backup-Repo borg_prune ;; mount) #stelle Backups als Verzeichnisbaum zur Verfügung borg_mount ;; umount) #entferne das Backup-Repo aus dem Dateisystem borg_umount ;; keyexport) #exportiert Repokey in lokale Datei borg_keyexport ;; *) #Hilfe anzeigen usage ;; esac