So weisen Sie rsync an, den Zeitstempel für Dateien beizubehalten, wenn der Quellbaum einen bereitgestellten Punkt hat

41

Bezogen auf diese Frage

Kurze Beschreibung des Problems:

Wenn der Quellbaum einen eingebundenen Punkt enthält, werden Zeitstempel für Dateien innerhalb dieses eingebundenen Punkts beim Kopieren in den Zielbaum nicht beibehalten, auch wenn die -aOption verwendet wird

Detaillierte Beschreibung:

Angenommen, dies ist der Quellenbaum:

                       /home/                           /home/
                         |                                |
                        me/                             BACKUP/
                         |                                |
                    +----+----------+                +----+-------+
                    |    |          |                |    |       |
                 data/  foo.txt    boo.txt         data/ foo.txt boo.txt
                    |                                |
                   a.txt                           a.txt

Wo data/oben ist externe USB-Festplatte gemountet. Alles ist ext4Dateisystem. Alles in der Quelle gehört mir me.

BACKUP Zufällig war auch ein Einhängepunkt das Backup-USB-Laufwerk.

Nachdem rsync -av --delete /home/me/ /home/BACKUP/ich diesen Befehl ausgegeben habe , habe ich festgestellt, dass /home/BACKUP/data/und alles darunter den aktuellen Zeitstempel hat, als ob diese Dateien jetzt erstellt worden wären, und nicht den Zeitstempel für die Dateien in /home/me/data/. Bei anderen externen Dateien und Ordnern datablieb der Zeitstempel in Ordnung.

Die Frage ist: Wie wird rsyncin der obigen Einstellung festgelegt, dass Zeitstempel für alle Dateien und Ordner beibehalten werden sollen, auch für Dateien und Ordner auf einem bereitgestellten Punkt?

Ich benutze:

>uname -a
Linux 3.5.0-17-generic #28-Ubuntu SMP x86_64 x86_64 x86_64 GNU/Linux

>rsync -v
rsync  version 3.0.9  protocol version 30
Nasser
quelle

Antworten:

45

von man rsync:

   -t, --times                 preserve modification times

EDIT - um diese Antwort zu verbessern, da nicht sofort ersichtlich ist, warum dies dem OP nicht geholfen hat:

OP kopiert Dateien von einem Dateisystem in ein anderes und möchte diese beibehalten c-time. Die meisten Leute verstehen c-timeunter "Erstellungszeit" die auf den meisten UNIX / Linux-Systemen falsche Zeit (Windows-Dateisysteme erfassen die "Erstellungs-" oder "Geburts" -Zeiten).

In den meisten c-timeFällen wird unter UNIX und Linux der Zeitstempel zum Aufzeichnen des letzten Inode- C -Wechsels verwendet. Ein Inode ändert sich, wenn eines seiner Attribute aktualisiert wird:

OP kann die c-timeihrer Dateien nicht beibehalten , wenn sie auf ein neues Dateisystem gebracht werden. Die Erstellung dieser Dateien in den neuen Dateisystemen ist eine der oben aufgeführten Bedingungen (Erstellung von Inode / Datei).

/BEARBEITEN

h3rrmiller
quelle
9
Vielen Dank. Ich weiß das. Lesen Sie die Frage aber bitte noch einmal sorgfältig durch. Ich habe den Einsatz , -adie sagt: archive mode; equals -rlptgoD dafür -tbereits enthalten ist.
Nasser
1
Versuchen Sie, Zeit für Veränderungen zu sparen? ctime ist NICHT für "erstellt" seine für (Status-) Änderung
h3rrmiller
1
Ich möchte, dass es genauso funktioniert wie bei Dateien, die sich nicht auf der bereitgestellten Festplatte befinden. dh behalten Sie den gleichen Zeitstempel bei, den Sie beim Bearbeiten ls -lder Datei sehen. Dies funktioniert für Dateien, die sich nicht innerhalb des Einhängepunkts befinden. Alle Dateien im Mount-Punkt haben jedoch einen Zeitstempel, der darauf hinweist, dass sie gerade erstellt wurden. Wie auch immer du diesmal nennst. Ich wollte nur, dass es den gleichen Zeitstempel für die Dateien in der Quelle verwendet. Jetzt geht es nicht. Ich möchte, dass alle Zeitaspekte kopiert werden. dh es muss ein Klon der Datei erstellt werden. Erstellungszeit, Änderungszeit, etc ...
Nasser
4
Die Änderungszeit (ctime) wird aktualisiert, wenn der Inode geändert wird (z. B. Erstellung / Berechtigungsänderung / Verschieben / usw.). Da Sie einen neuen Inode erstellen (weil Sie die Datei über ein Dateisystem (separate Inode-Tabellen) kopieren), wird die C-Zeit aktualisiert. Daran führt kein Weg vorbei, da es sich um den Wechsel des Inodes und nicht der Datei handelt en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller
3
ls -lzeigt mtime (ändern) nicht ctime
h3rrmiller
6

Wie hr3miller bereits sagte, ist -a (oder --archive) gleich -rlptgoD und enthält bereits die Synchronisationszeit.

Wenn jedoch rsync Daten kopiert, z. Bei einem NFS / FAT32 / NTFS-Mount, bei dem die Beibehaltung von Benutzer und Besitzer fehlschlägt, versucht rsync nicht, die Uhrzeit festzulegen. Rsync warnt mit so etwas wie

rsync: chown "/mnt/backup/postgres/hourly.0/primary/var" failed: Operation not permitted (1)

Lassen Sie daher die Beibehaltung von Benutzer und Gruppe durch Verwendung von weg

-rlptD

anstatt

-rlptgoD

Verwenden Sie diese Option nur, wenn der Eigentümer und die Gruppe nicht erhalten bleiben. Beachten Sie, dass das Beibehalten von Symlinks und anderen Funktionen auch dieses Verhalten auslösen kann. Sie müssen die Manpage für jede rsync-Funktion (-r -l -p -t -g -o -D) durchgehen, die Sie sichern möchten.

user1283043
quelle
-2

Ich benutze rsync -azund sicher, dass es mir die Änderungszeit erspart. Ich habe es jetzt noch einmal überprüft.

Mik
quelle
2
Das liegt daran, dass -a( --archive) enthält -t.
Heemayl
Ctime kann jedoch nicht willkürlich zurückgesetzt werden. (Ich habe die Frage ursprünglich falsch verstanden, sorry.)
Mik