
Tengo un sistema de archivos ext4 en la computadora de mi trabajo y encontré un directorio que ocupa >1 MB de espacio. Hay 7 entradas en el directorio. El directorio nunca ha contenido más de 20 entradas.
¿Que esta pasando aqui? El directorio no me ha dado ningún problema... todavía. ¿Deberia estar preocupado?
Hasta donde yo sé, no he configurado ninguna ACL ni extensiones en el volumen. Cuando lo creé utilicé el tamaño de bloque predeterminado de 4096.
=[3 dc@work ~/documents/work/foo ]= $ ls -lat -r
[...]
drwxr-xr-x 2 dchurch users 4096 Dec 23 11:53 _old/
drwxr-xr-x 5 dchurch users 4096 Dec 30 17:43 ./
drwxr-xr-x 3 dchurch users 1032192 Jan 2 08:51 account_import/
drwxr-xr-x 14 dchurch users 4096 Jan 2 08:54 ../
=[3 dc@work ~/documents/work/foo ]= $ ls -la account_import/
total 5500
drwxr-xr-x 3 dchurch users 1032192 Jan 2 08:51 ./
drwxr-xr-x 5 dchurch users 4096 Dec 30 17:43 ../
drwxr-xr-x 2 dchurch users 4096 Jan 2 08:54 _first/
-rw-r--r-- 1 dchurch users 804852 Dec 17 15:37 ca.csv
-rw-r--r-- 1 dchurch users 3495 Dec 17 16:14 slurp.php
-rw-r--r-- 1 dchurch users 3707 Dec 17 16:13 slurp.php~
-rw-r--r-- 1 dchurch users 3769577 Dec 17 15:37 us.csv
=[3 dc@work ~/documents/work/foo ]= $ stat account_import
File: 'account_import'
Size: 1032192 Blocks: 2024 IO Block: 4096 directory
Device: 804h/2052d Inode: 4458105 Links: 3
Access: (0755/drwxr-xr-x) Uid: ( 1000/ dc) Gid: ( 100/ users)
Access: 2015-01-05 04:40:11.629350078 -0600
Modify: 2015-01-02 08:51:06.024793685 -0600
Change: 2015-01-02 08:51:06.024793685 -0600
Birth: -
Respuesta1
4096B es solo el tamaño inicial del directorio, igual a un sector. Sin embargo, si la cantidad de datos que se almacenarán (metadatos, que incluye nombres de archivos) crece, también lo hará el tamaño del directorio, sin que vuelva a bajar para reducir los problemas de fragmentación del disco:
$ mkdir testdir
$ cd testdir
$ ls -lhd .
drwxrwxr-x 2 me me 4.0K Jan 5 18:06 .
$ for ((i=0; i<1000; i++)); do touch this_is_a_long_file_name_$i; done
$ ls -lhd .
drwxrwxr-x 2 me me 64K Jan 5 18:08 .
$ rm this*
$ ls -lhd .
drwxrwxr-x 2 me me 64K Jan 5 18:09 .
EDITAR: este es el mismo experimento para reiserfs:
$ mkdir testdir
$ cd testdir
$ ls -lhd .
drwxr-xr-x 2 me me 48 gen 5 18:54 .
$ for ((i=0; i<1000; i++)); do touch this_is_a_really_long_file_name_$i; done
$ !ls
ls -lhd .
drwxr-xr-x 2 me me 55K gen 5 18:55 .
$ rm this*
$ !ls
ls -lhd .
drwxr-xr-x 2 me me 48 gen 5 18:55 .
Y esto es para xfs:
$ mkdir testdir
$ cd testdir
$ ls -lhd .
drwxr-xr-x 2 me me 6 gen 5 19:00 .
$ for ((i=0; i<1000; i++)); do touch this_is_a_really_long_file_name_$i; done
$ ls -lhd .
drwxr-xr-x 2 me me 48K gen 5 19:01 .
$ rm this*
$ !ls
ls -lhd .
drwxr-xr-x 2 me me 6 gen 5 19:01 .
Es obvio que tampocoreiserfsni a xfs* le importa tanto la fragmentación del disco, ya que el tamaño del directorio, al eliminar numerosos archivos, vuelve a su valor original.