[gull] Taille d'un répertoire vide

Daniel Cordey dc at mjt.ch
Wed Jan 30 15:15:12 CET 2008


On Wednesday 30 January 2008, Philippe Ney wrote:

> Après avoir effacer tous les fichiers, la taille du répertoire est
> encore de 3 Mo.
>
> Un touch du répertoire ou du . qu'il contient ou la création d'un
> fichier vide à l'intérieur du répertoire n'a aucun effet.
>
> Y a-t-il un moyen de libérer les blocks inutilisés et faire revenir
> la taille du répertoire à 4k ?

Tout-a-fait normal !

Il faut revenir a la maniere dont le FS (file systeme) est organise ! Un 
directory n'est rien d'autre qu'un "fichier" de data, contenant les 
information necessaire a l'acces du contenu du directory. DOnc, lors de la 
creation d'un directory vide, un premier block de 4k est alloue a ce 
directory pour y stocker ses infos. ceci peut se voir en faisant :

mkdir mydir
ls -ld mydir

Puis, a mesure que le directory se remplit, les entrees viennent occuper de la 
place dans le block de 'data'. A un moment donne, celui-ci est plein et 
engendre l'attribution d'un autre block de 4k "au" directory. ET ainsi de 
suite. Raison pour laquelle, on peut determiner aproximativement le nombre 
maximum de "contenu" d'un directory par l'examen de sa taille. Or, le FS 
attribue des blocks lorsqu'un fichier s'etend en taille, mais ne libere pas 
ceux-ci sans une commande explicite de "troncation". Ce genre de commande 
n'existe pas pour les directories... Il est donc necessaire de "re-creer" le 
directory pour en reduire la taille. On peut donc envisager :

mkdir newdir
mv currentdir/* newdir
rmdir currentdir
mv newdir currentdir

Il n'est bien sur pas necessaire de passer par la phase de deplacement des 
fichiers d'un directory sui celui-ci est deja vide.

dc






More information about the gull mailing list