¿Cuál es el número máximo de archivos que puede contener una carpeta Unix?

20

¿Cuál es el número máximo de archivos que puede contener una carpeta Unix?

Creo que será lo mismo que la cantidad de archivos.

Peter Mortensen
fuente
3
Una pregunta mucho mejor podría ser: ¿Cuántas debo usar? stackoverflow.com/questions/466521/…
Joachim Sauer el
1
Me encantaría que las URL de mi sitio se parezcan a site.com/username/ y así sucesivamente, pero pensar que (si tengo suerte) obtendré más de 2 millones de usuarios que serían más de 2 millones de carpetas, ya que no quiero usar un script como PHP con una modrewrite Estaba mirando la otra posibilidad de carpetas en una carpeta
1
Hazte un favor y crea subdirectorios con un esquema de reescritura.
Peter Eisentraut

Respuestas:

14

En todos los sistemas de archivos Unix actuales, un directorio puede contener una cantidad prácticamente ilimitada de archivos. Mientras que "ilimitado" está limitado por el espacio en disco y los inodos , lo que se agote primero.

Con diseños de sistemas de archivos más antiguos ( ext2 , UFS , HFS + ) las cosas tienden a ser más lentas si tiene muchos archivos en un directorio. Por lo general, las cosas comienzan a ser dolorosas alrededor de 10,000 archivos. Con los sistemas de archivos más nuevos ( ReiserFS , XFS , ZFS , UFS2 ) puede tener millones de archivos en un directorio sin ver cuellos de botella en el rendimiento general.

Pero tener tantos archivos en un directorio no está bien probado y hay muchas herramientas que fallan. Por ejemplo, los scripts de mantenimiento periódico del sistema pueden irritarlo.

Felizmente usé un directorio con varios millones de archivos en UFS2 y no había visto ningún problema hasta que quise eliminar el directorio, que tardó varios DÍAS.

max
fuente
12

Depende de cuántos inodos se creó el sistema de archivos. Ejecutando

df -i 

le dará la cantidad de inodos libres. Este es el límite práctico de cuántos archivos puede contener un sistema de archivos y, por lo tanto, un directorio.

Peter Mortensen
fuente
1
Sin embargo, muchos sistemas de archivos tienen un límite de archivos por directorio, independientemente del número de inodos libres.
1
sí, pero la pregunta estaba dirigida a los sistemas de archivos UNIX y, hasta donde yo sé, todos los sistemas de archivos UNIX modernos no limitan la cantidad de archivos en un directorio.
6

Supongo que estás pensando en almacenar muchos archivos en un solo lugar, ¿no?

La mayoría de los sistemas de archivos Unix modernos pueden colocar muchos archivos en un directorio, pero las operaciones como seguir rutas, enumerar archivos, etc. implican una búsqueda lineal a través de la lista de archivos y se vuelven lentos si la lista crece demasiado.

Me parece recordar haber escuchado que un par de miles es demasiado para la mayoría de los usos prácticos. La solución típica es dividir la agrupación. Es decir,

/some/path/to/dir/a/
/some/path/to/dir/b/
...
/some/path/to/dir/z/

y almacene sus archivos en el subdirectorio apropiado de acuerdo con un hash de ellos basename. Elija un hash conveniente, el primer personaje podría servir para casos simples.


Cristian Ciupitu escribe en los comentarios que XFS , y posiblemente otros sistemas de archivos muy nuevos, usan log(N)estructuras de búsqueda para contener el contenido del directorio, por lo que esta restricción se mejora considerablemente .

dmckee
fuente
55
Algunos sistemas de archivos modernos, por ejemplo, XFS no implican una búsqueda lineal. La tecnología B-Tree de XFS le permite ir directamente a los bloques y / o extensiones que contienen la ubicación de un archivo utilizando índices sofisticados (desde uoks.uj.edu.pl/resources/flugor/IRIX/xfs-whitepaper.html ).
Cristian Ciupitu
Ah! No lo sabia. Gracias. Se agregará al texto.
dmckee
1
Para ext3, debe activar la función "dir_index", cf. tune2fs (8).
0

ext3uno de los formatos de sistema de archivos de Linux más comunes se vuelve realmente lento si tiene alrededor de 20k + archivo en un directorio. Independientemente de la cantidad que pueda contener, debe intentar evitar tener tantos archivos en un directorio.

Rory
fuente
0

Por el comentario que dejó, creo que realmente no le importa cuántos archivos / carpetas puede alojar su FS.

Probablemente debería considerar usar ModRewrite y reescribir site.com/username en site.com/?user= o algo por el estilo y almacenar todos sus datos en una base de datos. Por lo general, no es necesario crear una carpeta por usuario (y no es una buena idea).

Dicho esto, cada sistema de archivos tiene límites y dfpuede decirle cuántos inodos están disponibles en cada partición de su sistema.

Phaphink
fuente