Einfach Verzeichnisse synchronisieren | iX

Originalartikel

Backup

<html> <p class=„initial“ id=„p_1“>Daten auf mehreren Rechnern synchron halten, Konfigurationsdateien &#252;ber mehrere Server abgleichen, VM- oder Container-Images aktualisieren &#8211; nur eine kurze Reihe von Einsatzszenarien f&#252;r Dateisynchronisierung. Geht es um schnelle, latenzfreie Verf&#252;gbarkeit der Daten auf einem Rechner, kann ein verteiltes Dateisystem diese Aufgabe erf&#252;llen &#8211; das l&#228;sst sich jedoch nicht ohne Weiteres aufsetzen und gerade f&#252;r kleine Umgebungen ist der Aufwand daf&#252;r eventuell nicht zu rechtfertigen. Alternativ bieten sich zentrale Dienste wie NFS an, die jedoch in der Regel nur lokal gut genug funktionieren. Modern w&#228;re der Einsatz eines Cloud-Dienstes, da stellen sich allerdings Fragen bez&#252;glich Zuverl&#228;ssigkeit, Verf&#252;gbarkeit und Datenschutz beziehungsweise -sicherheit. Einfache Linux-Kommandozeilentools sind schnell eingerichtet und somit eine Alternative zu diesen Schwergewichten. Sie besitzen allerdings alle einen individuellen Schwerpunkt.</p> <p class=„normal“ id=„p_2“>F&#252;r mehr oder weniger intelligentes Kopieren &#8211; insbesondere &#252;bers Netzwerk &#8211; ist rsync bekannt.</p> <pre id=„p_3“> rsync -avzhu –progress /source /destination </pre> <p class=„oe“ id=„p_4“>aktualisiert <em>/destination</em> mit dem Inhalt aus <em>/source</em>, beh&#228;lt Nutzerinformation bei, komprimiert den Datenstrom und gibt den Kopierfortschritt an. Die Option <em>–delete</em> w&#252;rde Dateien in <em>/destination</em> ohne Entsprechung im Quellpfad l&#246;schen. Die Rollen von <em>source</em> und <em>destination</em> sind allerdings fixiert und diese Hierarchie schr&#228;nkt rsync in seiner Funktion als Synchronisationswerkzeug ein.</p> <p class=„normal“ id=„p_5“>Eine Erweiterung stellt unison dar, das ein Kommandozeilen- oder GTK+-UI zu rsync bietet und dessen F&#228;higkeiten um bidirektionale Synchronisation erweitert. Nutzer m&#252;ssen bei Konflikten entscheiden, welcher Version der Vorzug zu geben ist. Ansonsten bringt das Programm beide Pfade zuerst auf den Maximalstand und pr&#252;ft sp&#228;ter auf Ver&#228;nderungen. Es verf&#252;gt zudem &#252;ber einen Batchmodus, in dem es Konflikte nach &#196;nderungsdatum l&#246;st, sodass es im Hintergrund Pfade synchron halten kann. Um mehrere Rechner auf dem gleichen Stand zu halten, empfiehlt sich eine Sternkonfiguration mit einem dedizierten zentralen Knoten, von dem alle anderen Teilnehmer ihre Daten beziehen.</p> <h3 class=„z“ id=„p_6“>Von der Kommandozeile in die Cloud</h3> <p class=„oe“ id=„p_7“>In der Cloud kommt auch Technik zum Einsatz, die sich auf der Kommandozeile nutzen l&#228;sst. Nextcloud und ownCloud haben in ihren Clients ein solches Tool verbaut: csync. Trotz Versionsnummer 0.5 ist es stabil und verrichtet seine Aufgabe, bidirektionales Synchronisieren zweier Verzeichnisse, zuverl&#228;ssig. Beim ersten Aufruf <em>csync /path/1 /path/2</em> bringt csync beide Verzeichnisse auf den gleichen Stand und legt unter beiden Pfaden SQLite-Datenbanken an, in denen Informationen &#252;ber die enthaltenen Dateien liegen. Bei Konflikten w&#228;hlt csync stets die Datei j&#252;ngeren Datums.</p> <p class=„normal“ id=„p_8“>Unidirektional, aber automatisch funktioniert lsyncd. Es l&#228;uft als Hintergrundprozess und wartet auf Aktivierung per <em>inotify</em> oder <em>fsevent</em>. Alle paar Sekunden reagiert lsyncd, indem es standardm&#228;&#223;ig die ver&#228;nderten Dateien an einen zweiten Ort spiegelt, den der Anwender beim Starten angegeben hat. &#220;blicherweise verwendet das Tool rsync zum &#220;bertragen der Daten. Alternativ l&#228;sst sich jedoch die Konfiguration verfeinern, sodass lsyncd nicht immer einfach Dateien repliziert. Es lassen sich im Prinzip beliebige Befehle mit den Dateisystemereignissen kombinieren. Denkbar sind somit etwa Skripte zur automatisierten Erzeugung von Thumbnail-Galerien f&#252;r Bilderordner.</p> <p class=„normal“ id=„p_9“>Mit Augenmerk auf den Abgleich von Betriebssystemabbildern verrichtet casync seinen Dienst. Der Entwickler Lennart Poettering sieht es als Symbiose aus rsync und git &#8211; damit f&#228;llt es auch in die Klasse der unidirektionalen Werkzeuge. Durch ein geschicktes Chunking minimiert es allerdings den Traffic effizienter als vergleichbare Werkzeuge. casync untersucht den Quellpfad und teilt ihn auf in sogenannte Chunks variabler, aber &#228;hnlicher Gr&#246;&#223;e. Die Aufteilung orientiert sich grob am Dateibaum, kann aber kleinere Dateien in einer Einheit zusammenfassen und gro&#223;e Dateien aufteilen. In einem zentralen Index liegen die Hashes der Bl&#246;cke, die bei der Synchronisation mit den Pr&#252;fsummen im Zielmedium verglichen werden.</p> <p class=„normal“ id=„p_10“>Auf Ebene der Chunks zu arbeiten ist auch CDN-freundlich, denn Content Delivery Networks funktionieren weder mit vielen kleinen noch mit einzelnen gro&#223;en Dateien besonders effizient. Beinhaltet der Quellpfad zum Beispiel ein Dateisystemabbild, in dem ein Entwickler nur eine Bibliothek ausgetauscht hat, synchronisiert casync lediglich den relevanten Teil, w&#228;hrend Alternativen wie OSTree oder verteilte Dateisysteme entweder auf der Ebene einzelner Dateien oder dem Image im Ganzen arbeiten.</p> <p class=„normal“ id=„p_11“>Zus&#228;tzlich l&#228;sst sich auf der Kommandozeile ein <em>seed</em>-Pfad angeben, dessen Inhalt casync als lokale Quelle f&#252;r den Pfad verwendet. M&#246;chte man etwa ein Linux-Image beziehen, kann man eine lokale Partition oder ein vorhandenes Image w&#228;hlen. Damit sollte der Download des Basissystems &#252;berfl&#252;ssig werden und lediglich applikationsspezifische Dateien werden heruntergeladen. (<a href=„mailto:jab@ix.de“>jab@ix.de</a>)</p> </html>