Rozmiar katalogów nie jest wart naszych wysiłków

To całkowicie bezużyteczny, nieprzydatny w praktycznym zastosowaniu, ale zabawny post o katalogach w systemach *nix. W końcu piątek.

Na rozmowach kwalifikacyjnych często pojawiają się nudne pytania o inody, wszystko-jest-plikami, na które niewiele osób potrafi sensownie odpowiedzieć. Ale jeśli trochę zgłębić temat, można znaleźć ciekawe rzeczy.

Aby zrozumieć post, kilka tez:

  • wszystko jest plikiem. katalog to też plik
  • w inodzie przechowywane są metadane pliku, ale nazwa pliku nie jest tam przechowywana
  • nazwa pliku jest przechowywana w danych katalogu
  • rozmiar katalogu, ten, który pokazuje ls i domyślnie wynosi 4KB, zależy od liczby plików w katalogu i długości ich nazw
  • oczywiście, że im więcej plików, tym większy rozmiar katalogu

A teraz coś interesującego: tworzymy katalog z milionem plików, sprawdzamy rozmiar katalogu, a potem usuwamy wszystkie pliki i patrzymy na rozmiar katalogu.

$ mkdir niceDir && cd niceDir
# w zależności od prędkości nośnika, następna komenda może zająć 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 można zauważyć, rozmiar katalogu się nie zmienił, chociaż wydawałoby się 🙂

Naprawić rozmiar katalogu (bez usuwania) można tylko za pomocą fsck (i opcji -D) w stanie odmontowanym.

A kiedy zacząłem szukać, dlaczego tak się dzieje, okazało się, że 10 lat temu takie zachowanie już dyskutowaliśmy było w lkml. A zdaniem deweloperów naprawa nie jest warta poświęcenia wysiłku.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster