¿Qué determina el tamaño de un directorio?

10

Sé que el tamaño de un directorio en sí es diferente a los tamaños de los archivos que contiene.

Pienso en un directorio como una lista de los directorios y archivos dentro, por lo tanto, el tamaño de un directorio debe estar relacionado con el número de archivos / directorios dentro, con un mínimo de 4096 bytes debido a la restricción de tamaño de bloque.

Pero en mi sistema, tengo muchos directorios bien poblados con 4096 bytes, y algunos directorios que están considerablemente menos poblados y tienen alrededor de 10 megabytes. ¿Me puede explicar por qué sucede esto?

Macond
fuente
1
Para leer más, esto es bastante informativo: askubuntu.com/a/404716/380067
kos
3
No se trata solo del número de entradas en el directorio sino también de la longitud de sus nombres.
kasperd

Respuestas:

13

El sistema de archivos utilizado y el número máximo de entidades en ese directorio en cualquier momento determina el tamaño. Una vez que se agota el tamaño predeterminado reservado para el directorio, se asigna más espacio para el directorio. Sin embargo, cuando el número de entidades disminuye, el espacio asignado no se libera automáticamente. Entonces, si, en un punto, un directorio tiene 10 millones de entidades, permanecería del mismo tamaño si se eliminaran 9,999,999 de ellas. Esto lleva a situaciones interesantes como en esta publicación de Unix y Linux .

$ mkdir foo; touch foo/{1..100000}; stat -c %s foo
2179072
$ rm foo/*; stat -c %s foo
2179072

Esto no necesariamente es válido para otros sistemas de archivos. Los ext{2,3,4}sistemas de archivos están afectados. NTFS es, en menor medida. tmpfsy btrfs no lo son. ZFS es bastante conservador, obtuve una salida 2para el segundo statcomando.

Relacionado:

muru
fuente
¡Excelente! Todavía me preguntaba cómo podría ser eso.
kos
XFS no está afectado! debería agregar
Edward Torvalds