Dimensiunea directorilor nu merită eforturile noastre

Acesta este un post mic amuzant despre directoare în sistemele *nix, complet inutil și fără aplicabilitate practică. E vineri, după toate.

La interviuri, întrebările plictisitoare despre inodes și faptul că totul este fișiere apar frecvent, iar puțini pot oferi un răspuns coerent. Dar dacă săpăm puțin mai adânc, putem descoperi lucruri interesante.

Pentru înțelegerea postului, câteva puncte cheie:

  • totul este fișier. un director este tot un fișier
  • în inode se păstrează metadatele fișierului, dar numele fișierului nu este stocat acolo
  • numele fișierului este stocat în datele directorului
  • dimensiunea directorului, cea care apare în ls și care este implicit 4KB, depinde de numărul de fișiere din director și de lungimea denumirilor lor
  • este evident că, cu cât sunt mai multe fișiere, cu atât dimensiunea directorului este mai mare

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

$ mkdir niceDir && cd niceDir
# în funcție de viteza suportului, următoarea comandă poate dura 2-10 minute
$ 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 se poate observa, dimensiunea directorului nu s-a schimbat, deși părea ciudat 🙂

Să repari dimensiunea directorului (fără a șterge) se poate face doar cu ajutorul fsck (și opțiunea -D) în stare demontată.

Când am început să caut de ce se întâmplă așa, am descoperit că acest comportament era deja cunoscut acum 10 ani am discutat în lkml. Și, potrivit dezvoltatorilor, corectarea nu merita eforturile investite.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster