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.
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.
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.
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.
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.
Tags und Links synchronization rsync