Veľkosť adresárov nestojí za námahu

Toto je úplne zbytočný, v praktickej aplikácii nepotrebný, ale vtipný malý príspevok o adresároch v systémoch *nix. Je piatok.

Počas pohovorov sa často vynárajú nudné otázky o inodoch, súboroch všetkého, na ktoré málokto vie rozumne odpovedať. Ale ak sa pohrabete trochu hlbšie, môžete nájsť zaujímavé veci.

Aby ste pochopili príspevok, pár bodov:

  • všetko je súbor. adresár je tiež súbor
  • inode ukladá metadáta zo súboru, ale názov súboru tam nie je uložený
  • názov súboru je uložený v údajoch adresára
  • Veľkosť adresára, rovnaká ako v ls a štandardne 4 kB, závisí od počtu súborov v adresári a dĺžky ich názvov
  • Je zrejmé, že čím viac súborov, tým väčšia veľkosť adresára

Teraz je tu zaujímavá časť: vytvoríme adresár s miliónom súborov, skontrolujeme veľkosť adresára a potom vymažeme všetky súbory a pozrieme sa na veľkosť adresára.

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

Ako vidíte, veľkosť adresára sa nezmenila, aj keď by sa zdalo :)

Veľkosť adresára (bez jeho vymazania) môžete opraviť iba pomocou fsck (a voľby -D) v nepripojenom stave.

Ale keď som išiel hľadať, prečo to tak je, ukázalo sa, že pred 10 rokmi už takéto správanie bolo diskutované v lkml. A podľa vývojárov oprava jednoducho nestojí za námahu.

Zdroj: hab.com

Pridať komentár