Ich habe rsync getestet und beim Kopieren von Dateien und Ordnern von einer Partition auf eine andere einen seltsamen Fehler gefunden:
Wenn ich das mache:
rsync -avE --delete '/Volumes/disk1/origin/' '/Volumes/disk2/destination/'
Es kopiert/synchronisiert korrekt.
Wenn ich das nächste Mal rsync für die gleiche Synchronisierung verwende, werden einige Änderungsdaten in Dateien (nicht Ordnern!) Falsch (werden auf das aktuelle Datum und die aktuelle Uhrzeit geändert), obwohl ich das in dem Befehl verwendet habe, der es beibehalten -a
sollte rsync
.
Das Seltsamste ist, dass, wenn ich es wiederhole, die falschen Daten jetzt korrekt sind, was bedeutet, dass rsync die Änderungsdaten jedes zweite Mal ändert, wenn es ausgeführt wird, und wenn es die Daten ändert, sind es immer die gleichen Dateien. Ich sehe kein anderes Muster als nur Dateien und dieselben Dateien zu beeinflussen.
Was mache ich falsch und kann das behoben werden?
Dies ist mit OS X 10.9.5 unter Verwendung des Terminals rsync 2.6.9
Lassen Sie mich meinen Kommentar korrigieren: Ein 64-Bit-Zeitstempel besteht aus access-modification-change-birthtime
.
Ab man 2 stat
den folgenden Systemaufrufen ändern sich die jeweiligen Zeiten.
Die zeitbezogenen Felder von struct stat lauten wie folgt:
st_atime Time when file data last accessed. Changed by the mknod(2), utimes(2) and read(2) system calls.
st_mtime Time when file data last modified. Changed by the mknod(2), utimes(2) and write(2) system calls.
st_ctime Time when file status was last changed (inode data modification). Changed by the chmod(2), chown(2), link(2), mknod(2), rename(2),
unlink(2), utimes(2) and write(2) system calls.
st_birthtime Time of file creation. Only set once when the file is created. This field is only available in the 64 bit inode variants. On filesys-
tems where birthtime is not available, this field holds the ctime instead.
Tools wie cp
, ditto
, und pax
können OS X-Metadaten beibehalten, wenn sie zum Kopieren von Dateien aufgerufen werden. Diese Tools behalten die Geburtszeit nicht bei, wenn die Änderungszeit neuer ist als die Geburtszeit der Originaldatei. Die Entstehungszeit der neuen Datei wird auf die Änderungszeit der Originaldatei gesetzt.
Wenn Sie rsync mit den Patches fileflags, crtimes, hfs-compression kompilieren, kann rsync OS X-Metadaten verarbeiten und die Geburtszeit der Originaldatei in der neuen Datei beibehalten.
Sie würden also rsync so aufrufen.
rsync -avXN --delete SOURCE DESTINATION
Ich schlage vor, dass Sie das rsync-Handbuch ausführlich lesen und die von mir vorgeschlagenen Optionen verstehen, bevor Sie versuchen, sie anzuwenden.
rsync -avXN --delete SOURCE DESTINATION
und es funktioniert großartig, alle Änderungsdaten, Erstellungsdaten usw. werden beibehalten, also Problem gelöst, danke!-N
sollte die Option verfügbar sein. Von rsync -h
: -N, --crtimes preserve create times (newness)
.
Chris Harrington
jackJoe
mmmmmm
jackJoe
-avE
?fd0
jackJoe
fd0
access-modification-creation-birthtime
. In Finder-Begriffen ist die Geburtszeit die Erstellungszeit. Ein anfänglicher Lauf vonrsync -av SOURCE DESTINATION
bewahrt die Zugriffsänderung und die Erstellungszeit der Geburtszeit wird zu der Zeit, zu der rsync den Inode erstellt hat. Wenn Dateien im SOURCE-Ordner geändert werden,rsync
wird beim nächsten Durchlauf die Geburtszeit der DESTINATION-Datei auf die Erstellungszeit der SOURCE-Datei geändert. - OS X 10.6, 64bit mit rsync 3.1.1. Ich denke, dies ist ein Problem mit OS X, nicht mit rsync, werde es weiter untersuchen.