Rsync und das Ausführen von Scripts durch rsyncd

Ich hatte vor einiger Zeit das Problem, dass ich für einzige Rechner ein regelmäßiges Backup einrichten musste. Das ist eigentlich keine große Magie, war aber in diesem Fall mit einigen Herausforderungen verbunden.

Die zu sichernden Rechner haben nicht alle das gleiche Betriebssytem sondern um eine Mischung aus Maschinen mit einem unixoiden und Windows-Systemen. Um einen gleichwertigen „Stand“ zu erreichen habe ich den Windows-Kisten Cygwin verpasst und konnte somit auf einige Tools aus der Linux-Welt zurück greifen.

Die nächste Schwierigkeit war, dass die Backups nicht von dem zu sichernden Rechnern angestoßen werden sollten. Vielmehr sollte ein weiterer Rechner, auf dem gesichert wird, nacheinander die anderen Maschinen „abgrasen“ und das Backup von dort abholen. So lassen sich die Sicherungen nacheinander abrufen und notfalls ein bisschen Timing in den Ablauf bringen. Die Maschine die das Backup aufnimmt muss so auch nicht mit den unkontrollierten Datenströmen aus mehreren Quellen klar kommen. Vor allem im Bezug auf die Bandbreite des Netzwerkes nicht ganz unerheblich.

Ein Tool was sich dafür sehr gut eignet ist Rsync. Auf unixoiden Systemen verbreitete gibt es auch eine Variante für Windows. In den Quellen für Cygwin ist es ebenfalls enthalten und verhält sich in der Umgebung auch genauso wie unter *nix.
Ein Feature das man manchmal vergisst ist, dass Rsync auch auf dem Zielrechner aufgerufen werden kann. Auf dem Quellrechner muss dann ein entsprechender Daemon laufen der auf die Anfrage wartet und das Backup vornimmt. Das passte genau in meinen Plan. Zudem ist es ziemlich simpel mit Rsync inkrementelle Backups zu erstellen und dabei sogar alte Versionen von geänderten Dateien einfach aufzuheben.

Da nun ein zentralter Backup-Server die Backups per Rsync von den anderen Maschinen holt wissen diese natürlich nicht wann sie angesprochen werden. Unter den zu sichernden Rechnern gibt es aber auch einige auf denen einen Datenbank läuft die ich gerne in einen konsistenten Zustand versetzen möchte bevor ich sie sichere. Zwar bieten heute auch alle relevanten Datenbanken die Möglichkeit zu einem Online-Backup, in diesem Fall kann ich es mir aber erlauben für die Dauer der Sicherung die Datenbank herunter zu fahren und nach Abschluß wieder zu starten. Zum Zeitpunkt der Sicherung wird sie nicht benötigt.
Hier fand ich zwei wunderbare Optionen für Module in der rsyncd.conf, die den Rsync-Daemon konfiguruert: „pre-xfer exec“ und „post-xfer exec“ nehmen als Wert gerne den Pfad zu einem Script entgegen das vor (pre) oder nach (post) der Sicherung ausgeführt wird. Das ist verdammt praktisch, da so der Zeitpunkt der Sicherung komplett vom Backup-Server ausgeführt wird, man auf Seite des Resync-Clients aber die Möglichkeit hat entsprechende Vor- und Nacharbeiten durchzuführen.

Fazit: Rsync ftw!

— der Würschtlmann

4 Gedanken zu “Rsync und das Ausführen von Scripts durch rsyncd

      • Das dachte ich eben auch gerade, hetero Umgebungen, kritische Datenbanken, mehrere Rechner…
        Jetzt weiß ich wenigstens warum du dir n Haus gekauft hast Würschtlmann.

        Aber rsync ist doch glaub eh die Basistechnologie bei fast allen Backup Tools oder? bzw. dd + rsync?!

        Super Artikel, mal schauen ob ich da mal ein Anwendungsfall finde.

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s