4 votos

¿Dos entradas con idéntico nombre e inodo en el mismo directorio?

Acabo de ver la cosa más notable en un rincón profundo de mi gran disco de archivo: un único directorio que contiene dos entradas (subdirectorios) con el mismo nombre y el mismo número de inodo.

% ls -liaF path/to/directory/with/duplicate/entries
total 56
1227293 drwxr-xr-x  1 jdlh  staff    264  3 Jan  2016 ./
1227288 drwxr-xr-x  1 jdlh  staff    264  3 Jan  2016 ../
1227364 drwxr-xr-x  1 jdlh  staff    264 20 Feb  2009 .externalToolBuilders/
1227364 drwxr-xr-x  1 jdlh  staff    264 20 Feb  2009 .externalToolBuilders/
1227367 -rw-rw-rw-  1 jdlh  staff    859 20 Feb  2009 other_files

Hay dos entradas denominadas externalToolBuilders/ en este directorio. Parece que comparten el mismo número de inodo, por lo que se refieren a la misma cosa, no sólo a dos cosas que comparten el mismo nombre.

Cuando intento copiar este directorio a otro volumen del sistema de archivos utilizando el Finder, obtengo un error que indica que "un directorio con el nombre .externalToolBuilders ya existe". La copia se cancela en ese momento. Puedo referirme a ambas entradas con un único comodín como diff -rq .ext* y el comando trata esto como si se expandiera a dos argumentos.

Sin embargo, puedo utilizar algunos comandos de línea de comandos como cp -r que hace referencia al subdirectorio duplicado, y sólo se copia una de las entradas.

Parece que este directorio fue expandido desde un archivo .zip. Es posible que el archivo .zip se haya construido incorrectamente para tener dos entradas con el mismo nombre, que la utilidad de archivo no haya detectado el error, pero que Finder sí lo haya hecho.

[Actualización después de más investigación: el problema se observa en directorios que no fueron expandidos desde un archivo .zip. El problema se observa en varios lugares, pero todos los ejemplos observados están en un volumen alojado en un QNAP Dispositivo de almacenamiento conectado a la red (NAS), servido a Mac OS a través de netatalk AFP apoyo].

¿Alguien ha visto esto en un sistema de archivos de Mac OS antes? Me parece de lo más curioso. ¿Cómo se puede construir a voluntad? ¿Existen inconvenientes conocidos de ello? ¿Cómo se puede limpiar?

1voto

Lucia Puntos 922

Por fin he descubierto la causa subyacente. Lo siguiente es una adaptación de mi entrada del blog con mis hallazgos.

Me conecté al shell del sistema operativo Linux subyacente del servidor original. Miré el directorio correspondiente en el sistema de archivos subyacente del servidor. Esto es lo que he visto (con un título de confidencialidad y simplificado para mayor claridad):

% ls -la /share/Volume/path/to/directory/with/duplicate/entries
total 56
drwxr-xr-x  1 myuser  everyone      4096 Jan  3  2016 ./
drwxr-xr-x  1 myuser  everyone      4096 Aug 24 00:21 ../
drwxr-xr-x  1 myuser  everyone      4096 Aug 24 01:32 .externalToolBuilders/
drwxr-xr-x  1 myuser  everyone      4096 Feb 20  2009 :2eexternalToolBuilders/
-rw-rw-rw-  1 myuser  everyone      4096 Feb 20  2009 other_files

La observación crucial es el nombre del directorio, :2eexternalToolBuilders . Comienza con la cadena ":2e", mientras que la otra entrada de directorio comienza con la cadena ".". Desde el punto de vista del sistema operativo y del sistema de archivos subyacentes, no hay entradas duplicadas en este directorio. Los dos directorios "externalToolBuilder" tienen nombres diferentes.

Las capas de software sobre el sistema operativo del servidor - muy probablemente el software netatalk AFP - interpretan que el prefijo ":2e" significa ".". Al presentar la entrada del directorio subyacente :2eexternalToolBuilders a través de AFP a mi Mac, reescribe el nombre de la entrada a .externalToolBuilders . No se da cuenta de que hay otra entrada llamada .externalToolBuilders en ese directorio. El resultado es que mi Mac ve, en el servidor original, un directorio con una duplicación inesperada y que viola las reglas.

Sospecho que el uso del prefijo ":2e" en lugar del prefijo "." es una convención de la antigua Bloque de mensajes del servidor (SMB) software de servidor de archivos. SMB permitía que los archivos de Mac OS se almacenaran en los sistemas de archivos subyacentes de Windows. El sistema de archivos de Windows de la época no permitía nombres de archivos con un "." inicial. "2e" puede leerse como un código ASCII hexadecimal para el punto ".". Los dos puntos ":" pueden ser leídos como un carácter de escape, lo que significa que éste más los dos dígitos hexadecimales siguientes deben ser presentados como el carácter representado por los dígitos. Así, ":2e" en un nombre de entrada de directorio subyacente significa "." en el nombre de entrada de directorio presentado por el servidor.

Resulta que los datos del servidor original eran lo suficientemente antiguos como para haber sido copiados hacia adelante a través de múltiples versiones del servidor y del software del servidor. A veces accedía a través de SMB, y otras veces a través de AFP. Supongo que el directorio :2eexternalToolBuilders se creó primero, y el directorio complementario .externalToolBuilders se creó más tarde. Coexistieron, especialmente para los datos antiguos a los que no accedí. Sólo cuando utilicé Finder para copiar el directorio se hizo evidente el conflicto.

Especulo que el comportamiento inconsistente que vi en mi Mac, mirando el volumen presentado a través de AFP, es causado por las utilidades de Mac OS que tratan las entradas de directorio de manera diferente dependiendo de si buscan un nombre específico en un directorio, o enumeran todos los nombres. El software sin duda asumió que no puede haber nombres duplicados entre las entradas. Las utilidades que buscan un nombre específico encontrarán uno u otro de los duplicados, y se detendrán. No hay razón para buscar otro nombre, porque no debería existir ninguno. Las utilidades que enumeran todos los nombres, o todos los nombres que coinciden con un comodín, devuelven todas las entradas que coinciden, sin importarles que algunas sean duplicadas. El número de inodo duplicado puede explicarse porque el software enumera todos los nombres, y luego, para cada nombre, utiliza ese nombre para buscar el número de inodo correspondiente a ese nombre. El software que devuelve los números de inodo terminaría, por supuesto, su búsqueda con la misma entrada de directorio las dos veces, porque estaba buscando el mismo nombre las dos veces.

La solución para mí fue patrullar el sistema de archivos subyacente de mi servidor original, buscando casos de duplicados separados por prefijos "." y ":2e". Encontré unos cinco casos, con nombres como .externalToolBuilders , .svn , .libs y .metadata . Utilicé el comando shell para fusionar todos los archivos en la entrada con el prefijo ".", y luego eliminar la entrada con el prefijo ":2e". Esto eliminó la duplicación, y dejó que la copia del Finder tuviera éxito.

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