En Linux, (tal vez como una función del tamaño de bloque del sistema de archivos), cuando creo un directorio y stat
éste devuelve un tamaño de 4096. Puedo crear archivos en este directorio, hasta cierto punto, sin aumentar el tamaño percibido del directorio (según lo informado por stat
).
En algún momento, a medida que el directorio se llena con muchos archivos, el tamaño del directorio aumenta (no estoy hablando del contenido del directorio, estoy hablando de los bloques consumidos para representar el directorio en sí). Si se eliminan los archivos, el tamaño del directorio sigue siendo el mismo.
Aquí hay un ejemplo rápido:
[root@uxlabtest:/]$ mkdir test
[root@uxlabtest:/]$ stat test
File: `test'
Size: 4096 Blocks: 8 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:04.000000000 -0400
Change: 2011-07-26 14:06:04.000000000 -0400
Luego toca un montón de archivos:
[root@uxlabtest:/]$ for i in `seq 1 10000`; do touch /test/$i; done
[root@uxlabtest:/]$ stat test
File: `test'
Size: 155648 Blocks: 312 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:06:04.000000000 -0400
Modify: 2011-07-26 14:06:56.000000000 -0400
Change: 2011-07-26 14:06:56.000000000 -0400
Luego borre los archivos:
[root@uxlabtest:/]$ rm -rf /test/*
[root@uxlabtest:/]$ stat test
File: `test'
Size: 155648 Blocks: 312 IO Block: 4096 directory
Device: fd00h/64768d Inode: 1396685 Links: 2
Access: (0755/drwxr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2011-07-26 14:07:11.000000000 -0400
Modify: 2011-07-26 14:07:12.000000000 -0400
Change: 2011-07-26 14:07:12.000000000 -0400
Mis preguntas son:
- ¿Por qué el tamaño / bloque de conteo de un directorio aumenta monotónicamente?
- ¿Es esta una función del sistema de archivos subyacente o de Linux VFS?
- ¿Se puede reducir el tamaño del directorio sin eliminar y volver a crear el directorio?
- Puntos de bonificación: apunte al código fuente del núcleo donde se implementa este comportamiento.