cómo decirle a rsync que conserve la marca de tiempo en los archivos cuando el árbol de origen tiene un punto montado

42

Relacionado con esta pregunta

Breve descripción del problema:

Cuando el árbol de origen tiene un punto montado dentro, las marcas de tiempo en los archivos dentro de ese punto montado cuando se copian en el árbol de destino no se conservan incluso cuando se usa la -aopción

Descripción detallada:

Supongamos que este es el árbol de origen:

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

donde data/arriba está montado un disco USB externo. Todo es ext4sistema de archivos. Todo en la fuente es propiedad de mi me.

BACKUP También resultó ser un punto de montaje, el disco USB de respaldo.

Después de emitir este comando rsync -av --delete /home/me/ /home/BACKUP/, descubrí que /home/BACKUP/data/y todo lo que está debajo tiene la marca de tiempo actual, como si estos archivos se hubieran creado ahora, y no la marca de tiempo en los archivos /home/me/data/. Otros archivos y carpetas en el exterior datatenían la marca de tiempo conservada OK.

La pregunta es: ¿Cómo usar rsyncla configuración anterior para indicarle que conserve las marcas de tiempo en todos los archivos y carpetas, incluso en archivos y carpetas en un punto montado?

Estoy usando:

>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
fuente

Respuestas:

46

de man rsync:

   -t, --times                 preserve modification times

EDITAR: para mejorar esta respuesta, ya que no es inmediatamente obvio por qué esto no ayudó a OP:

OP está copiando archivos de un sistema de archivos a otro y desea conservarlos c-time. La mayoría de las personas entiende c-timeque significa "crear tiempo", que es incorrecto en la mayoría de los sistemas UNIX / Linux (los sistemas de archivos de Windows rastrean los tiempos de "creación" o "nacimiento").

En su mayor parte, en UNIX y Linux, c-timees la marca de tiempo utilizada para registrar el último cambio de inodo ' C '. Un inodo cambia si alguno de sus atributos se actualiza:

OP no puede preservar el c-timede sus archivos cuando se incorporan a un nuevo sistema de archivos. La creación de estos archivos en los nuevos sistemas de archivos es una de las condiciones enumeradas anteriormente (creación de inodo / archivo).

/EDITAR

h3rrmiller
fuente
99
Gracias. Yo sé eso. Pero por favor lea la pregunta nuevamente cuidadosamente. Hice uso -aque dice: archive mode; equals -rlptgoD para ello -tya está incluido.
Nasser
1
¿Estás tratando de preservar el tiempo de cambio? ctime NO es para "creado" su cambio de (estado)
h3rrmiller
1
Quiero que funcione igual que en archivos que no están en el disco montado. es decir, mantener la misma marca de tiempo que se ve al hacer ls -len el archivo. Esto funciona en archivos que no están dentro del punto de montaje. Pero todos los archivos que están dentro del punto de montaje tienen una marca de tiempo que indica que se acaban de crear. Como llames esta vez. Solo quería que usara la misma marca de tiempo en los archivos de la fuente. Ahora no lo hace. Quiero que se copien todos los aspectos de tiempo. es decir, se realizará un clon del archivo. hora de creación, hora de cambio, etc ...
Nasser
44
el tiempo de cambio (ctime) se actualiza al cambiar el inodo (es decir, creación / cambio de permiso / movimiento / etc.). porque está creando un nuevo inodo (porque está copiando el archivo a través de un sistema de archivos (tablas de inodo separadas) se actualiza el ctime. no hay forma de evitarlo porque es el cambio del inodo, no el archivo. en.wikipedia.org/wiki/Stat_(system_call)#ctime
h3rrmiller
3
ls -lmuestra mtime (modificar) no
ctime
6

Como ya dijo hr3miller, -a (o --archive) es igual a -rlptgoD y ya incluye el tiempo de sincronización.

Sin embargo, cuando rsync copia datos a, por ejemplo. un montaje NFS / FAT32 / NTFS donde falla la preservación del usuario y el propietario, rsync no intentará establecer la hora. Rsync advertirá con algo como

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

Por lo tanto, deje de preservar el usuario y el grupo utilizando

-rlptD

en lugar de

-rlptgoD

Solo use esto cuando no esté preservando al propietario y el grupo es una opción para usted. Tenga en cuenta que preservar los enlaces simbólicos y otras características también podría desencadenar ese comportamiento. Tendrá que pasar por la página de manual para cada característica rsync (-r -l -p -t -g -o -D) que desea respaldar.

usuario1283043
fuente
-2

Lo uso rsync -azy seguro que me conserva el tiempo de modificación. Lo revisé dos veces en este momento.

Mik
fuente
2
Eso es porque -a( --archive) incluye -t.
heemayl
Sin embargo, no, ctime no se puede restablecer arbitrariamente. (Originalmente entendí mal la pregunta, lo siento)
Mik