La diferencia sobre subdirectorios grandes falla

0

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:

  1. La versión de diff que estoy usando es GNU diffutils 2.8.1.
  2. 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?
  3. 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:

    Soluciones como las que se presentan aquí apenas parecen estar abordando el problema subyacente.
pregunta Alex Ixeras 20.09.2017 - 12:32

1 respuesta

0

Durante una semana he probado una solución recomendada Encontré en iFixit, cuando alguien encontró un código de error -50 en un HD externo. Parece resolver el problema que tenía. También encontré el código de error -50 antes cuando intenté copiar archivos, pero no lo vinculé de inmediato a mi problema de fallas. Tenía la sospecha de que cierta inactividad en los discos duros externos fue responsable de la falla y el artículo parece confirmarlo. Para citar desde allí la solución, si tiene problemas similares:

  

Para evitar este error, querrá ir a Preferencias del sistema - > Ahorro de energía y para la batería y el adaptador de alimentación, marque la casilla junto a "Poner los discos duros en suspensión cuando sea posible" en su computadora . Sí, eso significa que el sistema operativo pondrá todas sus unidades en suspensión cuando pueda, pero esa es la única manera que he encontrado para solucionar el problema.

     

Lo que parece suceder es que algunas unidades externas tienen firmware que detecta la inactividad y hace girar las unidades hacia abajo. Si OSX no está configurado con la configuración de ahorro de energía mencionada anteriormente, OSX no espera que las unidades se pongan en suspensión. Al acceder a la unidad después de que se pone en modo de suspensión, obviamente, algo se desordena y el error -50 se produce entre otros problemas.

     

Al configurar el sistema operativo para poner los discos en modo de suspensión, el sistema operativo emitirá comandos de giro.


Lo único que me desconcierta o me sorprende es por qué diff informaría las diferencias reales en los archivos, cuando en realidad no pudo acceder (?) al archivo correctamente.

    
respondido por el Alex Ixeras 27.09.2017 - 08:02

Lea otras preguntas en las etiquetas