Estoy comparando dos directorios grandes en dos discos FireWire 800 externos 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 119.56 GB para 30.031 elementos.
Me sorprendió la cantidad de diferencias reportadas en la salida, como
Binary files /path/to/directory1/with/subdirectory/file_xyz and /path/to/directory2/with/subdirectory/file_xyz differ
y comencé 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" informa tantas diferencias (o aparentemente falla), mientras que la comparación de fragmentos más pequeños no?
Ediciones desde la publicación original:
- La versión de
diff
que estoy usando es GNU diffutils 2.8.1. - Solo es una suposición descabellada aquí, 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 nuevamente se me presentaron muchas diferencias entre esos directorios. Luego configuré el Ahorro de energía de la preferencia del sistema para que no configurara la pantalla en modo de suspensión durante 1 hora, porque había medido con
time diff -r /path/to/directory1 /path/to/directory2
que demora entre 45 y 50 minutos para que la diferencia termine. Mis discos duros y la Mac nunca se duermen.
Luego desmonté ambas unidades y las volví a montar. Corrió el diff otra vez y no se encontraron diferencias aparte de un archivo. Comparé manualmente un archivo diferente y lo encontré idéntico.
Esto parece confirmar lo que encontré al comparar trozos más pequeños antes. También parece confirmar que algo está ocurriendo con un tiempo de espera como se sospechaba anteriormente, pero todavía me pregunto si si una unidad FireWire no estaría disponible o lo que sea, diff no debería informar una diferencia, sino decir "Archivo no disponible" o "Sólo en el directorio / yada / yada /: archivo_xyz".
Curiosamente, la diferencia antes de la remonta tomó 28 minutos, después de la remontada tomó casi 51 minutos.
A la luz de eso : ¿Qué puedo hacer para evitar que algo así suceda?
Por supuesto, uno podría decir que nunca se debe poner en reposo la pantalla o lo que sea, pero eso parece no resolver el problema subyacente. Algo más debe estar sucediendo, simplemente no puedo entender qué. Como un aparte, en otras ocasiones anteriores, después de un tiempo de inactividad en esos discos duros FireWire, estaba tratando de escribir en un archivo y obtuve este * mensaje de código de error -50 "(tenga en cuenta que no vi nada de eso durante la operación de diff). Siempre podría" resolver "el problema al desmontar y volver a montar las unidades, pero creo que debe haber un problema completamente diferente solución a eso:
Solucionescomo las que se presentan aquí apenas parecen estar abordando el problema subyacente.