error con rsync cambiando las fechas de modificación incluso con la opción -a

3

He estado probando rsync y encontré un error extraño al copiar archivos y carpetas de una partición a otra:

Si hago esto:

rsync -avE --delete '/Volumes/disk1/origin/' '/Volumes/disk2/destination/'

Se copia / sincroniza correctamente.

La próxima vez que use rsync para la misma sincronización, algunas fechas de modificación en archivos (¡no carpetas!) se vuelven incorrectas (se cambian a la fecha y hora actuales), aunque he usado -a en rsync comando que debería preservarlo.

Lo más extraño es que si lo rehago, las fechas incorrectas son correctas ahora, lo que significa que rsync está cambiando las fechas de modificación cada segunda vez que se ejecuta, y cuando cambia las fechas, siempre es la mismos archivos, no veo un patrón que no solo afecte a los archivos y los mismos archivos.

¿Qué estoy haciendo mal y puedo solucionarlo?

Esto es con OS X 10.9.5, usando el terminal, rsync 2.6.9

    
pregunta jackJoe 16.06.2015 - 17:29

1 respuesta

1

Permítame corregir mi comentario: una marca de tiempo de 64 bits consta de access-modification-change-birthtime .

Desde man 2 stat , las siguientes llamadas al sistema cambian los tiempos respectivos.

Los campos relacionados con el tiempo de struct stat son los siguientes:

 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.

Las herramientas como cp , ditto y pax pueden conservar los metadatos de OS X cuando se los llama para copiar archivos. Estas herramientas no conservarán la hora de nacimiento si la hora de modificación es más reciente que la hora de nacimiento del archivo original. La hora de nacimiento del nuevo archivo se establece en la hora de modificación del archivo original.

Si compilas rsync con los parches fileflags, crtimes, hfs-compress, rsync puede manejar los metadatos de OS X y preservar la hora de nacimiento del archivo original en el nuevo archivo.

Entonces, llamarías a rsync de esta manera.

rsync -avXN --delete SOURCE DESTINATION

Le sugiero que lea detenidamente el manual de rsync y que comprenda las opciones que le he sugerido antes de intentar aplicarlas.

    
respondido por el fd0 20.06.2015 - 14:39

Lea otras preguntas en las etiquetas