Ignoriert rsync Dateizeitstempel und überschreibt automatisch den Client, wenn die Datei auf dem Server anders ist?

8

Ich versuche, zwei PCs einzurichten, um einen Ordnerbaum zu synchronisieren, so dass jeder PC eine Kopie des Baums mit den neuesten Updates für jede Datei hat.

Ich dachte über die Einrichtung von Mercurial nach, aber ich merkte, dass mir Versionierung nicht wirklich wichtig ist (besonders da ich wenig Speicherplatz habe), und dass rsync so klingt, als ob es mehr von dem macht, was ich will - nur um Dateien auf dem neuesten Stand zu halten. keine Versionen.

Die Seite Ссылка sagt jedoch Folgendes:

  

Mit rsync alle Dateien, die bereits vorhanden sind   am Ziel existieren wird nicht sein   übertragen. Dies beschleunigt die   Transferzeit erheblich. Jedoch,   Es gibt immer noch das Problem zu haben   Modifikationen auf beiden Seiten. Durch   Standardmäßig sucht das rsync-Programm nur   um festzustellen, ob die Dateien unterschiedlich sind   Größe und Zeitstempel. Es ist mir egal   welche Datei ist neuer, wenn es ist   anders, es wird überschrieben.

     

Sie können das Flag '--update' an rsync übergeben   wodurch Dateien übersprungen werden   das Ziel, wenn sie neuer sind als   die Datei auf der Quelle, aber nur so   so lange sie gleich sind   Datei. Was das bedeutet ist, dass wenn, für   Zum Beispiel ist die Quelldatei eine reguläre   Datei und das Ziel ist ein Symlink,   Die Zieldatei wird sein   überschrieben, unabhängig vom Zeitstempel.   Selbst wenn man an seinen Eigenheiten vorbei schaut, die   --update flag löst das Problem nicht, weil es nur überspringt   Dateien auf dem Ziel, wenn sie sind   neuer, zieht es diese Änderungen nicht an   runter zum Quellcomputer.

Stimmt das?

Wenn dem so ist, dann ist Rsync wirklich nur nützlich für das Sichern eines Master ("Quell") - Rechners auf einen oder mehrere Slaves, die die Änderungen vom Master unabhängig von Zeitstempeln erhalten. Während das Problem, das ich wirklich zu lösen versuche, ist zwei Maschinen sein "peers" und gleichermaßen nur die neuesten Dateien von der anderen zu bekommen.

Oder denkst du, ich muss nur in den sauren Apfel beißen und trotz des zusätzlichen Speicherplatzes für die Tracking-Versionen git oder Mercurial verwenden?

(Ja, ich weiß über Dropbox Bescheid; ich bin weit über dem 2-GB-Konto-Limit und nicht wirklich daran interessiert, 120 bis 240 $ pro Jahr auszugeben, wenn ich den Cloud-Speicher nicht brauche und etwas, was dieses einfache hat wurden bereits mit kostenlosen & amp; open-Tools gemacht.)

Die PCs führen beide XP aus, aber ich würde Cygwins rsync und alle anderen Unixy-Tools verwenden, um die Aufgabe zu erledigen.

    
Chirael 04.09.2010, 06:40
quelle

4 Antworten

3

Nach dem Testen glaube ich, dass die Antwort darauf ja lautet.

Warum ich das nicht zuerst getestet habe, bevor ich gefragt habe, ich habe die Funktionsweise von rsync missverstanden und dachte, dass Sie immer einen rsync-Daemon auf dem Server einrichten müssen.

Wenn Sie jedoch ssh als Übertragungsmechanismus verwenden, muss kein rsync-Daemon auf dem Server ausgeführt werden, sondern nur ein ssh-Daemon, der viel häufiger verwendet wird.

Bei meinen Tests wurde eine neuere, geänderte Datei auf meinem lokalen Rechner von der älteren Datei auf dem Server überschrieben (obwohl ich die Option --update verwendet hatte).

Meine Schlussfolgerung ist, dass rsync besser für Master-Slave-Kopieren / Aktualisieren geeignet ist als für echte bidirektionale Peer-basierte Synchronisation.

Ich werde in Mercurial oder möglicherweise Microsoft SyncToy suchen müssen (da beide Maschinen XP ausführen); Ich werde wahrscheinlich mit letzterem gehen, da es ein einfaches Heimnetzwerk ist.

    
Chirael 04.09.2010, 23:57
quelle
6

Wenn Sie Probleme mit rsync und Zeitstempeln haben, müssen Sie vielleicht die Genauigkeit prüfen, mit der Zeitstempel in Ihren verschiedenen Dateisystemen gespeichert werden, die an der Synchronisation beteiligt sind.

Verwenden Sie fstat , um dies zu erkennen: Wenn Sie eine Datei synchronisieren und das Original einen Zeitstempel vom 2012-01-10 23: 41: 04.348724000 und den Zeitstempel der synchronisierten Datei 2012-01-10 23: 41: 04.000000000 hat, dann ist dies der Fall ist ein Zeichen für einen Unterschied in der Präzision.

Die rsync-Option --modify-window=1 kann diesen Unterschied in der Genauigkeit berücksichtigen, indem sie einen kleinen Unterschied berücksichtigt.

    
Martijn de Milliano 20.08.2012 21:18
quelle
6
%Vor%

so werden nur Dateien, die NEUER sind, von loc1 zu loc2 synchronisiert. Logic schreibt vor, dass alle Dateien, die an loc2 NEUER sind, nicht verändert werden. Daher sind alle veralteten Dateien auf loc2 dank loc1

auf dem neuesten Stand %Vor%

Nun wissen wir, dass alle Dateien, die loc1 hatte, die neuer waren, nach loc2 kopiert wurden. Alle Dateien, die auf loc1 älter waren (die neueren auf loc2 hatten), blieben unverändert. Der zweite rsync-Befehl aktualisiert nun loc1 mit neueren Dateien auf loc2

Et Voila! Beide Standorte sind in diesem Beispiel synchronisiert.

    
nyk 18.12.2012 00:27
quelle
2

Haben Sie versucht, rsync --update zweimal auszuführen. Ich könnte falsch liegen, aber ich denke Folgendes Paar von Befehlen würde eine bidirektionale Synchronisation erreichen.

rsync -avz --stats --update geezer / merlin

rsync -avz --stats --update merlin / geezer

hier ist es nur 2 Verzeichnisse Geezer und Merlin zu synchronisieren, aber ich denke, es sollte sich genauso verhalten Wenn die Quelle und das Verzeichnis vollständige Pfade einschließlich Computernamen waren.

    
steveh 27.04.2011 08:37
quelle

Tags und Links