Dieser Artikel beschreibt, wie wir mit rsync Daten oder Verzeichnisse auf ein Synology NAS synchronisieren. Anschließend erstellen wir einen Cronjob, um die Backups regelmäßig durchzuführen.

Was ist rsync?

Rsync[1] steht für Remote Sync. Hierbei handelt es sich um ein Programm, welches Dateien und Verzeichnisse synchronisiert. Dadurch können Ordner oder einzelne Dateien an einen anderen Ort synchronisiert werden. Ein Vorteil von rsync ist, dass nur Dateiunterschiede (Deltas) übertragen werden. Durch dieses Vorgehen wird der Kopierprozess stark beschleunigt.

Rsync ist Standardmäßig unter Linux installiert und arbeitet unidirektional. Da wir in diesem Beispiel unser aktuelles Arbeitsverzeichnis extern sichern, eignet sich das Programm optimal.

Ordner für Backup erstellen

Zu Beginn benötigen wir einen gemeinsamen Ordner. Hierzu melden wir uns auf dem NAS an und erstellen einen „gemeinsamen Ordner“.

Ordner anlegen via Synology DiskStation

Hierzu melden wir uns auf der Synology NAS an, öffnen die Systemsteuerung und wählen „Gemeinsamer Ordner“ aus. Anschließend kann ein neuer Ordner über den Button „Erstellen“ erstellt werden. Ich habe meinen Ordner Backup_NFS genannt.

Anschließend wählen wir den neuen Ordner aus und wählen „Bearbeiten“. Dies kann entweder mittels Rechtsklick oder dem oberen Button geschehen. Danach öffnen wir die „NFS-Berechtigungen“.

Einstellungen eines gemeinsamen Ordners bearbeiten

 

NFS-Einstellungen für den neuen Ordner

Die Liste der erlaubten Clients ist leer. Dadurch hat niemand auf diesen Ordner Zugriff. Durch den Button „Erstellen“ können wir einem neuen Client die Freigabe erteilen.

Erstellen eines NFS-Clients

Als Beispiel habe ich Hostname01 verwendet. Es ist auch möglich Wildcards, IP-Adressen oder IP-Bereiche festlegen. Ohne den Hostnamen oder die IP erhält der Client eine Fehlermeldung wie „Zugriff verweigert“.

Das NFS-Protokoll ist so aufgebaut, dass eine Autorisierung nur gegenüber Hostnamen oder IP-Adressen erfolgt. Eine Anmeldung mit Benutzername und Kennwort ist mittels NFS nicht möglich.

Eventuell müsst ihr das Protokoll vorher in eurem NAS aktivieren. Öffnet hierzu die Systemsteuerung. Die Einstellung befindet sich unter „Dateidienste“ im ersten Tab „SMB/AFP/NFS“. Setzt ganz unten den Haken für „NFS aktivieren“.

Ordner in Linux einbinden

Hierfür habe ich mich per SSH auf meinem Raspberry mit Raspbian verbunden. Auf dem Raspberry befindet sich mein Git-Server. Ich habe Gitea[2] installiert, da diese Software sehr klein ist und nicht viele Ressourcen beansprucht. Sie ist somit optimal für den Raspberry 🙂 Vorher habe ich Gitlab[3] verwendet. Allerdings gibt es dafür keine aktualisierten Images mehr.

Als erstes brauchen wir einen lokalen Ordner zum Einbinden des Netzlaufwerkes. Meiner liegt unter /mnt/Synology. Anschließend binden wir das Laufwerk lokal ein:

# Lokalen Ordner erstellen
sudo mkdir /mnt/Synology

# Ordner von Synology einbinden
sudo mount SynologyHOST:/volume1/Backup_NFS /mnt/Synology

Beachtet dabei folgende Dinge:

  • SynologyHOST ist der Hostname vom NAS. Hier müsst ihr euren Namen oder die IP-Adresse (z.B. 192.168.2.100) eintragen.
  • /volume1/Backup_NFS ist der Name des Ordners. Den Pfad hierzu wird euch in den NFS-Einstellungen ganz unten angezeigt.

