0 votos

El diferencial sobre subdirectorios grandes falla

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:

  1. La versión de diff Estoy usando GNU diffutils 2.8.1.
  2. 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?
  3. 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:
    Error Code -50 appears during write operation after external hd inactive for a while
    Soluciones como los presentados aquí apenas parecen abordar el problema de fondo.

0voto

Alex Ixeras Puntos 73

Durante una semana he probado un solución recomendada Encontré en iFixit, cuando alguien encontró un código de error -50 en un disco duro externo. Parece que resuelve el problema que tenía. También me encontré con código de error -50 antes cuando intenté copiar archivos, pero no lo relacioné inmediatamente con mi problema de fallos en los diffs. Tenía la sospecha de que alguna inactividad en los discos duros externos era la responsable del fallo y el artículo parece confirmarlo. Cito la solución en caso de que tengas problemas similares:

Para solucionar este error, debes ir a Preferencias del Sistema->Ahorro de Energía y, tanto para la Batería como para el Adaptador de Energía, marcar la casilla junto a "Poner el(los) disco(s) duro(s) en reposo cuando sea posible" en tu ordenador. Sí, eso significa que el sistema operativo pondrá todos los discos en reposo cuando pueda, pero es la única forma que he encontrado para solucionar el problema.

Lo que parece ocurrir es que algunos discos externos tienen un firmware que detecta la inactividad y hace que los discos se apaguen. Si OSX no está configurado con el ajuste de ahorro de energía mencionado anteriormente, entonces OSX no espera que las unidades entren en reposo. Cuando se accede a la unidad después de que se pone en reposo, obviamente algo se estropea y el error -50 se lanza entre otros problemas.

Al configurar el sistema operativo para poner los discos en reposo, el sistema operativo emitirá órdenes de giro.

Sin embargo, lo que me desconcierta o sorprende es por qué diff informaría de diferencias reales en los archivos, cuando en realidad no podía acceder(?) al archivo correctamente.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X