r2sync - bidirektionale Dateisynchronisation

Ändere Deine Dateien wo immer DU willst.

Was ?

Was ist r2sync ?

r2sync ist bi-direktionale Datei-Synchronisation

  • Ablage der Dateien im normalen Dateisystem
  • Dateien werden zwischen zwei Systemen abgeglichen
  • Dateien können auf beiden Seiten verändert werden
  • Konflikte werden erkannt und mit wenig Aufwand gelöst
  • Übertragung schnell und sicher
    • mit rsync und ssh
  • minimale Meta-Daten
    • nur kleine Datenbank mit Zeitstempeln der Datein
    • kann (fast) verlustfrei gelöscht werden
  • geringe Systemanforderungen
    • OS: Linux, Unix, OS X
      • Windows? sollte auch gehen, noch ungetestet
    • Perl mit wenigen Modulen (z.B. bei OS X Standardinstallation)
    • SSH (sowieso Standard)
    • rsync (gehört auch auf jedes System)

Wann ?

Wann kann r2sync nützlich sein?

Stell Dir vor, Du hast zwei Systeme an denen Du arbeitest, z.B. ein Arbeitsplatz Computer und einen Laptop. Du möchstest mal hier und mal dort arbeiten. Mit denselben Dateien - ohne vorher oder nachher entscheiden zu müssen, welche Dateien aktuell sind. Du möchtest offline arbeiten, z.B. mit dem Laptop im Zug.

Vorhandene Lösungen bieten (Siehe auch FAQ):

  • Du mußt immer online arbeiten, z.B. mit Netzwerk-Dateisystemen (NFS, Samba)
  • Du kannst nur in eine Richtung abgleichen, z.B. Backup-Tools, rsync etc
  • Du mußt komplizierte Dateisysteme installieren, z.B. Coda etc.
  • Du kannst die Dateien nicht mehr im Dateisystem ablegen, z.B. Subversion
  • Du bist auf Spezial-Anbieter angewiesen, z.B. iDisk

Mit r2sync hast Du die Möglichkeit, Dateien zwischen zwei Ordnern auf 2 (oder auch einem) System abzugleichen und r2sync stellt für Dich fest, wenn Du eine Datei (versehentlich) auf beiden System verändert hast, damit Dir keine Änderung verloren geht.

r2sync kann nicht nur zwischen Arbeitsplatz Computer und Laptop nützlich sein, sondern z.B. auch:

  • Arbeitscomputer und USB-Stick
  • Homeverzeichnis auf verschiedenen Systemen (Servern)
  • Cold-Standby-Systemen: System A wird auf System B gesichert, fällt System A aus, wird auf System B weitergearbeitet, ist System A wieder verfügbar, werden die Änderungen von B zurück auf A synchronisiert.
  • gemeinsame Konfigurationsdateien z.B. für Server: man kann sie ändern wo man will

Wie ?

Wie ist das Konzept?

Eine ausführliche Beschreibung der Funktionsweise findest Du hier.

In Kurzform funktioniert r2sync so, im Beispiel synchronisieren wir unseren lokalen Rechner L mit dem entfernten Server R:

  • wir benutzen rsync, das ist eines der besten Programme überhaupt und speziell für Dateisynchronisation - leider nur unidirektional
  • r2sync befragt rsync, was es von L nach R kopieren würde
  • r2sync befragt rsync, was es von R nach L kopieren würde
  • eine Dateien, die (von rsync) nur in eine Richtung kopiert würde, ist unstrittig (kein Konflikt) und wird kopiert.
    • Ausnahme: die Datei könnte gelöscht worden sein, s.u.
  • eine Datei, die (von rsync) in beider Richtungen kopiert würde, könnte:
    • nur auf L geändert worden sein (kein Konflikt)
    • nur auf R geändert worden sein (kein Konflikt)
    • auf L und R geändert worden sein (Konflikt !)
  • Zur Entscheidung wird nach jedem Sync eine kleine Datenbank angelegt (natürlich auf beiden Seiten), in der die Zeitstempel der letzen Änderung abgelegt ist, durch Vergleich hiermit kann festgestellt werden, ob die Datei nur auf einer Seite oder auf beiden Seiten geändert wurde. Sollte diese Datenbank nicht (mehr) zur Verfügung stehen, wird die Datei nicht kopiert, damit nichts verloren gehen kann, der Konflikt muss manuell gelöst werden.

Konflikte:

Konfliktdateien werden verdoppelt und auf beide Systeme kopiert, wobei die neuere Datei umbenannt wird und den Zusatz „-1“ vor der Dateiendung bekommt. Solle die „-1“ schon exitieren wird die „-2“ genommen u.s.w.

Beispiel: Die Datei „test.txt“ wird auf L geändert um 8:00 und auf R um 9:00. Dann gibt es nach r2sync folgende Dateien auf L und R:

  • datei.txt - Version von L
  • datei-1.txt - Version von R

Wie löst man den Konflikt?

Auf einem der Systeme L oder R die löschen/umbenennen:

  • Soll die L Version „datei.txt“ gültig sein, die Datei „datei-1.txt“ löschen
  • Soll die R Version „datei-1.txt“ gültig sein, die Datei „datei.txt“ löschen und „datei-1.txt“ umbenennen in „datei.txt“.

Danach erneut „r2sync“ starten, um die jeweils andere Seite zu synchronisieren.

Was passiert wenn ich mich nicht drum kümmere?

Nichts.

Es wird weiterhin „datei.txt“ und „datei-1.txt“ (und datei-2.txt …) geben, die auch geändert und synchronisiert werden können.

Warum wird die neuere Datei umbenannt?

Es könnte genausogut umgekehrt Sinn machen, daß die letzte Änderung überall aktiv ist. Aber in jedem Fall sollte bei einem Konflikt von einem Menschen entschieden werden, welche Version gültig ist.

Der Grund warum die ältere Version (die erste Änderung) auf beiden Seiten gültig wird ist, weil somit die Konfliktlösung einfacher wird, nämlich durch einfaches umbenennen der Dateien (s.o.).

keine automatische Konfliktlösung

Selbstverständlich gibt es auch eine Möglickeit Konfliktdateien nicht zu kopieren: Schalter „–leaveconflicts“.

Gelöschte Dateien:

Gelöschte Dateien werden dadurch erkannt, dass sie in der Datenbank mit Zeitstempel gespeichert sind, aber nur auf einem System (L oder R) vorhanden sind und den gleichen Zeitstempel haben.

In diesem Fall wird die Datei auch auf dem anderen System (R oder L) gelöscht.

Wie ist der Name r2sync entstanden?

Wesentliche Aufgaben von r2sync werden durch doppelten Aufruf von rsync erledigt. So wird wird aus der uni-direktionalen Synchronisation eine bi-direktionale.

Wie installiert man r2sync?

  • entpacke die tgz-Datei, z.B.:
tar xvzf rsync-8.1.1-beta.tgz
  • kopiere die Datei „r2sync“ an eine geeignete Stelle im Pfad, z.B:
cp -av r2sync-8.1.1-beta/r2sync /usr/local/bin/r2sync
  • Stelle sicher, daß Datei ausführbar ist:
chmod +x /usr/local/bin/r2sync
  • teste, ob Programm startet und alle Abhängigkeiten erfüllt sind:
r2sync -h

Wie ruft man r2sync auf?

Siehe auch Referenz.

Beispiel: wir wollen den lokalen Ordner „/home/kfr/test“ mit dem Ordner „/home/server/test“ auf dem System „server“ synchronisieren, der Benutzer auf „server“ ist „kfr“.

  • Stelle sicher, dass der SSH-Zugang funktioniert (möchlist ohne Passwort-Abfrage !):
ssh server ls -la /home/server/test
  • lege eine Konfigdatei „/home/kfr/test/r2sync.r2s“:
$BasedirL = "/home/kfr/test/";
$BasedirR = "/home/server/test/";
$SSHHOST = 'kfr@server';
  • Starte r2sync als Test (ohne Veränderung):
cd /home/kfr/test
r2sync -n
# oder mit debugging:
r2sync -d -n
  • Starte r2sync mit synchronisieren:
r2sync
  • Die Ausgabe von r2sync könnte z.B. so aussehen:
v Datei-Konflikt-1.txt v                  ^                  =                 
^ Datei-Konflikt.txt   v20.01.08-21:54:37 ^20.01.08-21:54:46 =20.01.08-21:54:23
v Datei-Server.txt     v20.01.08-21:53:43 ^                  =20.01.08-21:53:43
^ Datei-lokal.txt      v20.01.08-21:54:56 ^20.01.08-21:53:40 =20.01.08-21:53:40

Uploads:               2
Downloads:             2
Files:                 4(+1)

^ Datei-Konflikt.txt   ########## 1/5
^ Datei-lokal.txt      ########## 2/5
v Datei-Konflikt-1.txt ########## 3/5
v Datei-Server.txt     ########## 4/5
= r2sync.db            ########## 5/5

Erklärung:

  • Die Datei „Datei-Server.txt“ wurde auf dem Server geändert und wird heruntergeladen
  • Die Datei „Datei-lokal.txt“ wurde lokal geändert und wird hochgeladen
  • Die Datei „Datei-Konflikt.txt“ wurde auf beiden Systemen seit dem letzen Sync geändert und wird verdoppelt (als „Datei-Konflikt-1.txt“) hoch- und runtergeladen.
  • Als letztes wird immer (falls es was synchronisieren gab) die Datenbank „r2sync.db“ hochgeladen.

Syntax

Siehe auch Referenz.

bash-3.2$ r2sync -h

r2sync - bi-directional remote file-syncronisation

usage: r2sync [option]

-h, --help             : print this help text
-v, --version          : print version (and exit)
-c, --config f         : config-file 'f'
-d, --debug            : show debug messages
-n, --dry-run          : dry-run, show what would have been transferred
-s, --showdb           : show database (and exit)
    --cleardb          : clear database
-l, --leaveconflicts   : leave conflicts
-x, --notexecute       : not executing commands except for status

Check http://www.r2sync.de

Wie automatisiert man es?

Wie ist der Status?

Beta!

Siehe auch To do/Bugs

Wer ?

Wer ist der r2sync-Autor?

Klaus Franken (Klaus.Franken äth StrukturPunkt.de)

Wer hat r2sync inspiriert?

rsync !

Wo ?

Wo ist die Homepage?