16 votos

max archivos por directorio en el sistema de archivos ext4

Puedo administrar una aplicación que contiene una filestore en el que todos los archivos se almacenan con los nombres iguales a las de sus sumas md5. Todos los archivos se almacenan en un directorio. En la actualidad hay miles, pero pronto su debe ser de millones de archivos en el servidor. El actual está ejecutando el servidor de Ubuntu 11.10 en el sistema de archivos ext4.

Alguien me dijo que no es prudente poner muchos archivos en un directorio, ya que esto va a crear aumento significativo en el tiempo de búsqueda y fiabilidad (tenía una historia acerca de max archivos de una sola dir podría señalar, lo que resulta en una gran lista enlazada). En su lugar propuso crear subdirectorios con, por ejemplo, subseries de caracteres del nombre de archivo. Sin embargo, esto va a hacer algunas cosas en mi aplicación mucho más complicado.

Es esto cierto, o hacer los modernos sistemas de ficheros (por ejemplo, ext4) tienen formas más eficientes para lidiar con esto y, naturalmente, a escala? Wikipedia tiene algunos detalles sobre los sistemas de ficheros, pero en realidad no dicen nada acerca de max archivos por directorio, o la búsqueda de veces.

5voto

user98296 Puntos 89

Los modernos sistemas de ficheros manejar directorios muy grandes muy bien, incluso a millones de archivos. Pero las herramientas convencionales no lo hacen. Por ejemplo, listado de un directorio grande con "ls" iba a tomar un tiempo bastante largo, ya que normalmente leer todo el directorio y hacer algo (aunque puede utilizar el comando ls-f para evitar la clasificación). No iba a empezar a mostrar los archivos hasta que todos se leen. La división de los nombres de ayuda en algunos casos, pero no en todos (por ejemplo rsync replicación podría necesitar para recoger todo el árbol de nombres).

3voto

David Schwartz Puntos 22683

El ext3 y más tarde los sistemas de archivos soportan hash árbol B de indexación de directorios. Este escalas muy bien siempre y cuando las operaciones sólo se hacen son de agregar, borrar, y el acceso por nombre. Sin embargo, aun así, recomendaría romper los directorios de abajo. De lo contrario, se crea una peligrosa trampa para herramientas (updatedb, ls, du, y así sucesivamente) que realizar otras operaciones sobre directorios que puede volar si el directorio tiene demasiadas entradas.

0voto

sysadmin1138 Puntos 86362

El núcleo del problema es cavar a través del directorio de inodo para el archivo que desea. Algunos sistemas de archivos hacerlo mejor que los demás. Algunos escala cerca de los miles de millones, pero si usted sólo tiene... 20K archivos introducción a los archivos es notablemente más rápido. También, archivo grande-cuenta crear problemas para ciertas herramientas y puede hacer copia de seguridad/restauración de un problema mucho más difícil como consecuencia de ello.

Sucede que me encontré con el mismo problema que en nuestro propio desarrollo (md5sum como nombre de archivo, la ampliación de la misma). Lo he recomendado a nuestros desarrolladores es cortar la cadena en trozos. Se fueron con grupos de 4, pero en el sistema de archivos estábamos en el tiempo, incluso que muchos podrían resultar problemático desde una perspectiva de rendimiento, por lo que terminó por dividir a un grupo-de-3 de los 6 primeros trillizos y dejando el resto como el nombre de archivo en la terminal de directorio.

Grupo de 4: 4976/d70b/180c/6142/c617/d0c8/9d0b/bd2b.txt
Grupo de 3: 497/6d7/0b1/80c/614/2c6/17d0c89d0bbd2b.txt

Esto tiene la ventaja de mantener el directorio de tamaños pequeños, y desde el MD5sum es bastante aleatorio, que va a crear un balance árboles de directorios. Que el último directorio en el que es poco probable que pueda obtener más de un par de archivos. Y no era difícil trabajar en nuestro código. Trabajamos con varios millones de archivo de los proyectos, de modo de escala era muy importante para nosotros.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: