Estoy comparando dos grandes directorios en dos discos externos FireWire 800 diferentes utilizando
diff -r /path/to/directory1 /path/to/directory2
El tamaño del directorio (y sus subdirectorios) en un disco FireWire es de 118,2 GB para 30.000 elementos y de 119,56 GB para 30.031 elementos.
Me sorprendió la gran cantidad de diferencias que se registran en la salida, como
Binary files /path/to/directory1/with/subdirectory/file_xyz and /path/to/directory2/with/subdirectory/file_xyz differ
y comenzó a comparar algunos de ellos individualmente. Cuando los comparo con
diff /path/to/directory1/with/subdirectory/with/subdirectory/file_xyz /path/to/directory2/with/subdirectory/with/subdirectory/file_xyz
o incluso
diff /path/to/directory1/with/subdirectory/ /path/to/directory2/with/subdirectory/
diff
no informa de ninguna diferencia entre estos archivos o directorios.
¿Cuál podría ser la razón por la que la "comparación grande" reporta tantas diferencias (o aparentemente falla), mientras que la comparación de trozos más pequeños no lo hace?
Editado desde el post original:
- La versión de
diff
Estoy usando GNU diffutils 2.8.1. - Sólo es una suposición, pero ¿podría tener algo que ver con el hecho de que estos directorios están en discos duros externos que podrían experimentar algún tipo de tiempo de espera?
-
Hice otra comparación y de nuevo me encontré con muchas diferencias entre esos directorios. A continuación, configuré la preferencia del sistema Ahorro de energía para no poner la pantalla en reposo durante 1 hora, porque había medido con
time diff -r /path/to/directory1 /path/to/directory2
que tarda entre 45 y 50 minutos en terminar la difusión. Mis discos duros y el Mac nunca se duermen.
Luego desmonté ambas unidades y las volví a montar. Ejecuté el diff de nuevo y voilà no se encontraron diferencias aparte de un archivo. Comparé manualmente ese archivo diferente y encontré que era idéntico.
Esto parece confirmar lo que encontré comparando trozos más pequeños antes. También parece confirmar que hay algo que sucede con un tiempo de espera como se sospechaba anteriormente, pero todavía me pregunto que si una unidad FireWire no estuviera disponible o lo que fuera, diff no debería informar de una diferencia, sino decir "archivo no disponible" o "Sólo en /yada/yada/directorio: archivo_xyz".
Curiosamente, el diff antes del remontaje tardó 28 minutos, después del remontaje tardó casi 51 minutos.
A la luz de eso: ¿Qué puedo hacer para evitar que ocurra algo así?
Por supuesto, se podría decir que nunca se ponga la pantalla en reposo o lo que sea, pero eso no parece resolver el problema de fondo. Algo más debe estar pasando, sólo que no puedo averiguar qué.Como apunte, en otras ocasiones anteriores, después de un tiempo de inactividad en esos discos duros FireWire, intentaba escribir en un archivo y me salía este mensaje de *código de error -50" (ojo, no vi nada de eso durante la operación de difusión). Siempre podía "resolver" el problema desmontando y volviendo a montar los discos, pero creo que debe haber una solución totalmente diferente a eso:
Soluciones como los presentados aquí apenas parecen abordar el problema de fondo.