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. 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 | |
|
|