#!/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 <$BORG_PATH/encrypted-repokey && \ return 0 || return 1 } # überprüfen, ob borg-Repository initialisiert wurde # und ausführen, falls nötig borg_check() { if $BORG check ${BORG_REPO}; then echo "Das Repository ist bereits initialisiert." return 0 else echo "Das Repository ist nicht initialisiert. Initialisiere jetzt..." if $BORG init --encryption="$BORG_ENCRYPTION" "$BORG_REPO"; then echo "Repository erfolgreich initialisiert." #Repokey zusätzlich lokal speichern [ "$BORG_ENCRYPTION" == "repokey" ] && borg_keyexport return 0 else echo "Repository konnte nicht initialisiert werden." return 1 fi fi } # This command displays detailed information about the specified archive or repository. borg_info() { echo "Informationen zum Repository:" borg info "$BORG_REPO" if [ $? -ne 0 ]; then echo "Fehler beim Zugriff." return 1 fi } # Borg-Sicherungen aufräumen # Anzahl der Sicherungen wird in $BORG_PRUNING festgelegt borg_prune() { $BORG prune -v --list $BORG_PRUNING "$BORG_REPO" } # auflisten von Borg-Sicherungen borg_list() { # Auflisten der Sicherungen echo "Vorhandene Sicherungen im Repository:" borg list "$BORG_REPO" if [ $? -ne 0 ]; then echo "Fehler beim Auflisten der Sicherungen." return 1 fi } ## mount repo restore to defined directory ##This command mounts an archive as a FUSE filesystem. borg_mount() { if mountpoint -q "$BORG_MOUNTPOINT"; then echo "Already mounted or already a mountpoint!" else mkdir -p ${BORG_MOUNTPOINT} chmod a-w ${BORG_MOUNTPOINT} if $BORG mount ${BORG_REPO} ${BORG_MOUNTPOINT}; then echo "Mounting Repository to ${BORG_MOUNTPOINT}" echo "Switch to ${BORG_MOUNTPOINT} to browse backup archives!" echo echo "--- Showing list of available backups ---" echo ls -al ${BORG_MOUNTPOINT} echo echo echo "-------------------------------------------" echo "MAKE SURE TO UNMOUNT REPO WHEN FINISHED WITH" echo "$ $BORG_SCRIPT umount" echo "-------------------------------------------" return 0 else echo "ERROR mounting Repository to ${BORG_MOUNTPOINT}" return 1 fi fi } #eingebundene Borg-Sicherungen wieder lösen borg_umount() { if mountpoint -q "$BORG_MOUNTPOINT"; then if $BORG umount ${BORG_MOUNTPOINT}; then echo "Restore folder unmounted" else echo "No restore folder mounted!" fi else echo "Nothing is mounted in $BORG_MOUNTPOINT..." fi } # ------------------- MAIN ## Write output to logfile exec > >(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