web-dev-qa-db-fra.com

comment dire à rsync de conserver l'horodatage des fichiers lorsque l'arborescence source a un point monté

Lié à cela question

Brève description du problème:

Lorsque l'arborescence source a un point monté à l'intérieur, les horodatages des fichiers à l'intérieur de ce point monté lorsqu'ils sont copiés dans l'arborescence cible ne sont pas conservés même lorsque vous utilisez -a option

Description détaillée:

Supposons qu'il s'agit de l'arborescence source:

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

data/ ci-dessus est monté un disque USB externe. Tout est ext4 système de fichiers. Tout dans la source appartient à mon me.

BACKUP était également un point de montage, le disque USB de sauvegarde.

Après avoir émis cette commande rsync -av --delete /home/me/ /home/BACKUP/, Je l'ai trouvé /home/BACKUP/data/ et tout ce qui se trouve en dessous a l'horodatage actuel, comme si ces fichiers avaient été créés maintenant, et non l'horodatage des fichiers dans /home/me/data/. Les autres fichiers et dossiers en dehors de data ont bien conservé l'horodatage.

La question est: comment utiliser rsync dans le paramètre ci-dessus pour lui dire de conserver les horodatages sur tous les fichiers et dossiers, même sur les fichiers et dossiers sur un point monté?

J'utilise:

>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

de man rsync:

   -t, --times                 preserve modification times

EDIT - pour améliorer cette réponse car il n'est pas immédiatement évident pourquoi cela n'a pas aidé OP:

OP copie des fichiers d'un système de fichiers à un autre et souhaite conserver c-time. La plupart des gens comprennent c-time pour signifier "créer l'heure", ce qui est incorrect sur la plupart des systèmes UNIX/Linux (les systèmes de fichiers Windows suivent les heures de "création" ou de "naissance").

Pour la plupart, sous UNIX et Linux, c-time est l'horodatage utilisé pour enregistrer le dernier inode ' [~ # ~] c [~ # ~] ' hange. Un inode change si l'un de ses attributs est mis à jour:

OP ne peut pas conserver le c-time de leurs fichiers lorsqu'ils sont transférés sur un nouveau système de fichiers. La création de ces fichiers dans les nouveaux systèmes de fichiers est l'une des conditions listées ci-dessus (création d'inode/fichier).

/ÉDITER

48
h3rrmiller

comme l'a déjà dit hr3miller, -a (ou --archive) est égal à -rlptgoD et inclut déjà le temps de synchronisation.

Cependant, lorsque rsync copie des données vers, par exemple. un montage NFS/FAT32/NTFS où la préservation de l'utilisateur et du propriétaire échoue, rsync n'essaiera pas de régler l'heure. Rsync avertira avec quelque chose comme

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

Par conséquent, omettez de préserver l'utilisateur et le groupe en utilisant

-rlptD

au lieu de

-rlptgoD

Utilisez-le uniquement lorsque vous ne conservez pas le propriétaire et le groupe est une option pour vous. Notez que la préservation des liens symboliques et d'autres fonctionnalités peut également déclencher ce comportement. Vous devrez parcourir la page de manuel pour chaque fonctionnalité rsync (-r -l -p -t -g -o -D) que vous souhaitez sauvegarder.

8
user1283043