it-swarm.com.de

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

Im Zusammenhang damit Frage

Kurze Beschreibung des Problems:

Wenn der Quellbaum einen gemounteten Punkt enthält, werden Zeitstempel für Dateien innerhalb dieses gemounteten Punkts beim Kopieren in den Zielbaum nicht beibehalten, selbst wenn die Option -a Verwendet wird

Detaillierte Beschreibung:

Angenommen, dies ist der Quellbaum:

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

dabei ist data/ oben ein externes USB-Laufwerk. Alles ist ext4 Dateisystem. Alles in der Quelle gehört meinem me.

BACKUP war zufällig auch ein Mount-Punkt, das Backup-USB-Laufwerk.

Nachdem ich diesen Befehl rsync -av --delete /home/me/ /home/BACKUP/ Ausgegeben hatte, stellte ich fest, 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 Dateien und Ordnern außerhalb von data wurde der Zeitstempel in Ordnung gehalten.

Die Frage ist: Wie kann man rsync in der obigen Einstellung verwenden, um Zeitstempel für alle Dateien und Ordner beizubehalten, 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
42
Nasser

von man rsync:

   -t, --times                 preserve modification times

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

OP kopiert Dateien von einem Dateisystem in ein anderes und möchte c-time Beibehalten. Die meisten Leute verstehen unter c-time "Erstellungszeit", was auf den meisten UNIX/Linux-Systemen falsch ist (Windows-Dateisysteme verfolgen die "Erstellungs-" oder "Geburtszeiten").

In UNIX und Linux ist c-time Meistens der Zeitstempel, mit dem der letzte Inode aufgezeichnet wird ' [~ # ~] c [~ # ~] 'hange. Ein Inode ändert sich, wenn eines seiner Attribute aktualisiert wird:

OP kann die c-time Ihrer 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

48
h3rrmiller

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

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

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

Lassen Sie daher Benutzer und Gruppe nicht mit

-rlptD

anstatt

-rlptgoD

Verwenden Sie diese Option nur, wenn Sie den Eigentümer und die Gruppe nicht beibehalten. 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.

8
user1283043