Files
Bruchtal/docs/backup_restore/proxmox/paperless/paperless_backup.md
2026-03-02 19:30:31 +01:00

6.6 KiB

Paperless Backup

  • tägliches backup der VM unter Proxmox auf der QNAP => Proxmox_Backup
  • Sicherung der Nutzdaten: erfolgt per Skript und cron auf hetzner.storage
Location /paperless/backup_storage: ``` #!/usr/bin/env bash #####!/bin/bash

########### Initialisierung ##############

https://docs.hetzner.com/de/robot/storage-box/backup-space-ssh-keys/

Führe auf dem Clienten die folgenden Befehle aus:

ssh-keygen

cat ~/.ssh/id_rsa.pub | ssh -p23 u338XXX@u338XXX.your-storagebox.de install-ssh-key

Hier deine Daten einfügen

export BORG_PASSPHRASE="%ci5pKqWvXj!iBm9khAR@Z2ohJ2inMMht8ZNsU*"

BACKUP_USER="u358899" REPOSITORY_DIR="paperless" ##########################################

LOG_DIR="/paperless/backuplogs" LOG="$LOG_DIR/backup_storage.log"

echo "MOIN!" >> /paperless/test.log

if [ ! -d "$LOG_DIR" ]; then mkdir -p "$LOG_DIR" fi

full_path=$(realpath $0) dir_path=$(dirname $full_path) echo $dir_path

Hinweis: Für die Verwendung mit einem Backup-Account muss

'your-storagebox.de' in 'your-backup.de' geändert werden.

REPOSITORY="ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}"

Zeitstempel-Variable setzen

TIMESTAMP=$(date +'%Y-%m-%d_%H:%M')

Ausgabe in Logdatei schreiben

exec > >(tee -i ${LOG}) exec 2>&1

start_time=$(date +'%Y-%m-%d %H:%M:%S') echo "###### Backup gestartet: $start_time ######"

Überprüfen, ob eine spezielle Aktion durchgeführt werden soll

BACKUP_SUFFIX="" case "$1" in NEW_INIT) echo "Überprüfe, ob das Verzeichnis backups/${REPOSITORY_DIR} existiert..." ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de "[ -d backups/${REPOSITORY_DIR} ] || mkdir -p backups/${REPOSITORY_DIR}" echo "Das Repository wird komplett gelöscht und neu angelegt..." borg delete --force --stats $REPOSITORY borg init --encryption=repokey $REPOSITORY BACKUP_SUFFIX="_NEW_INIT" ;; INIT) echo "Überprüfe, ob das Verzeichnis backups/${REPOSITORY_DIR} existiert..." ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de "[ -d backups/${REPOSITORY_DIR} ] || mkdir -p backups/${REPOSITORY_DIR}" echo "Überprüfe, ob das Repository existiert..." if borg info $REPOSITORY > /dev/null 2>&1; then echo "Das Repository existiert bereits. Vorgang wird abgebrochen." exit 1 else echo "Das Repository wird neu angelegt..." borg init --encryption=repokey $REPOSITORY fi BACKUP_SUFFIX="_INIT" ;; ?) echo -e "\n######################################" echo -e "Verwendung des Backup-Skripts:" echo -e "######################################" echo -e "Ohne Parameter:" echo -e " Führt ein reguläres Backup durch und hängt an den Backup-Namen das aktuelle Datum und die Uhrzeit." echo -e "\nParameter:" echo -e " NEW_INIT - Löscht das Repository komplett und legt es neu an." echo -e " INIT - Legt das Repository neu an, wenn es nicht bereits existiert." echo -e " ? - Zeigt diese Hilfemeldung an und bricht das Skript ab." echo -e "\nBeispiele:" echo -e " ./backup_script.sh" echo -e " ./backup_script.sh NEW_INIT" echo -e " ./backup_script.sh INIT" echo -e " ./backup_script.sh ?" echo -e "\nBackups auflisten mit:" echo -e " borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}\n" echo -e "Rücksichern einzelner Verzeichnisse mit:" echo -e " cd /mytmp # Wechseln Sie in ein Testverzeichnis, um das Backup zu testen." echo -e " borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX} etc var lib lib64 sbin usr bin" echo -e "######################################\n" echo -e "Komplette Rücksicherung mit:" echo -e "cd / # Wechseln Sie in das Root-Verzeichnis, um das gesamte System wiederherzustellen." echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX}" echo -e "######################################\n" echo -e "Auf den Backup-Server verbinden:" echo -e "ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de" echo -e "Verzeichnisinhalt anzeigen:" echo -e "ls backups/${REPOSITORY_DIR}" echo -e "Verzeichnis der aktuellen Backups löschen:" echo -e "rm -rf backups/${REPOSITORY_DIR}" echo -e "######################################\n" exit 0 ;; esac

Überprüfen, ob ein zusätzlicher Parameter übergeben wurde

if [ -n "$1" ] && [ "$1" != "INIT" ] && [ "$1" != "NEW_INIT" ]; then BACKUP_SUFFIX="_$1" fi

Zu sichernde Verzeichnisse

Hier werden alle Verzeichnisse im Root-Verzeichnis gesichert, außer den ausgeschlossenen Verzeichnissen

DIRS_TO_BACKUP=( "/paperless/paperless-ngx/export" )

Dateien ins Repository übertragen

echo "Übertrage Dateien ..." borg create -v --stats
$REPOSITORY::"${TIMESTAMP}${BACKUP_SUFFIX}"
"${DIRS_TO_BACKUP[@]}" # \

end_time=$(date +'%Y-%m-%d %H:%M:%S') duration=$(date -u -d @$(( $(date -d "$end_time" +%s) - $(date -d "$start_time" +%s) )) +%H:%M:%S)

echo "###### Backup beendet: $end_time ######" echo "Time (start): $start_time" echo "Time (end): $end_time" echo "Duration: $duration"

echo -e "\n######################################" echo -e "Backups auflisten mit:" echo -e "borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}\n"

echo -e "Rücksichern einzelner Verzeichnisse mit:" echo -e "cd /mytmp # Wechseln Sie in ein Testverzeichnis, um das Backup zu testen." echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX} etc var lib lib64 sbin usr bin" echo -e "######################################\n"

echo -e "Komplette Rücksicherung mit:" echo -e "borg extract ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR}::${TIMESTAMP}${BACKUP_SUFFIX}" echo -e "######################################\n"

echo -e "Auf den Backup-Server verbinden:" echo -e "ssh -p23 ${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de" echo -e "Verzeichnisinhalt anzeigen:" echo -e "ls backups/${REPOSITORY_DIR}" echo -e "Verzeichnis der aktuellen Backups löschen:" echo

echo -e "rm -rf backups/${REPOSITORY_DIR}" echo -e "######################################\n"

borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR} >> ${LOG}

</details>