La mida dels directoris no val la pena el nostre esforç

Aquesta és una petita entrada completament inútil, innecessària en l'aplicació pràctica, però divertida sobre directoris en sistemes *nix. És divendres.

Durant les entrevistes, sovint sorgeixen preguntes avorrides sobre inodes, tot-és-arxius, que poca gent pot respondre amb seny. Però si aprofundeixes una mica més, pots trobar coses interessants.

Per entendre el post, uns quants punts:

  • tot és un fitxer. directori també és un fitxer
  • l'inode emmagatzema metadades del fitxer, però el nom del fitxer no s'hi guarda
  • el nom del fitxer s'emmagatzema a les dades del directori
  • La mida del directori, el mateix que es mostra en ls i és de 4Kb per defecte, depèn del nombre de fitxers del directori i de la longitud dels seus noms.
  • Òbviament, com més fitxers, més gran serà la mida del directori

Ara aquí hi ha la part interessant: creem un directori amb un milió de fitxers, comprovem la mida del directori i després suprimim tots els fitxers i mirem la mida del directori.

$ 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 .

Com podeu veure, la mida del directori no ha canviat, tot i que sembla :)

Només podeu arreglar la mida d'un directori (sense suprimir-lo) mitjançant fsck (i l'opció -D) en estat desmuntat.

Però quan vaig anar a buscar per què era així, va resultar que fa 10 anys aquest comportament ja ho havia fet discutit en lkml. I segons els desenvolupadors, la solució simplement no val la pena l'esforç.

Font: www.habr.com

Afegeix comentari