Wenn ihr die Verbindung trennen wollt, nutzt folgenden Befehl:

sudo umount /mnt/Synology

Damit wird das Netzlaufwerk wieder ausgeworfen.

Synchronisieren eines Ordners

Nun nutzen wir rsync, um einen Ordner auf das Netzlaufwerk zu synchronisieren. Der Aufruf erfolgt nach dem Schema
rsync -PARAMETER QUELLE ZIEL.

Nun synchronisiere ich meinen Gitea-Ordner auf das NAS:

rsync -Pav gitea /mnt/Synology/

Der Befehl ist folgendermaßen aufgebaut:

  • rsync = Programmaufruf
  • -Pav = Parameter für den Aufruf
    • P = Partielle Datenübertragung. Datei wird bei Verbindungsabbruch nicht gelöscht
    • a = Archivierung aktivieren. Dadurch werden unter anderem die Unterordner rekursiv ergänzt
    • v (verbose) = Erhöht die Ausgabe auf der Konsole. Für Demonstrationszwecke 🙂
  • gitea = Mein lokaler Ordner auf dem Raspberry
  • /mnt/Synology = Der Netzwerkordner, den wir vorher mit mount eingebunden haben

Automatisierung mittels Cronjob

Cronjobs sind Aufgaben, die zu einem bestimmten Zeitpunkt ausgeführt werden. Sie sind vergleichbar mit den Aufgaben der Windows Aufgabenplanung. Da ich mehrere Ordner sichern möchte, habe ich mit dem Nano-Editor eine neue Datei (backup.sh) erstellt. Diese Skriptdatei beinhaltet die rsync Aufrufe. Der Cronjob führt das Skript zeitgesteuert aus.

Erstellen wir zuerst die Skriptdatei.

nano backup.sh

Anschließend füllen wir diese Datei mit ein paar Aufrufen an rsync:

#!bin/bash

SYNC_TARGET=/mnt/Synology

rsync -Pa gitea $SYNC_TARGET --delete
rsync -Pa gitea-repositories $SYNC_TARGET --delete

Ich habe dabei den Aufruf leicht abgeändert. Den Parameter v habe ich entfernt und –delete ergänzt. Dadurch werden lokal gelöschte Dateien auch im Backup entfernt. Um mir Tipparbeit zu sparen habe ich eine Variable SYNC_TARGET angelegt. Falls sich das Verzeichnis ändert, muss ich nur eine Zeile anpassen. Variablen werden mit einem $ (Dollarzeichen) ausgewertet.

Zum Abschluss rufen wir crontab -e auf und fügen eine Zeile ein, um das Backup zu automatisieren:

# m h  dom mon dow   command
0 5 * * * bash /home/pi/backup.sh

Hierdurch die Skriptdatei jeden Tag um 5 Uhr morgens aufgerufen und ausgeführt.

Zum Abschluss sehen wir uns den Ordner mittels File Manager auf dem Synology an.

Ordnerstruktur nach Synchronisierung

Hier sehen wir, dass beide Ordner synchronisiert wurden. Falls nun der Raspberry oder die Speicherkarte kaputt gehen, sind meine Daten immernoch gesichert.

Fazit

Wir haben gesehen, dass die Einbindung von NFS, rsync und einem cronjob recht einfach erledigt ist. In einer Umgebung mit verschiedenen Benutzern und Zugriffsrechten wird sich NFS wahrscheinlich nicht eignen. Hier sollte man man eher SMB verwenden.

Wie ist eure Meinung hierzu? Was ist euer Weg, um Datensicherungen regelmäßig anzulegen?


Bildnachweis: Pixabay.com

[1]: https://en.wikipedia.org/wiki/Rsync
[2]: https://gitea.io
[3]: https://gitlab.com