cp --update todavía copia archivos sin cambios

1

Estoy tratando de copiar solo archivos modificados usando 'cp -pu' en Linux (Red Hat 6.1, el FS de origen / destino son particiones montadas en GlusterFS) pero descubrí que todavía intenta copiar archivos aparentemente viejos y sin cambios. De hecho, simplemente ejecutando el mismo comando nuevamente pasaría al siguiente archivo. Puedo reproducir el problema en la prueba que se muestra a continuación. Tenga en cuenta que en la prueba, presiono control-C para detener el comando cp interactivo cada vez que me lo pide. La segunda ejecución omitiría el archivo solicitado en la primera ejecución. ¿Por qué pasó esto? ¿Y hay una herramienta estándar mejor y más rápida para copiar directorios montados localmente? (Probablemente podría probar rsync pero no necesito ser súper preciso ya que los datos son solo para pruebas y estoy preocupado por su velocidad).

 [root@flex 6b42]# for d in *.story; do echo trying $d; ls -al $d
 /data/staging/./storage01/42/6b/6b42/$d; cp --parent -rpu -v -i $d
 /data/staging/./storage01/42/6b/6b42/; done trying
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story: total 228 drwxrwx---    2
 somebody somebody     53 Jan  8 02:23 . drwxrwx--- 1280 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp

 /data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-62d0c6aa4a26.story:
 total 228 drwxrwx---    2 somebody somebody     53 Jan  8 02:23 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp cp: overwrite
 `/data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-2d0c6aa4a26.story/.timestamp'?
 ^C [root@flex 6b42]# for d in *.story; do echo trying $d; ls -al $d
 /data/staging/./storage01/42/6b/6b42/$d; cp --parent -rpu -v -i $d
 /data/staging/./storage01/42/6b/6b42/; done trying
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story
 0a65b244-f342-a120-9a47-62d0c6aa4a26.story: total 228 drwxrwx---    2
 somebody somebody     53 Jan  8 02:23 . drwxrwx--- 1286 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp

 /data/staging/./storage01/42/6b/6b42/0a65b244-f342-a120-9a47-62d0c6aa4a26.story:
 total 228 drwxrwx---    2 somebody somebody     53 Jan  8 02:23 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   2821 Nov 28  2011 data
 -rw-r--r--    1 somebody somebody      0 Nov 28  2011 images
 -rw-r-----    1 somebody somebody     17 Nov 28  2011 .timestamp trying 0aee088d-af48-1236-bcae-6d2033a2acb7.story
 0aee088d-af48-1236-bcae-6d2033a2acb7.story: total 232 drwxrwx---    2
 somebody somebody     53 Jan  7 09:39 . drwxrwx--- 1286 somebody
 somebody 147456 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   5952 Dec 19 12:40 data
 -rw-r--r--    1 somebody somebody      0 Dec 19 12:40 images
 -rw-r-----    1 somebody somebody     17 Dec 19 12:40 .timestamp

 /data/staging/./storage01/42/6b/6b42/0aee088d-af48-1236-bcae-6d2033a2acb7.story:
 total 232 drwxrwx---    2 somebody somebody     53 Jan  7 09:39 .
 drwxrwx--- 1363 somebody somebody 155648 Apr 30 11:07 ..
 -rw-r--r--    1 somebody somebody   5952 Dec 19 12:40 data
 -rw-r--r--    1 somebody somebody      0 Dec 19 12:40 images
 -rw-r-----    1 somebody somebody     17 Dec 19 12:40 .timestamp cp: overwrite
 `/data/staging/./storage01/42/6b/6b42/0aee088d-af48-1236-bcae-6d2033a2acb7.story/.timestamp'?
 ^C
osito de peluche
fuente
También tengo la impresión de que -u copia archivos que no debe copiar, por ejemplo, archivos que tienen una marca de tiempo más antigua (modificada) en el origen que en el destino.
Ben

Respuestas:

1

cp --update no comprueba si los archivos son diferentes, solo compara las marcas de tiempo.

Rsync, que parece que ya conoces, suena como una buena opción para tu situación.

Utilizar rsync -av $d/ /data/staging/./storage01/42/6b/6b42/$d/

Ankur
fuente
Sí, sé la diferencia entre cp y rsync. Y acabo de probar rsync, aparentemente también tiene el mismo problema. Entonces, ¿creo que esto podría ser un problema del sistema de archivos? Además, dije erróneamente que es una montura NFS, pero de hecho es una montura Glusterfs. Tal vez el error está en el brillo?
peluche
Tal vez un problema de marca de tiempo? statLos archivos y comparar. Pruebe también el -cindicador con rsync que compara archivos basados ​​en sumas de verificación en lugar de tamaño y tiempo de modificación; Sin embargo, esto puede ser un poco más lento.
Ankur
0

Si solo le preocupa la velocidad, rsync no es una opción para una copia de seguridad local, al contrario de lo que dice la otra respuesta. También estoy confundido por -u , pero al final si produce lo que necesita en el destino, probablemente no haya nada más rápido. Si necesita realizar actualizaciones frecuentes y usar siempre el mismo comando, es de esperar que la próxima vez las marcas de tiempo sean como cp -u las espera.

Nemo
fuente
¿La marca de tiempo tiene información de cambio de hora en la entrada de la carpeta? Simplemente curioso ...
pbies