rsync - Erstellt es während der Übertragung eine temporäre Datei?

36

Soweit ich sehe, erstellt rsync die Datei erst dann im Zielverzeichnis, wenn sie vollständig ist.

Dies muss bedeuten, dass die Datei irgendwo in einem temporären Verzeichnis erstellt und anschließend in das Zielverzeichnis kopiert wird.

Ist das richtig?

Wenn dies zutrifft, kann rsync dann festlegen, dass kein temporäres Verzeichnis verwendet wird, und stattdessen die Datei im Zielverzeichnis erstellen und nur so lange darauf schreiben, bis sie vollständig ist?

Gepard
quelle

Antworten:

45

Ja, es wird eine temporäre Datei erstellt.

Entsprechend der Manpage können Sie mit dem Parameter -T das Verzeichnis angeben, in dem die temporäre Datei gespeichert ist

-T, --temp-dir = DIR Erstellt temporäre Dateien im Verzeichnis DIR

Dort finden Sie auch die Antwort auf den zweiten Teil Ihrer Frage:

--an Ort und Stelle

Diese Option ändert, wie rsync eine Datei überträgt, wenn die Daten der Datei aktualisiert werden müssen: Anstatt der Standardmethode zum Erstellen einer neuen Kopie der Datei und zum Verschieben der Datei, wenn diese abgeschlossen ist, schreibt rsync die aktualisierten Daten direkt in das Ziel Datei.

superuser0
quelle
4
Wichtige Notiz! In der Frage wird davon ausgegangen, dass rsync "die Datei kopiert", während in der rsync-Dokumentation angegeben ist, dass rsync sie tatsächlich "verschiebt", was eine WICHTIGE UNTERSCHIEDLICHKEIT darstellt . Dadurch wird sichergestellt, dass die Datei atomar am Zielspeicherort angezeigt wird . Dies ist nützlich, um Rennbedingungen zu verhindern, bei denen eine andere Anwendung auf das Erscheinen der Zieldatei wartet und diese sofort zum Lesen öffnet, die Datei jedoch nicht kopiert wird.
Ogre Psalm33
15

Es wird eine temporäre Datei erstellt, die standardmäßig im Zielverzeichnis gespeichert und benannt ist .<FILE_NAME>.<RANDOM_STRING>. Wenn Sie also kopieren foo.txt, wird eine tmp-Datei mit dem Namen erstellt .foo.txt.GV4H3(dies GV4H3ist die zufällige Zeichenfolge, die sich bei jeder Ausführung ändert). Sie können dieses Verhalten mithilfe der folgenden rsyncOptionen steuern :

   --partial
          By default, rsync will delete any partially transferred
          file if the transfer is interrupted.  In  some  circum‐
          stances  it  is more desirable to keep partially trans‐
          ferred files. Using the --partial option tells rsync to
          keep  the  partial  file which should make a subsequent
          transfer of the rest of the file much faster.

   --partial-dir=DIR
          A better way to keep partial files than  the  --partial
          option  is  to  specify a DIR that will be used to hold
          the partial data (instead of writing it out to the des‐
          tination file).  On the next transfer, rsync will use a
          file found in this dir as data to speed up the  resump‐
          tion  of  the  transfer and then delete it after it has
          served its purpose.

Bitte lesen Sie die relevanten Teile der rsyncManpage (das Folgende ist nur ein kleiner Auszug aus dem großen Abschnitt über die Verwendung --partial-dir).

terdon
quelle
5

rsync erstellt temporäre Dateien im Zielverzeichnis. Diese Datei heißt wie die Quelle, hat aber eine Erweiterung. Es könnte so sein:

source: foo.bar 
target temp: foo.bar.hzmkjt7 (hzmkjt7 is just an example) 

Die Erweiterung wird entfernt, nachdem überprüft wurde, dass die Datei eine exakte Kopie der Quelle ist. Während des Besitzes des Umbenennungsprozesses werden Berechtigungen und Änderungszeit festgelegt. Es ist also möglich, dass Sie die Datei aufgrund der Berechtigungen nicht sehen. Stellen Sie sicher, dass Sie über die erforderlichen Berechtigungen verfügen, um alle Dateien anzuzeigen, die Ihnen nicht gehören, damit Sie die temporären Dateien anzeigen können.

Simon
quelle
Ein Prozess erstellt Dateien mit den Berechtigungen des Benutzers, der ihn ausführt . In diesem Fall können die Dateien aufgrund von Berechtigungen nicht angezeigt werden.
Ярослав Рахматуллин
@ ЯрославРахматуллин rsync kann auch im Daemon-Modus ausgeführt werden. Oder es kann als Cronjob geplant werden. In beiden Fällen ist es möglich, dass der Benutzer, unter dem rsync ausgeführt wird, nicht der Benutzer ist, der die temporäre Datei anzeigen möchte. In diesem Fall handelt es sich möglicherweise um ein Berechtigungsproblem.
Simon
1
Die temporäre Datei beginnt möglicherweise mit ".". In diesem Fall ist es .foo.bar.hzmkjt7.
Zwischen dem