Velikost adresářů nestojí za naše úsilí

Toto je naprosto zbytečný, v praxi neužitečný, ale zábavný malý příspěvek o adresářích v *nix systémech. Je přece pátek.

Na pohovorech se často objevují nudné otázky o inodech, všechno-jsou-soubory, na které málo kdo dokáže smysluplně odpovědět. Ale pokud se podíváte trochu hlouběji, můžete najít zajímavé věci.

Pro pochopení příspěvku zde je několik tezí:

  • všechno je soubor. adresář je také soubor
  • v inodu jsou uloženy metaúdaje souboru, ale název souboru tam není uložen
  • název souboru je uložen v datech adresáře
  • velikost adresáře, ta, která se zobrazuje v ls a je ve výchozím nastavení 4KB, 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

A teď zajímavé: vytvořte adresář s milionem souborů, zkontrolujte velikost adresáře a pak vymažte všechny soubory a podívejte se na velikost adresáře.

$ mkdir niceDir && cd niceDir
# v závislosti na rychlosti média může následující příkaz zabrat 2-10 minut
$ 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 můžete vidět, velikost adresáře se nezměnila, i když by se to mohlo zdát 🙂

Opravit velikost adresáře (bez smazání) lze pouze pomocí fsck (a volby -D) v odmontovaném stavu.

A když jsem šel hledat, proč to tak je, ukázalo se, že před 10 lety takové chování už existovalo diskutovali v lkml. A podle názoru vývojářů oprava prostě nestojí za vložené úsilí.

Zdroj: habr.com

Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Koupit spolehlivý hosting pro webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster