Compartir vía


Descripción de los tamaños de directorio en Azure NetApp Files

Cuando se crea un archivo en un directorio, se agrega una entrada a un archivo de índice oculto dentro del volumen de Azure NetApp Files. Este archivo de índice ayuda a realizar un seguimiento de los inodes existentes en un directorio y ayuda a acelerar las solicitudes de búsqueda de directorios con un gran número de archivos. A medida que se agregan entradas a este archivo, el tamaño del archivo aumenta (pero nunca disminuye) a una velocidad de aproximadamente 512 bytes por entrada en función de la longitud del nombre de archivo. Los nombres de archivo más largos agregan más tamaño al archivo. Los vínculos simbólicos también agregan entradas a este archivo. Este concepto se conoce como tamaño de directorio, que es un elemento común en todos los sistemas de archivos basados en Linux. El tamaño del directorio no es el número total máximo de archivos en un único volumen de Azure NetApp Files. Esto viene determinado por el valor de maxfiles.

De forma predeterminada, cuando se crea un nuevo directorio, consume 4 KiB (4096 bytes) u ocho bloques de 512 bytes. Puede ver el tamaño de un directorio recién creado desde un cliente Linux mediante el comando stat.

# mkdir dirsize 
# stat dirsize 
File: ‘dirsize’ 
Size: 4096            Blocks: 8          IO Block: 32768  directory 

Los tamaños de directorio son específicos de un único directorio y no se combinan tamaños. Por ejemplo, si hay 10 directorios en un volumen, cada uno puede aproximarse al límite de tamaño de directorio 320-MiB en un solo volumen.

Determinar si un directorio está llegando al tamaño límite

En un directorio de 320 MB, el número de bloques es 655360 y el tamaño de cada bloque es de 512 bytes. (Es decir, 320 x 1024 x 1024/512.) Este número se traduce en aproximadamente 4-5 millones archivos como máximo para un directorio de 320 MB. Sin embargo, el número máximo real de archivos puede ser menor, en función de factores como el número de archivos que tienen caracteres que no son ASCII en el directorio.

Puede usar el comando stat desde un cliente para ver si un directorio está llegando al límite de tamaño máximo de los metadatos del directorio (320 MB). Si alcanza el límite de tamaño máximo de un único directorio para Azure NetApp Files, se produce el error No space left on device.

En un directorio de 320 MB, el número de bloques es 655,360 y el tamaño de cada bloque es de 512 bytes. (Es decir, 320 x 1024 x 1024/512). Este número se traduce en aproximadamente 4 millones de archivos como máximo para un directorio de 320 MB. Sin embargo, el número máximo real de archivos puede ser menor, en función de factores como el número de archivos que tienen caracteres que no son ASCII en el directorio. Para obtener información sobre cómo supervisar maxdirsize, vea Supervisión de maxdirsize.

Consideraciones sobre el tamaño del directorio

Al tratar con un entorno de recuento elevado de archivos, tenga en cuenta las siguientes recomendaciones:

  • Los volúmenes de Azure NetApp Files admiten hasta 320 MiB para tamaños de directorio. Este valor no se puede aumentar.
  • Una vez que se ha superado el tamaño del directorio de un volumen, los clientes muestran un error fuera del espacio incluso si hay espacio disponible en el volumen.
  • En el caso de los volúmenes normales, un tamaño de directorio de 320 MiB equivale a aproximadamente 4-5 millones de archivos en un único directorio. Este valor depende de las longitudes de nombre de archivo.
  • Los volúmenes grandes tienen una arquitectura diferente a los volúmenes normales.
  • Los altos recuentos de archivos en un único directorio pueden presentar problemas de rendimiento al buscar. Cuando sea posible, limite el tamaño total de un único directorio a 2 MiB (aproximadamente 27 000 archivos) cuando se necesiten búsquedas frecuentes.
    • Si se necesitan más archivos en un único directorio, ajuste las expectativas de rendimiento de búsqueda en consecuencia. Aunque Azure NetApp Files indexa los listados de archivos de directorio para el rendimiento, las búsquedas pueden tardar algún tiempo con un recuento elevado de archivos.
  • Al diseñar el sistema de archivos, evite diseños de directorio plano. Para obtener información sobre los distintos enfoques de los diseños de directorio, consulte Acerca de los diseños de directorio.
  • Para resolver problemas en los que se ha superado el tamaño del directorio y no se pueden crear nuevos archivos, elimine o mueva archivos del directorio correspondiente.

Acerca de los diseños de directorio

