La grandeco de la dosierujoj ne valoras nian penon

Ĉi tio estas tute senutila, nenecesa en praktika aplikado, sed amuza afiŝo pri dosierujoj en *nix-sistemoj. Estas vendredo.

Dum intervjuoj ofte aperas enuigaj demandoj pri inodoj, ĉio-estas-dosieroj, kiujn malmultaj homoj povas prudente respondi. Sed se vi fosas iom pli profunde, vi povas trovi interesajn aferojn.

Por kompreni la afiŝon, kelkaj punktoj:

  • ĉio estas dosiero. dosierujo estas ankaŭ dosiero
  • la inodo stokas metadatenojn de la dosiero, sed la dosiernomo ne estas konservita tie
  • la dosiernomo estas konservita en la dosierujo-datumoj
  • La grandeco de la dosierujo, la sama kiu estas montrita en ls kaj estas 4Kb defaŭlte, dependas de la nombro da dosieroj en la dosierujo kaj la longeco de iliaj nomoj
  • Evidente, ju pli da dosieroj, des pli granda estas la dosierujo

Nun jen la interesa parto: ni kreas dosierujon kun miliono da dosieroj, kontrolas la grandecon de la dosierujo, kaj poste forigas ĉiujn dosierojn kaj rigardas la grandecon de la dosierujo.

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

Kiel vi povas vidi, la dosierujo ne ŝanĝiĝis, kvankam ŝajnus :)

Vi povas nur ripari la grandecon de dosierujo (sen forigi ĝin) uzante fsck (kaj la opcion -D) en nemuntita stato.

Sed kiam mi iris serĉi kial ĉi tio estis tiel, montriĝis, ke antaŭ 10 jaroj tia konduto jam havis diskutis en lkml. Kaj laŭ la programistoj, la riparo simple ne valoras la penon.

fonto: www.habr.com

Aldoni komenton