Qu'est-ce qui détermine la taille d'un répertoire?

10

Je sais que la taille d'un répertoire lui-même est différente de la taille des fichiers qu'il contient.

Je pense à un répertoire comme une liste des répertoires et fichiers à l'intérieur, donc la taille d'un répertoire doit être liée au nombre de fichiers / répertoires à l'intérieur, avec un minimum de 4096 octets en raison de la contrainte de taille de bloc.

Mais dans mon système, j'ai de nombreux répertoires bien remplis avec 4096 octets, et certains répertoires qui sont considérablement moins peuplés qui sont d'environ 10 mégaoctets. Pouvez-vous m'expliquer pourquoi cela se produit?

Macond
la source
1
Pour plus de lecture, cela est assez informatif: askubuntu.com/a/404716/380067
kos
3
Il ne s'agit pas seulement du nombre d'entrées dans l'annuaire mais aussi de la longueur de leurs noms.
kasperd

Réponses:

13

Le système de fichiers utilisé et le nombre maximal d'entités dans ce répertoire à tout moment déterminent la taille. Une fois que la taille par défaut réservée au répertoire est épuisée, davantage d'espace est alloué au répertoire. Cependant, lorsque le nombre d'entités diminue, l'espace alloué n'est pas automatiquement libéré. Donc, si, à un moment donné, un répertoire compte 10 millions d'entités, il resterait la même taille si 9 999 999 d'entre elles étaient supprimées. Cela conduit à des situations intéressantes comme dans cet article Unix et Linux .

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

Cela ne vaut pas nécessairement pour les autres systèmes de fichiers. Les ext{2,3,4}systèmes de fichiers sont affectés. NTFS l'est, dans une moindre mesure. tmpfset btrfs ne le sont pas. ZFS est plutôt conservateur, j'ai obtenu une sortie de 2pour la deuxième statcommande.

En relation:

muru
la source
Génial! Je me demandais toujours comment cela pouvait être.
kos
XFS n'est pas affecté! devrait ajouter
Edward Torvalds