Rsync, das handhabt, bewegt sich vernünftig


10

Ich habe rsync erfolgreich verwendet , um meine Home-Verzeichnisse zwischen meinem Laptop und meinem Netbook zu synchronisieren (beide mit ext4 unter Linux). Mein einziges Problem dabei ist, dass ich hin und wieder bestimmte Verzeichnisse komplett neu organisieren möchte, und rsync sieht dies als Löschen und Erstellen neuer Dateien an, was es sehr langsam und ineffizient macht.

Kennt jemand eine gute Software, die sich gut mit Dateiverschiebungen befasst?

Ich habe festgestellt, dass unison dazu in der Lage sein sollte, aber es scheint in der Praxis nicht zu funktionieren. Ich habe unisono getestet, indem ich zwei lokale Verzeichnisse mit jeweils einer großen Datei synchronisiert habe. Dabei wurde meine Verschiebung immer noch als Löschung + Erstellung erkannt und war sogar noch langsamer als rsync .

Außerdem, wenn ich richtig von meiner Suche erinnern unisono vor ‚s Quellcode vor ein paar Monaten, es versucht , so etwas wie tun sha zu tun Summen und ich will nicht meine ideale Lösung sha Summen-zu tun , auf großen zu langsam Dateien / Verzeichnisse. Ich möchte etwas, das Dinge bemerkt wie:

"Das letzte Quellgegenstück dieser Datei scheint gelöscht worden zu sein, und an anderer Stelle im Quellverzeichnisbaum befindet sich eine neue Datei mit demselben Datum, derselben Größe und derselben Inode-Nummer. Ich gehe also nur davon aus, dass dies ein Umzug war und Verschieben Sie das Zielgegenstück entsprechend, anstatt Löschen + Kopieren durchzuführen. "

Es ist mir wichtig, dass ich diese Maschinen schnell synchronisieren kann.

Irgendwelche Vorschläge?

Antworten:


6

Sie sollten sich rdiff-backup ansehen , das rsyncdarunter ausgeführt wird, aber mit der zusätzlichen Intelligenz, die Sie benötigen (und inkrementelle Sicherungen können zurückgesetzt werden, aber Sie können konfigurieren, dass diese deaktiviert werden).

Die neueste Version ist alt (2009), aber das ist ein Zeichen für Stabilität.


2
Hat das jemand versucht?
Nebel

3

Unison macht, was Sie wollen, aber nur für die Remote-Synchronisation. Versuchen Sie es ssh://localhost/path/to/dirals eine der Wurzeln.

Unison stützt seine Entscheidungen auf den Inhalt der Datei und verfolgt nicht die Inode-Nummern.


1

Sie können verschobene und umbenannte Dateien mit rsync verarbeiten, wenn die Dateisysteme im Quell- und Zielverzeichnis feste Links unterstützen. Die Idee ist, rsync vor der eigentlichen Übertragung harte Verbindungen rekonstruieren zu lassen. Eine gute Erklärung finden Sie hier

Am Ende hatten wir eine einfache Lösung, die einen versteckten Baum fester Links im Quell- / Zielverzeichnis erstellt. Das grundlegende Skript könnte folgendermaßen aussehen:

# Name of hidden directory
Shadow=".rsync_shadow"

# do real sync
rsync -ahHv --stats --no-inc-recursive --delete --delete-after "$Source"/ "$Target"

# update/create hidden dir of hard links in source
rsync -a --delete --link-dest="$Source" --exclude="/$Shadow" "$Source"/ "$Source/$Shadow"

# update/create hidden dir of hard links in target
rsync -a --delete --link-dest="$Target" --exclude="/$Shadow" "$Target"/ "$Target/$Shadow"

Ich habe ein Beispielskript auf GitHub . Ich rate Ihnen jedoch, eine große Anzahl von Tests durchzuführen, bevor Sie diese Methode in der Produktion anwenden.


0

Wenn Sie Dateien zwischen mehreren Computern synchronisieren möchten, können Sie einfach ein zentrales Versionskontrollsystem wie Subversion (oder FSVS, das SVN als Backend verwendet) verwenden. Das Schöne daran ist, dass alles in Ihrem / Ihrem Zuhause (das Sie zur Versionskontrolle hinzufügen) dann versioniert wird und einfach mit anderen Computern synchronisiert oder zurückgesetzt werden kann.


0

lsyncd verarbeitet auch verschobene Dateien mit dem Verhalten rsync + ssh, obwohl dies etwas fehlerhaft ist (ich bekomme ungefähr 15% Verschiebungen, die als Löschen / Kopieren behandelt werden, aber um herauszufinden, warum). Meistens funktioniert es.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.