Datensicherung für die Nextcloud mit rsync

In diesem Beitrage zeige ich auf, wie man seine Nextcloud-Daten mit Hilfe eines Skripts und rsync auf ein openmediavault sichern kann.

Für die Sicherung via rsync ( ➡ https://de.wikipedia.org/wiki/Rsync) habe ich zwei Skripte im Verzeichnis /etc/skripte abgespeichert. Das erste Skript enthält das eigentliche Backup, die zweite Datei enthält Pfade, die vom Backup ausgeschlossen werden sollen.

Das openmediavault wird automatisch von Nextcloud-Server via NFS eingebunden, sobald das NAS angeschaltet wird. Es ist nicht erforderlich das Laufwerk über die Datei /etc/fstab zu mounten.

Backup Skript

Das Skript enthält einige Variablen im oberen Bereich, die ihr an eure Installation anpassen müsst.

Der Name des Skripts für das Beispiel lt. rsync-bakup-skript.sh.

#!/bin/bash

# by strobelstefan.org
# 2020-08-05
# Version: 1.0
# Datensicherung für die Nextcloud mit rsync
# https://strobelstefan.de/?p=8094

#
# This script creates a full backup of the Nextcloud data storage on an
# external storage located on openmediavault


###################################
# Define Variables
###################################

#Name of Nextcloud
NEXTCLOUD="nextcloud"

#Backup storage
BACKUPSTORAGE="/mnt/openmediavault/"

#Source patch
SOURCE="/mnt/data/"

#Target path on BACKUPSTORAGE
TARGET="/mnt/openmediavault/data/"

#Exclude from RSYNC file
EXCLUDEFILE="excludefile.txt"

# E-Mail Address where the export should be emailed to
EMAIL="email@email.de"


###################################
#Starts rsync Process From Source to Target
###################################
# Copies the files from Source to Target

echo $(date +%Y-%m-%d_%H-%M-%S) " - Start rsync process"

# Dieser Abschnitt erklärt die Syntax von rsync
#sudo rsync -av --stats --delete --log-file=${LOGFILE} --exclude ${EXCLUDE} --exclude ${EXCLUDE1} --exclude ${EXCLUDE2} --exclude ${EXCLUDE3} --exclude ${EXCLUDE4} ${SOURCE} ${TARGET}

# Mit Log Files von rsync
#sudo rsync -av --stats --delete --exclude ${EXCLUDE} --exclude ${EXCLUDE1} --log-file=${LOGFILE} ${SOURCE} ${TARGET}

# Ohne Log Files
sudo rsync -av --stats --exclude-from=${EXCLUDEFILE} --delete ${SOURCE} ${TARGET}

echo $(date +%Y-%m-%d_%H-%M-%S) " - Finished rsync process"

###################################
# Sends E-Mail to Defined Address
###################################
# Sends LOGFILE and compressed rsync log file vie e-mail to defined address

echo $(date +%Y-%m-%d_%H-%M-%S) " - RSYNC process finished for "${NEXTCLOUD} | mutt ${EMAIL} -s "RSYNC process finished for "${NEXTCLOUD}


Gib mir gerne einen Kaffee ☕ aus!

Wenn dir meine Beiträge gefallen und geholfen haben, dann kannst du mir gerne einen Kaffee ☕ ausgeben.

PayPal Logo


liberapay.com/strobelstefan.org


Kaffee via Bitcoin

bc1qfuz93hw2fhdvfuxf6mlxlk8zdadvnktppkzqzj


Exclude Datei

Hier handelt es sich lediglich um eine Text-Datei. Dort tragt ihr die Pfade ein, die nicht per rsync auf das openmediavault-Laufwerk gesichert werden sollen.

Ihr müsst zwingend auf die Reihenfolge achten. Im Beispiel wird das deutlich:

+ /*/files 
- /*/files_trashbin
- /*/files_versions

Das „+“ gibt an, dass der Ordner „files“ gesichert werden soll.
Der Unterordner „files_trashbin“ wird durch das Setzen eines „“ von der Datensicherung ausgeschlossen. Auch mit dem anderen Unterordner „files_versions“ wird so verfahren, er wird von der Datensicherung ausgeschlossen. Alle anderen Ordner, die sich im Verzeichnis „files“ befinden werden ganz normal gesichert.

Die Datei sieht dann so ähnlich aus.
Der Name der Datei ist inm vorherigen Skript über die Variable EXCLUDEFILE=““ auf den Namen definiert „excludefile.txt“.

- /appdata_oclxq0g8z5d1
- /updater-oclxq0g8z5d1
- /*/cache
+ /*/files
- /*/files_trashbin
- /*/files_versions
- /*/uploads

Skript ausführen

Nachdem ihr beide Dateien in das Verzeichnis /etc/skripte gespeichert habe, passt ihr die Zugriffsrechte noch an.

sudo chown root:root rsync-bakup-skript.sh
sudo chmod 0600 rsync-bakup-skript.sh
sudo chmod +x rsync-bakup-skript.sh
sudo chown root:root excludefile.txt
sudo chmod 0600 excludefile.txt

Den Datensicherungsprozess könnt ihr manuell starten. Dazu ist der Befehl auf der Konsole auszuführen

sudo sh ./rsync-bakup-skript.sh

Weiterführende Links

7 Antworten auf „Datensicherung für die Nextcloud mit rsync“

  1. Leider verstehe ich die Lösung nicht ganz. Was muss ich auf omv Seite vorbereiten einstellen und was ist allenfalls auf nextcloudpi Seite einzustellen / zu aktivieren damit die Skripten laufen. Danke.

    1. Hallo Michael,

      das Skript und die Exclude-Datei liegen auf dem Raspberry Pi und werden dort ausgeführt.
      Das omv ist hier wie ein „externer“ Speicher zu sehen, der halt irgendwo im Netzwerk hängt.

      Grüße

      Stefan

      1. Hallo Stefan
        Danke. Ist klar. Aber es muss doch NFS aktiv sein am omv. Und wo im veröffentlichten Skript sind die Befehle die omv NFS Freigabe zu mounten bzw. nach dem BackUp wieder auszuhängen? Oder habe ich Tomaten auf den Augen …. Danke.

        1. Hallo Michael,

          das stimmt, es fehlt der Abschnitt für das Mounten des NFS-Shares in dem Skript.

          OMV:
          Beim openmediavault musst du den NFS-Server einrichten und deine Nextcloud (IP-Adresse in diesem Beispiel = 192.168.2.111) erlauben darauf zuzugreifen.

          Nextcloud:
          Hier hast du zwei Möglichkeiten den NFS-Ordner von omv einzubinden.

          Möglichkeit 1: /etc/fstab

          Mit dem Eintrag in der „fstab“ wird das NFS-Share automatisch beim Starten deines Raspberry Pis eingebunden.

          Du erstellst den Ordner auf dem Pi, wo der NFS-Share eingebunden werden soll

          
          sudo mkdir /mnt/omv-nfs
          

          In der /etc/fstab trägst du dann die Zeile entsprechend diesem Beispiel ein

          
          #Openmediavault rsync Backup
          192.168.2.111:Sicherung /mnt/omv-nfs nfs    defaults    0 0
          

          Das Skript kannst du dann automatisch per Cron starten und eine Datensicherung auf omv durchführen.

          Möglichkeit 2: Skript

          Möchtest du das NFS-Share nicht automatisch bei jedem Start des Pis einbinden lassen, z.B. wenn dein omv nicht immer angeschaltet ist, dann kannst du den Ordner auch beim Ausführen des Skripts einbinden und auswerfen lassen.

          Du erstellst auch hier einen Ordner auf dem Pi, wo der NFS-Share eingebunden werden soll

          
          sudo mkdir /mnt/omv-nfs
          

          Im Skript selbst kannst du dann die Abschnitte entsprechend den Beispielen eintragen:

          
          ###################################
          # Mounts omv NFS share
          ###################################
          sudo mount 192.168.2.111:Sicherung /mnt/omv-nfs
          

          Am Ende des Skripts kannst du dann den NFS-Share auch automatisch wieder auswerfen. Dazu fügst du die Zeile ganz am Ende ein:

          
          ###################################
          # Unmounts omv NFS share
          ###################################
          sudo umount /mnt/omv-nfs
          

          Du kannst für NFS und den erstellten Ordner auch Variablen vergeben.
          Die musst du dann am Anfang des Skripts nach dem Schema eintragen:

          
          BACKUPSTORAGE="/mnt/omv-nfs"
          

          Das Auswerfen sieht dann z.B. so aus.

          
          sudo umount ${BACKUPSTORAGE}
          

          Ich hoffe das hilft dir weiter.

          Viel Erfolg!

          Grüße

          Stefan

  2. Hallo Stefan,

    vielen Dank für deine Anleitung.

    Ich habe noch ein paar Fragen und Anmerkungen dazu:
    Warum nutzt du nicht den Zeitstempel im Backup-Ordner, wie in den nextclouds-docs beschrieben:
    https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html
    bzw. hast du eine Ahnung, was dieser Zeitstempel dort soll? Der macht doch mit Zeitstempel im Ordnernamen nicht jedes mal ein Vollbackup, oder?

    zu deinem Skript:
    Vielleicht erwähnst du noch den Hinweis, dass für den E-Mail-Versand mutt u. a. installiert werden müsste. Das hatte ich bei mir noch nicht mit drauf.

    Vielen Dank und viele Grüße
    Thomas

    1. Hallo Thomas,

      Ich verwende in meinem Skript ganz bewusst keine Nextcloud-Befehle.

      Es soll im laufenden Betrieb das Datenverzeichnis auf ein anderes Speichermedium kopiert werden, als reines Backup.

      Den Zeitstempel der Nextcloud habe ich noch nicht ausprobiert.

      Du kannst auch eine platzsparende Variante für dein Backup verwenden
      Datensicherung für die Nextcloud mit BorgBackup

      Eine ganz ausführliche Schritt-für-Schritt-Anleitung für die Nextcloud-Installation gibt es auch hier im Blog. Dort wird die Konfiguration von Postfix und mutt beschrieben
      Schritt-für-Schritt zur eigenen Nextcloud

      oder auch hier auf Codeberg:
      https://codeberg.org/strobelstefan.org/nextcloud-installation-configuration

      Grüße

      Stefan

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert