Su Linux, (forse in funzione della dimensione del blocco del filesystem), quando creo una directory e stat
restituisce una dimensione di 4096. Posso creare file in questa directory, fino a un certo punto, senza aumentare la dimensione percepita del directory (come riportato da stat
).
Ad un certo punto, mentre la directory si riempie di molti file, le dimensioni della directory si gonfiano (non sto parlando del contenuto della directory, sto parlando dei blocchi consumati per rappresentare la directory stessa). Se i file vengono eliminati, la dimensione della directory rimane la stessa.
Ecco un breve esempio:
[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
Quindi tocca un mucchio di file:
[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
Quindi eliminare i file:
[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
Le mie domande sono:
- Perché la dimensione / il conteggio dei blocchi di una directory aumenta monotonicamente?
- È una funzione del file system sottostante o del VFS di Linux?
- Le dimensioni della directory possono mai essere ridotte senza eliminare e ricreare la directory?
- Punti bonus: indicami il codice sorgente del kernel in cui è implementato questo comportamento.