Rozmiar katalogów nie jest wart naszego wysiłku

Jest to całkowicie bezużyteczny, niepotrzebny w praktycznym zastosowaniu, ale zabawny post o katalogach w systemach *nix. Jest piątek.

Podczas rozmów kwalifikacyjnych często pojawiają się nudne pytania dotyczące i-węzłów, „wszystko jest plikami”, na które niewiele osób jest w stanie odpowiedzieć przy zdrowych zmysłach. Ale jeśli kopiesz trochę głębiej, możesz znaleźć interesujące rzeczy.

Aby zrozumieć post, kilka punktów:

  • wszystko jest plikiem. katalog jest także plikiem
  • i-węzeł przechowuje metadane z pliku, ale nazwa pliku nie jest tam przechowywana
  • nazwa pliku jest przechowywana w danych katalogu
  • Rozmiar katalogu, ten sam, który jest pokazywany w ls i domyślnie wynosi 4Kb, zależy od liczby plików w katalogu i długości ich nazw
  • Oczywiście im więcej plików, tym większy rozmiar katalogu

A teraz interesująca część: tworzymy katalog zawierający milion plików, sprawdzamy rozmiar katalogu, a następnie usuwamy wszystkie pliki i sprawdzamy rozmiar katalogu.

$ 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 widać rozmiar katalogu się nie zmienił, choć mogłoby się wydawać :)

Rozmiar katalogu (bez jego usuwania) można naprawić jedynie za pomocą polecenia fsck (i opcji -D) w stanie niezamontowanym.

Kiedy jednak poszedłem szukać przyczyny takiego stanu rzeczy, okazało się, że 10 lat temu już takie zachowanie miało miejsce omówione w lkml. Według twórców poprawka po prostu nie jest warta wysiłku.

Źródło: www.habr.com

Dodaj komentarz