Dimensiunea directoarelor nu merită efortul nostru

Acesta este un post complet inutil, inutil în aplicații practice, dar amuzant despre directoarele din sistemele *nix. E vineri.

În timpul interviurilor, apar adesea întrebări plictisitoare despre inoduri, totul este fișiere, la care puțini oameni pot răspunde cu minte. Dar dacă sapi puțin mai adânc, poți găsi lucruri interesante.

Pentru a înțelege postarea, câteva puncte:

  • totul este un dosar. directorul este, de asemenea, un fișier
  • inodul stochează metadatele din fișier, dar numele fișierului nu este stocat acolo
  • numele fișierului este stocat în datele directorului
  • Mărimea directorului, aceeași care este afișată în ls și este implicit de 4Kb, depinde de numărul de fișiere din director și de lungimea numelor acestora
  • Evident, cu cât mai multe fișiere, cu atât dimensiunea directorului este mai mare

Și acum lucrul interesant: creăm un director cu un milion de fișiere, verificăm dimensiunea directorului, apoi ștergem toate fișierele și ne uităm la dimensiunea directorului.

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

După cum puteți vedea, dimensiunea directorului nu s-a schimbat, deși s-ar părea :)

Puteți remedia dimensiunea unui director (fără a-l șterge) doar folosind fsck (și opțiunea -D) într-o stare nemontată.

Dar când m-am dus să caut de ce a fost așa, sa dovedit că în urmă cu 10 ani un astfel de comportament a avut deja discutat în lkml. Și, potrivit dezvoltatorilor, reparația pur și simplu nu merită efortul.

Sursa: www.habr.com

Adauga un comentariu