Jestem pewien, że plik katalogu ma znacznie mniej informacji niż 4096 bajtów. Wiem, że rozmiar sektora wynosi 4096 bajtów. Ale istnieją normalne pliki mniejsze niż to.
Dlaczego Unix rezerwuje 4096 bajtów dla każdego folderu?
Jest to początkowy rozmiar niezbędny do przechowywania metadanych dotyczących plików zawartych w tym katalogu (w tym nazw). Początkowy przydział jest równy rozmiarowi jednego sektora, ale w razie potrzeby może wzrosnąć powyżej tego. Raz przydzielone miejsce nie jest zwalniane, jeśli pliki są usuwane, aby zmniejszyć fragmentację.
Na przykład:
$ mkdir testdir
$ cd testdir
$ ls -ld .
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:28 ./
$ for ((i=0; i<1000; i++)); do touch some_longish_file_name_$i; done
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ rm some_longish_file_name_*
$ ls -ld .
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 ./
$ cd ..
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 36864 2007-12-03 20:29 testdir/
$ rmdir testdir ; mkdir testdir
$ ls -ld testdir
drwxr-xr-x 2 matthew matthew 4096 2007-12-03 20:29 testdir/
Czasami 4096 bajtów jest najmniejszą jednostką alokacji dla niektórych systemów plików. Właśnie dlatego katalog ma 4096.
To samo dotyczy plików. Chociaż niektóre pliki mogą zgłaszać mniej niż 4096, w rzeczywistości zajmują co najmniej 4096 miejsca na dysku.
źródło
4096 jest zarezerwowany w celu zmniejszenia fragmentacji, ponieważ często rzeczywisty rozmiar zawartych metadanych zmienia się w zależności od zawartości katalogu. Jeśli stale rośnie i kurczy się (powiedzmy, że zawiera pliki dziennika lub zawartość dynamiczną) z czasem może to zaszkodzić wydajności. Prawdopodobnie nie zdarzyło się to w przypadku jednego folderu, ale w całym systemie plików byłoby to szybko dodawane.
źródło
To zależy od systemu plików. Na ext2 / 3/4 jest to „4096. Na reiserfs może to być 9608 (mój
$HOME
) 1032 (/tmp
) lub 48 (niektóre reż/tmp
.).Domyślnie w bloku ext2 / 3/4 jest 4096 - i plik nie może zająć mniej. Jeśli plik jest mniejszy, to i tak zajmuje cały blok. Ponieważ nie ma sensu pytać o logiczny rozmiar katalogu, a ta informacja i tak prawdopodobnie nie znajduje się na dysku i musi coś zgłosić, raportując rozmiar bloku razy liczbę wykonanych bloków, tj. Zajmowaną przestrzeń fizyczną.
źródło
actual
rozmiar pliku.\0
jest to charakter prawny w plikach binarnych. PS. Możliwe jest tworzenie FS, które go nie przechowują - ale po prostu nie wysyłają rodzinnie (i prawdopodobnie nie są to żadne inne popularne).