news, hacks, programme, logs,
tipps und tricks rund um das internet

Artikel / Tipps und Tricks Forum 
Rsync - Wie funktioniert das eigentlich?

Rsync ist ein Protokoll für die Synchronisation von Daten die üblicherweise auf verschiedenen Rechnern sind. Das Protokoll ist auf kleine Bandbreiten ausgelegt, bei welchen möglich wenig Daten übertragen werden um eine Datei zu synchronisieren.

Autor: tom - Date: 04.10.2005 - Size: 4780 chars - Hits / Day: 0.14 - Total Hits: 7067
 Download  rsync.svg   Size: 146 kb Datum: 10.04.2005
Andrew Tridgell hat sich Gedanken gemacht wie er seine Source-Code Files mit einem Server über eine Dial-Up Verbindung (stark begrenzte Bandbreite) synchronisieren kann. In der Zeit, in der Andrew warten musste hatte er Zeit um einen effizienten Algorithmus austüfteln. Daraus entstand das erste Rsync Programm. Die grundlegende Funktionsweise ist so einfach, was sie wiederum so genial macht.

Der einfache Fall
Werden 2 Dateien auf entfernten Rechnern synchronisiert, so gibt es 2 sehr einfache Fälle: Erstens das File gibt es nicht auf dem entfernten Rechner und zweitens das File ist vorhanden und die Checksum über das File ist exakt gleich wie die Checksum über das lokale File. Diese Funktionalität bieten moderne FTP Clients schon länger an. Das Problem ist wenn die Files auf beiden Rechnern vorhanden sind, sich aber in der Zwischenzeit ein wenig geändert haben, zum Beispiel wurde das ID3 Tag in einem mp3 File geändert.

Der nicht so einfache Fall
Sind ähnliche Dateien auf den beiden Servern vorhanden dann wäre es nur nötig die Änderungen zu übertragen. Spontan fällt einem dazu das Kommandozeilen-Tool diff ein, welches aber beide Versionen der Datei für einen Vergleich benötigt. Zudem läuft diff nicht mit binären Daten.

Rsync geht ein wenig anders vor. Es sei die folgende Situation gegeben: Client B will ein File mit Server A synchronisieren. Nun splittet B sein File in gleich grosse Blöcke und errechnet für jeden Block eine Checksum. All diese Checksums übermittelt er A. A überprüft nun alle möglichen Blöcke in seiner Version der Datei. Dabei fängt Server A mit dem ersten Block bei Byte 0 an. Gibt es keinen Treffer wird der nächste Block ab Byte 1 verglichen und Byte 0 wird übertragen. Gibt es wieder keinen Treffer, so wird die nächste Checkum ab Byte 2 errechnet und Byte 1 wird übertragen. Findet nun ein Treffer statt, so wird B angewiesen seine Daten des Block zu übernehmen.

Um eine gleichmässige Verteilung, das heisst, dass auch kleine Änderungen der Daten eine möglichst verschiedene, gleichmässig verteilte Checksum liefert, wird eine „starke“ Checksum verwendet.

2 Checksums
Das Errechnen einer Checksum für jeden möglichen Block ist aufwendig wenn die Checksum MD5 oder etwas ähnliches ist. Für dieses Problem werden 2 Checksums verwendet, eine starke Checksum und eine rolling Checksum. Die rolling Checksum hat die Eigenschaft, dass mit ein paar wenigen Operationen der Offset der Checksum geändert werden kann. Zum Beispiel wenn eine rolling Checksum über die Bytes 0-12 gemacht wird, dann ist mit sehr kleinem Aufwand möglich, die roling Checksum der Bytes 1-13 zu berechnen.rsync_web.png
Figur 1: Rsync


Bei einem Treffer der rolling Checksum wird auf dem Server A die starke Checksum ausgerechnet und mit der starken Checksum des Clients B verglichen. Die Rolling Checksum kann man sich als Filter vorstellen, um den Server nicht mit unnötigem Rechenaufwand ewinzudecken.

Die Figur 1 beschriebt diesen Vorgang visuell. Da mit Checksums überprüft wird ob ein Block gleich ist, ist es natürlich möglich, dass 2 verscheiden Blöcke die gleiche starke Checksum haben. Da das aber erst nach 2^(127) Vergleichen passiert, lässt sich das vernachlässigen.

Fazit
Rsync kann mit kleiner Bandbreite effizient Dateien synchronisieren. Es wird nicht zwischen Text und Binärdateien unterschieden. Rsync wird unter anderem für das Package Management für Gentoo verwendet. Es ist zudem sehr gut geeignet für Backups, bei dem sich Dateien wenig geändert haben. Für verschlüsselte, gezippte oder anders verpackte Dateien ist Rsync weniger gut geeignet.

Quellen
http://rsync.samba.org/
http://rsync.samba.org/how-rsync-works.html
http://samba.org/~tridge/
http://samba.org/~tridge/phd_thesis.pdf (Einige Kapitel befassen sich mit Rsync)

Bemerkungen, Kommentare und Feedback

Du kannst auch selber einen Thread starten, indem du hier klickst.
 Home
Artikel / Tipps und Tricks
Artikel Navigation
Internes
0 Artikel
    Links and Friends
    5 Links
    Artikel erscheinen ungefähr jeden Monat in unregelmässigen Abständen.

    RSS-feed: rss.xml
    Nope bietet keinerlei Garantie für die auf dieser Seite enthaltenen Tipps, Artikel und Programme. Für Schaden, der aus der Anwendung der hier enthaltenen Daten entsteht, übernehmen wir keine Haftung. Die Nope Homepage enthält Links zu anderen Seiten auf deren Inhalte wir keinen Einfluss haben. Wir übernehmen keine Verantwortung für fremde Inhalte und distanzieren uns ausdrücklich davon.© nope.tv. Die Artikel auf dieser Seite, soweit nicht anders im Artikel erwähnt, stehen unter CreativeCommons License. Die Programme auf dieser Seite, soweit nicht anders im Artikel oder Programm erwähnt, stehen unter der GNU Public License (GPL).