La taille du répertoire ne vaut pas la peine

Ceci est complètement inutile, inutile dans l'utilisation pratique, mais un petit article amusant sur les répertoires dans les systèmes * nix. Vendredi, c'est pareil.

Lors des entretiens, des questions ennuyeuses sur les inodes se glissent souvent dans des fichiers tout-en-un, auxquels peu de gens peuvent répondre sainement. Mais si vous creusez un peu plus profondément, vous pouvez trouver des choses curieuses.

Pour comprendre le post en quelques points:

  • tout est un fichier. répertoire est également un fichier
  • une métadonnée inode inode du fichier est stockée, mais le nom du fichier n'y est pas stocké
  • le nom du fichier est stocké dans les données du répertoire
  • la taille du répertoire, la même que celle affichée en ls et par défaut à 4 Ko, dépend du nombre de fichiers dans le répertoire et de la longueur de leurs noms
  • évidemment, plus il y a de fichiers, plus la taille du répertoire est grande

Et maintenant pour la partie intéressante: créez un répertoire avec un million de fichiers, vérifiez la taille du répertoire, puis essuyez tous les fichiers et regardez la taille du répertoire.

$ mkdir niceDir && cd niceDir #     ,     2-10  $ for ((i=1;i<133700;i++)); do touch long_long_looong_man_sakeru_$i ; done $ ls -lhd . drwxr-xr-x 2 user user 8.1M Aug 2 13:37 . $ find . -type f -delete $ ls -l total 0 $ ls -lhd . drwxr-xr-x 2 user user 8.1M Aug 2 13:37 . 

Comme vous pouvez le voir, la taille du répertoire n'a pas changé, même si cela semble :)

Vous ne pouvez fixer la taille du répertoire (sans supprimer) qu'avec fsck (et l'option -D) à l'état non monté.

Mais quand je suis allé chercher pourquoi il en était ainsi, il s'est avéré qu'il y a 10 ans ce comportement était déjà discuté dans lkml. Et selon les développeurs, le correctif ne vaut tout simplement pas l'effort.

Source: https://habr.com/ru/post/fr462295/


All Articles