2010-09-22 7 views
13

Ich versuche herauszufinden, wie wenn rsyncing Dateien atomar ist. Ich konnte keine Bestätigung dafür finden. Da rsync nur Deltas senden kann, hatte ich den Eindruck, dass auch nur Teile der Live-Dateien aktualisiert werden.Sind Rsync-Operationen atomar auf Dateiebene?

Auf der anderen Seite DJB empfiehlt rsync zum Synchronisieren von Live .cdb Dateien und ich habe diesen Beitrag gefunden (http://lists.samba.org/archive/rsync/2002-April/002210.html), die beide bedeuten würde, dass die neue Datei erstellt wird, dann an den richtigen Speicherort verschoben.

Kann mich jemand auf eine offizielle Quelle hinweisen, die den einen oder anderen bestätigt?

Antwort

11

Rsync erstellt eine neue temporäre Datei, die Blöcke aus der lokalen (empfangenden) Kopie und alle erforderlichen Blöcke aus der sendenden Kopie enthält. Wenn Sie fertig sind, wird die temporäre Datei anstelle des Originals an die richtige Stelle verschoben.

Alle Details sind hier;

http://rsync.samba.org/how-rsync-works.html

+0

Sie haben die eigentliche Frage nicht beantwortet. - Würde das bedeuten, dass die Aktualisierung jeder einzelnen Datei atomar ist? – zrajm

+0

Ja, wenn Sie eine Dateibewegung innerhalb desselben Verzeichnisses als atomar betrachten. –

+1

"Überlegen"? Atomar gegen Atomkraft sollte eine Tatsache sein, keine Meinung, denke ich? :) Soll das heißen, dass es Fälle gibt, in denen das Umbenennen einer Datei in einem Verzeichnis (auf einer lokalen Festplatte) * nicht * atomar ist? Wenn ja, wann würde das passieren? – zrajm

1

Nr, rsync schreibt nicht atomar-Dateien.

Während der Übertragung wird eine versteckte temporäre Datei im selben Zielverzeichnis erstellt (.[original-filename].[6-random-characters]), die die übertragene Datei in ihrem aktuellen Zustand enthält.

Sollten Sie Verbindung während der Übertragung oder rsync Begegnungen ein anderes Problem passieren verlieren, so dass die Verbindung geschlossen werden, vor dem Erlegen den rsync Prozesses sicherstellen, dass die temporäre Datei kopieren, um alle zu halten, bereits übertragene Pakete . Sie können die temporäre Datei einfach umbenennen (entfernen Sie das führende "." Und das nachfolgende ".xxxxxx", um den ursprünglichen Dateinamen zu erhalten).