diff --git a/docs/backup_restore/proxmox/paperless/paperless_backup.md b/docs/backup_restore/proxmox/paperless/paperless_backup.md index fe05c78..32d18f3 100644 --- a/docs/backup_restore/proxmox/paperless/paperless_backup.md +++ b/docs/backup_restore/proxmox/paperless/paperless_backup.md @@ -4,171 +4,171 @@ - Sicherung der Nutzdaten: ??? example "Location /paperless/backup_storage.sh" -``` -#!/usr/bin/env bash -#####!/bin/bash + ``` + #!/usr/bin/env bash + #####!/bin/bash -########### Initialisierung ############## -#### https://docs.hetzner.com/de/robot/storage-box/backup-space-ssh-keys/ + ########### 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 + ## 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*" + ###### Hier deine Daten einfügen ######### + export BORG_PASSPHRASE="%ci5pKqWvXj!iBm9khAR@Z2ohJ2inMMht8ZNsU*" -BACKUP_USER="u358899" -REPOSITORY_DIR="paperless" -########################################## + BACKUP_USER="u358899" + REPOSITORY_DIR="paperless" + ########################################## -LOG_DIR="/paperless/backuplogs" -LOG="$LOG_DIR/backup_storage.log" + LOG_DIR="/paperless/backuplogs" + LOG="$LOG_DIR/backup_storage.log" -echo "MOIN!" >> /paperless/test.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 + if [ ! -d "$LOG_DIR" ]; then + mkdir -p "$LOG_DIR" fi - BACKUP_SUFFIX="_INIT" - ;; - ?) + + + 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 "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 "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 "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 + 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} + borg list ssh://${BACKUP_USER}@${BACKUP_USER}.your-storagebox.de:23/./backups/${REPOSITORY_DIR} >> ${LOG} ```