Sous Linux, (peut-être en fonction de la taille du bloc du système de fichiers), lorsque je crée un répertoire et stat
cela, il renvoie une taille de 4096. Je peux créer des fichiers dans ce répertoire, jusqu'à un certain point, sans augmenter la taille perçue du répertoire (tel que rapporté par stat
).
À un moment donné, alors que le répertoire se remplit de nombreux fichiers, la taille du répertoire augmente (je ne parle pas du contenu du répertoire, je parle des blocs consommés pour représenter le répertoire lui-même). Si des fichiers sont supprimés, la taille du répertoire reste la même.
Voici un petit exemple:
[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
Ensuite, touchez un tas de fichiers:
[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
Supprimez ensuite les fichiers:
[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
Mes questions sont:
- Pourquoi la taille / le nombre de blocs d'un répertoire augmente-t-il de façon monotone?
- Est-ce une fonction du système de fichiers sous-jacent ou du VFS Linux?
- La taille du répertoire peut-elle être réduite sans supprimer et recréer le répertoire?
- Points bonus: pointez-moi sur le code source du noyau où ce comportement est implémenté.