El valor maxdirsize puede crear preocupaciones cuando se usan estructuras de directorio plano, donde una sola carpeta contiene millones de archivos en un solo nivel. Las estructuras de carpetas en las que los archivos, las carpetas y las subcarpetas se intercalan tienen un impacto bajo en maxdirsize. Hay varias metodologías de estructura de directorios.

Una estructura de directorio plano es un único directorio con muchos archivos debajo del mismo directorio.

Diagrama de una estructura de directorio plano.

Una estructura de directorio amplia contiene muchos directorios de nivel superior con archivos distribuidos entre todos los directorios.

Diagrama de una estructura de directorio amplia.

Una estructura de directorio profundo contiene menos directorios de nivel superior con muchos subdirectorios. Aunque esta estructura proporciona menos archivos por carpeta, las longitudes de ruta de acceso de archivo pueden convertirse en un problema si los diseños de directorio son demasiado profundos y las rutas de acceso de archivo se vuelven demasiado largas. Para obtener más información sobre las longitudes de las rutas de acceso de archivos, consulte Descripción de las longitudes de las rutas de acceso de archivos en Azure NetApp Files.

Diagrama de una estructura de directorio profundo.

Impacto de las estructuras de directorio plano en Azure NetApp Files

Las estructuras de directorio plano (muchos archivos en uno o pocos directorios) tienen un efecto negativo en una amplia gama de sistemas de archivos, volúmenes de Azure NetApp File u otros. Entre los posibles problemas se incluyen:

  • Presión de memoria
  • Uso de CPU
  • Rendimiento y latencia de red (especialmente durante consultas masivas de archivos, operaciones GETATTR, operaciones READDIR)

Debido al diseño de grandes volúmenes de Azure NetApp Files, el impacto de maxdirsize es único. El gran volumen maxdirsize de Azure NetApp Files se ve afectado de forma única debido a su diseño. A diferencia de un volumen normal, un gran volumen usa vínculos duros remotos dentro de Azure NetApp Files para ayudar a redirigir el tráfico entre diferentes dispositivos de almacenamiento para proporcionar más escala y rendimiento. Al usar directorios planos, hay una mayor proporción de vínculos duros internos remotos a archivos locales. Estos vínculos duros remotos cuentan para el valor total de maxdirsize, por lo que un gran volumen podría aproximarse a su límite de maxdirsize más rápido que un volumen normal.

Por ejemplo, si un único directorio tiene millones de archivos y genera aproximadamente un 85 % de los vínculos duros remotos para el sistema de archivos, puede esperar que maxdirsize se agote casi dos veces la cantidad que un volumen normal.

Para obtener los mejores resultados con tamaños de directorios en Azure NetApp Files:

  • Evite estructuras de directorio plano en Azure NetApp Files. Las estructuras de directorio ancho o profundo funcionan mejor, siempre que la longitud de la ruta de acceso del archivo o la carpeta no supere los estándares del protocolo NAS.
  • Si las estructuras de directorio plano son inevitables, supervise los maxdirsize de los directorios.

Supervisión de maxdirsize

Para un único directorio, use el comando stat para buscar el tamaño del directorio.

# stat /mnt/dir_11/c5 

Aunque el comando stat se puede usar para comprobar el tamaño del directorio de un directorio específico, es posible que no sea tan eficaz ejecutarlo individualmente en un único directorio. Para ver una lista de los tamaños de directorio más grandes ordenados de mayor a menor, el siguiente comando proporciona que al omitir directorios de instantáneas de la consulta.

# find /mnt -name .snapshot -prune -o -type d -ls -links 2 -prune | sort -rn -k 7 | head | awk '{print $2 " " $11}' | sort -rn 

Nota:

El tamaño del directorio notificado por el comando de estadísticas está en bytes. El tamaño notificado en el comando find está en KiB.

Ejemplo

# stat /mnt/dir_11/c5 

  File: ‘/mnt/dir_11/c5’ 

  Size: 322396160       Blocks: 632168     IO Block: 32768  directory 
 
# find /mnt -name .snapshot -prune -o -type d -ls -links 2 -prune | sort -rn -k 7 | head | awk '{print $2 " " $11}' | sort -rn 
316084 /mnt/dir_11/c5 

3792 /mnt/dir_19 

3792 /mnt/dir_16 

En el anterior, el tamaño del directorio de /mnt/dir_11/c5 es de 316 084 KiB (308,6 MiB), que se aproxima al límite de 320-MiB. Eso equivale a alrededor de 4,1 millones de archivos.

# ls /mnt/dir_11/c5 | wc -l
4171624

En este caso, considere las acciones correctivas, como mover o eliminar archivos.

Más información