Co decyduje o rozmiarze katalogu?

10

Wiem, że rozmiar samego katalogu różni się od rozmiarów plików w nim zawartych.

Uważam katalog za listę katalogów i plików w nim zawartych, dlatego rozmiar katalogu powinien być powiązany z liczbą plików / katalogów w środku, z minimum 4096 bajtami z powodu ograniczenia rozmiaru bloku.

Ale w moim systemie mam wiele dobrze zapełnionych katalogów z 4096 bajtami, a niektóre katalogi, które są znacznie mniej zapełnione, mają około 10 megabajtów. Czy możesz mi wyjaśnić, dlaczego tak się dzieje?

Macond
źródło
1
Do dalszego czytania jest to dość pouczające: askubuntu.com/a/404716/380067
kos
3
Nie chodzi tylko o liczbę wpisów w katalogu, ale także o długość ich nazw.
kasperd

Odpowiedzi:

13

Użyty system plików i maksymalna liczba jednostek w tym katalogu w dowolnym momencie określa rozmiar. Po wyczerpaniu domyślnego rozmiaru zarezerwowanego dla katalogu, przydzielane jest więcej miejsca dla katalogu. Jednak gdy liczba jednostek spadnie, przydzielone miejsce nie zostanie automatycznie zwolnione. Tak więc, jeśli w pewnym momencie katalog ma 10 milionów jednostek, pozostanie ten sam rozmiar, jeśli 9 999 999 z nich zostanie usuniętych. Prowadzi to do interesujących sytuacji, takich jak ten post w systemie Unix i Linux .

$ mkdir foo; touch foo/{1..100000}; stat -c %s foo
2179072
$ rm foo/*; stat -c %s foo
2179072

Niekoniecznie dotyczy to innych systemów plików. Te ext{2,3,4}są dotknięte systemy plików. NTFS jest w mniejszym stopniu. tmpfsi btrfs nie są. ZFS jest raczej konserwatywny, mam wyjście 2dla drugiego statpolecenia.

Związane z:

muru
źródło
Świetny! Nadal zastanawiałem się, jak to może być.
Kos
Nie dotyczy to XFS! powinien dodać
Edward Torvalds,