La taille des répertoires ne vaut pas notre effort

Il s'agit d'un petit article complètement inutile, inutile dans la pratique, mais amusant sur les répertoires dans les systèmes * nix. C'est vendredi.

Au cours des entretiens, des questions ennuyeuses se posent souvent sur les inodes, tout est fichiers, auxquelles peu de personnes peuvent répondre raisonnablement. Mais si vous creusez un peu plus, vous pouvez trouver des choses intéressantes.

Pour comprendre le post, quelques points :

  • tout est un fichier. le répertoire est aussi un fichier
  • l'inode stocke les métadonnées du fichier, 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 dans ls et qui est de 4 Ko par défaut, 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 la chose intéressante : nous créons un répertoire avec un million de fichiers, vérifions la taille du répertoire, puis supprimons tous les fichiers et regardons 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 constater, la taille du répertoire n'a pas changé, même si cela semblerait :)

Vous ne pouvez fixer la taille d'un répertoire (sans le supprimer) qu'en utilisant fsck (et l'option -D) dans un é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à présent. discuté en lkml. Et selon les développeurs, le correctif n’en vaut tout simplement pas la peine.

Source: habr.com

Ajouter un commentaire