Verzeichnis von Server per rsync spiegeln

Ich betreibe diverse Websites oder Anwendungen (meist JEE getrieben) auf eigenen Servern. Natürlich bieten so ziemlich alle Provider irgend welche Lösungen zur Datensicherung, so ganz vertrauen tue ich diesen jedoch nicht zwingend. Das Thema rsync (siehe ubuntuusers.de) in Verbindung mit curlftpfs (siehe ubuntuusers.de) stellte sich für mich als eine praktikable Problemlösung heraus.

Aus diesem Grund stellte ich mir die Frage wie ich noch etwas besser schlafen kann und wie ich mir eine eigene Datensicherung (als Fallback-Lösung) schaffen kann. Hierbei habe ich mir die folgende, für mich passende, Lösung gebaut.

inkrementelle Serversicherung auf lokalem NAS

In meinem Anwendungsfall betreibe ich 3 Server / vServer irgendwo im Internet (bei unterschiedlichen Providern). Alle diese Server haben unterschiedliche Datenbestände, teils wichtiger, teils unwichtiger. Zuhause, hinter meinem Router, habe ich eine Firewall laufen hinter welcher ein Ubuntu-Server seine Arbeit verrichtet. Innerhalb dieses Netzwerks liegt auch ein Raid-System welches ich für die Datensicherung nutze:

Datensicherungskonzept per rsync und curlftpfs

Auf diesem Server habe ich nun einen Cronjob eingerichtet welcher zu von mir festgelegten Zeiten läuft. Dieser Cronjob verbindet sich zu den 3 Servern im Internet und mountet ein FTP-Account per curlftpfs in das lokale Dateisystem. Weiterhin ist ein Freigabeordner des NAS-Systems gemountet. Der Cronjob selbst führt nun einen rsync zwischen den beiden Verzeichnissen durch und kopiert somit alle neuen Daten vom Server auf das NAS-System.

Remote-FTP per curlftpfs ins Filesystem mounten

Das von mir verwendete curlftpfs lässt sich am einfachsten über ein Zitat von der Webseite auf ubutnuusers.de beschreiben:

curlftpfs 🇬🇧 ist ein FUSE-Modul, mit dem man entfernte Rechner über FTP in das eigene Dateisystem einbinden kann. Der Vorteil ist, dass man damit die Dateien und Verzeichnisse auf dem entfernten Rechner sehr komfortabel editieren, kopieren oder verschieben kann – genau wie die Dateien und Verzeichnisse auf den lokalen Festplatten. Dies erfordert auf dem Server einen FTP-Dienst. Die meisten Anbieter von Webspace ermöglichen den Zugriff über FTP.

https://wiki.ubuntuusers.de/Archiv/curlftpfs/

Ja ich weiß, curlftpfs wird seit Jahren nicht mehr weiter entwickelt. Allerdings funktioniert es eben einfach wunderbar, warum sollte man es ersetzen?

Das Mounten eines FTP-Verzeichnisses in das lokale Dateisystem ist hierbei denkbar einfach:

mkdir /tmp/mountpoint
curlftpfs ftp://<user>:<passwort>@<host>/<zuSichernderPfad>/ /tmp/mountpoint

Wenn wir hier Username, Passwort, Hostname und den zu sicherenden Pfad mit den Daten des Remoteservers ersetzen wird das Verzeichnis entsprechend ins lokale Dateisystem eingebunden.

Serversicherung per rsync durchführen

Nachdem wir nun das Remote-Verzeichnis ins lokale Dateisystem eingebunden haben können wir dieses Verzeichnis mittels rsync clonen. Rsync prüft hierbei ob eine Remote-Datei neu ist, geändert wurde oder gar gelöscht wurde und übernimmt die Änderungen je nach Parameter.

In meinem Beispiel möchte ich alle Remote-Änderungen übernehmen und somit immer die aktuelle Dateiversion in meiner lokalen Sicherung vorliegen haben. Im folgenden Beispiel werden die Daten aus dem Verzeichnis /tmp/mountpoint in das Verzeichnis /tmp/nasmountpoint übernommen:

rsync -a -u --delete /tmp/mountmoint /tmp/nasmountpoint

Das fertige Script – rsync und curlftpfs in Kombination

Das mit das folgende Script funktioniert müssen einige Parameter angepasst werden. Diese sind jeweils in <> eingeschlossen. Weiterhin ist zu beachten dass im zu sichernden Verzeichnis auf dem Server eine Datei mit dem Namen “online.id” erwartet wird. Das Script prüft am Anfang ob diese Datei vorhanden ist, wenn nicht wird der curlftpfs mount hergestellt.

echo "starte download der remote datesicherung"
if [ ! -f /<lokalerPfadZumMountpoint>/online.id ];
then
    echo "nicht verbunden - stelle verbindung her"
    curlftpfs ftp://<user>:<passwort>@<host>/<zuSichernderPfad>/
fi
if [ -f /<lokalerPfadZumMountpoint>/online.id ];
then
    echo "verbindung existent - spiegle daten"
    rsync -a -u --delete /<lokalerPfadZumMountpoint> /<zielpfadFuerDatensicherung>
    fusermount -u /<lokalerPfadZumMountpoint>
else
    echo "verbindung konnte nicht hergestellt werden - sicherung abgebrochen"
fi

Artikel teilen

This article was written by Thomas Schiffler

Alles was mit IT zu tun hat steht bei mir hoch im Kurs. Hierbei dreht sich vieles um Java, Python oder auch mal PHP. Unser Zuhause ist mit diversen Raspberry PIs ausgestattet mit welchen ich versuche unser Leben durch etwas Automatisierung ein wenig smarter zu gestalten. Hierbei möchte ich die Technik und die dahinter eingesetzten Tools / Frameworks verstehen und nicht einfach nur Anwenden. Ich selbst bezeichne mich als ITler aus Leidenschaft :) Seit 2020 ist das Thema Chatbot / Voicebot / Conversational.ai in meinen Focus gerückt. In diesem Bereich investiere ich gerade viel Zeit.

Schreibe einen Kommentar

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