Velikost adresářů nám nestojí za námahu

Toto je zcela zbytečný, v praktické aplikaci nepotřebný, ale vtipný malý příspěvek o adresářích v systémech *nix. Je pátek.

Během rozhovorů často vyvstávají nudné otázky týkající se inodů, všechno-je-souborů, na které málokdo dokáže rozumně odpovědět. Ale když se ponoříte trochu hlouběji, můžete najít zajímavé věci.

Pro pochopení příspěvku pár bodů:

  • vše je soubor. adresář je také soubor
  • inode ukládá metadata ze souboru, ale název souboru tam není uložen
  • název souboru je uložen v datech adresáře
  • Velikost adresáře, stejná jako v ls a ve výchozím nastavení je 4 kB, závisí na počtu souborů v adresáři a délce jejich názvů.
  • Je zřejmé, že čím více souborů, tím větší velikost adresáře

Nyní je tu ta zajímavá část: vytvoříme adresář s milionem souborů, zkontrolujeme velikost adresáře a poté smažeme všechny soubory a podíváme se na velikost adresáře.

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

Jak vidíte, velikost adresáře se nezměnila, i když by se zdálo :)

Velikost adresáře (aniž byste jej smazali) můžete opravit pouze pomocí fsck (a volby -D) v nepřipojeném stavu.

Ale když jsem šel hledat, proč tomu tak je, ukázalo se, že před 10 lety už takové chování bylo diskutováno v lkml. A podle vývojářů oprava prostě nestojí za námahu.

Zdroj: www.habr.com

Přidat komentář