Si hay como 1,000,000 de archivos individuales (la mayoría de 100k en tamaño) en un solo directorio, de forma plana (no hay otros directorios ni archivos en ellos), ¿habrá algún compromiso en cuanto a la eficiencia o desventajas de cualquier otra manera?¿Qué sucede si hay demasiados archivos en un único directorio en Linux?
Respuesta
ARG_MAX va a tener problemas con eso ... por ejemplo, rm -rf * (mientras está en el directorio) va a decir "demasiados argumentos". Las utilidades que quieran hacer algún tipo de globbing (o un shell) tendrán algún rompimiento de funcionalidad.
Si ese directorio está disponible para el público (digamos vía ftp, o servidor web) puede encontrar problemas adicionales.
El efecto en cualquier sistema de archivos dado depende completamente de ese sistema de archivos. ¿Con qué frecuencia se accede a estos archivos? ¿Qué es el sistema de archivos? Recuerde, Linux (de manera predeterminada) prefiere mantener en la memoria los archivos a los que accedió recientemente al poner los procesos en intercambio, según su configuración. ¿Este directorio se sirve a través de http? ¿Google va a verlo y rastrearlo? Si es así, es posible que deba ajustar la presión de caché VFS y la suavidad.
Editar:
ARG_MAX es un límite para todo el sistema a la cantidad de argumentos se pueden presentar al punto de entrada de un programa. Entonces, tomemos 'rm', y el ejemplo "rm -rf *" - el shell va a convertir '*' en una lista de archivos delimitada por espacios que a su vez se convierte en los argumentos para 'rm'.
Lo mismo va a pasar con ls y muchas otras herramientas. Por ejemplo, ls foo * podría romperse si demasiados archivos comienzan con 'foo'.
Aconsejaría (sin importar qué FS esté en uso) dividirlo en trozos de directorio más pequeños, solo por esa razón.
Cuando accidentalmente ejecuta "ls" en ese directorio, o usa tabulación completada, o desea ejecutar "rm *", tendrá un gran problema. Además, puede haber problemas de rendimiento dependiendo de su sistema de archivos.
Se considera buena práctica agrupar los archivos en directorios que se nombran por los primeros 2 o 3 caracteres de los nombres de archivo, p. Ej.
aaa/ aaavnj78t93ufjw4390 aaavoj78trewrwrwrwenjk983 aaaz84390842092njk423 ... abc/ abckhr89032423 abcnjjkth29085242nw ... ...
mayoría de las distribuciones utilizan Ext3 por defecto, que puede utilizar la indexación b-árbol de directorios grandes. Algunas de las distribuciones tienen esta característica dir_index
habilitada de forma predeterminada en otras, usted debería habilitarla usted mismo. Si lo habilita, no hay desaceleración incluso para millones de archivos.
Para ver si dir_index
función se activa do (como root):
tune2fs -l /dev/sdaX | grep features
Para activar dir_index función (como root):
tune2fs -O dir_index /dev/sdaX
e2fsck -D /dev/sdaX
Reemplazar /dev/sdaX
con partición para la que desea activar eso.
There * is * a penalty, la diferencia es entre una penalización exponencial, lineal o logarítmica – dsm
Haz tus números. Tienes 1mln archivos. Con el índice, le lleva N segundos acceder al archivo por nombre. Ahora lo dividirías en 1000 directorios con 1000 archivos cada uno. Le toma N/2 segundos para acceder al directorio, otro N/2 para acceder al archivo. Total N segundos sin contaje de sobrecarga para conmutar dirs. – vartec
La respuesta obvia es que la carpeta será extremadamente difícil de usar por los humanos mucho antes de cualquier límite técnico, (tiempo tomado para leer la salida de ls para uno, hay docenas de otras razones) ¿Hay alguna buena razón por la que no se puede dividir en subcarpetas?
Mi experiencia con grandes directorios en ext3 y dir_index
permitido:
- Si conoce el nombre del archivo que desea tener acceso, no hay casi ninguna pena
- Si usted quiere hacer las operaciones de esa necesidad para leer en la entrada del directorio completo (como un simple
ls
en ese directorio) tomará varios minutos por primera vez. Entonces el directorio permanecerá en la memoria caché del kernel y ya no habrá penalización - Si la cantidad de archivos es demasiado alta, se encontrará con ARG_MAX y otros problemas. Eso básicamente significa que wildcarding (
*
) no siempre funciona como se esperaba. Esto es sólo si realmente desea realizar una operación en todos los archivos a la vez
Sin dir_index
sin embargo, está muy atornillado :-D
No todos los sistema de archivo soporta que muchos archivos.
En algunos de ellos (ext2, ext3, ext4) es muy fácil alcanzar el límite de inode.
- 1. ¿Cuántos archivos en un directorio son demasiados (en Windows y Linux)?
- 2. Compruebe si un directorio está vacío usando C en Linux
- 3. Muchos archivos en un directorio?
- 4. columna Compruebe si hay un valor único
- 5. ¿Qué sucede si un hilo se cuelga en un proceso?
- 6. Demasiados archivos abiertos en python
- 7. ¿Cómo eliminar todos los archivos que se crearon recientemente en un directorio en Linux?
- 8. IOException: Demasiados archivos abiertos
- 9. ¿Qué sucede si un mensaje se revierte en MQ?
- 10. En Akka, ¿qué sucede si veo() un ActorRef muerto?
- 11. ¿Qué sucede si no devuelve un valor en C++?
- 12. Error "Demasiados archivos abiertos" en pdflatex
- 13. Creando un directorio temporal único de C puro en Windows
- 14. SVN Checkout un único directorio
- 15. ¿Cómo saber si hay demasiados mensajes de registro?
- 16. Directorio JAVA_HOME en Linux
- 17. Jetty IOException: Demasiados archivos abiertos
- 18. ¿Cómo puedo saber cuántos archivos hay en un directorio?
- 19. RecursiveDirectoryIterator lanza UnexpectedValueException en "Demasiados archivos abiertos"
- 20. ¿Hay demasiados eventos?
- 21. ¿Hay alguna manera de verificar si existe un directorio en los archivos de configuración de Apache?
- 22. Tomcat demasiados archivos
- 23. ¿Qué sucede si lanzo ReleaseMutex() dos veces?
- 24. ¿Qué sucede si no revierte una transacción en Hibernate?
- 25. Necesito combinar muchos archivos en un directorio
- 26. ¿Qué sucede si nunca llamas a Socket.EndConnect?
- 27. ¿Qué sucede si asigna un valor a $ _REQUEST?
- 28. Lo que sucede a un manejador de archivo abierto en Linux si el archivo en punta se mueve, borrar
- 29. java.net.SocketException: Demasiados archivos abiertos
- 30. ¿Qué sucede si configuro HttpGetEnabled = false
Muchas gracias Señor :) ¡Esta publicación tuya de hecho me ha ayudado mucho! –