Dlaczego każdy katalog ma rozmiar 4096 bajtów (4 K)?

33

Jak mówi podmiot; Chcę wiedzieć, dlaczego każdy katalog ma rozmiar równy 4K, nawet jeśli zawierają pliki o rozmiarach większych niż 4K.

Proszę spojrzeć na następujące: -

$ ls -lh
total 2.0M
drwxr-xr-x 4 ankit ankit 4.0K Sep 11 07:28 Desktop

$ ls -lrh Desktop/
-rw-rw-r-- 1 ankit ankit 9.1M Aug 4 11:15 sophosthreatsaurusaz.pdf
-rw------- 1 ankit ankit 107K Dec 27 2010 KP 3 0.pdf
drwxrwsr-x 9 ankit ankit 4.0K Sep 10 19:26 eclipse

PS: Mam świadomość du -shnarzędzia wiersza poleceń.

Edycja: Zakładam, że katalog jest pojemnikiem na pliki.

Ankit
źródło
Są to metadane katalogu
Tachyons

Odpowiedzi:

34
  • Nie wymagając zbyt technicznej wiedzy, pomyśl o pozycji katalogu jako po prostu „linku” do listy plików, które „katalog” zawiera.
  • Następnie, podobnie jak w przypadku wszystkich elementów, lspokazuje rozmiar tego łącza , a nie całkowitą przestrzeń zajmowaną przez zawartość katalogu.
  • Minimalna wielkość, jaką musi zajmować pozycja pliku / katalogu / łącza, to jeden blok, który zwykle wynosi 4096 bajtów / 4K w większości systemów plików ext3 / 4.
ish
źródło
7
Mówisz, że „Minimalny rozmiar pliku / pozycji katalogu / łącza musi wynosić jeden blok”, ale jestem pewien, że widziałem rozmiary plików mniejsze niż 4K.
Lakshay Garg,
1
@LakshayGarg, chociaż plik może mieć mniej niż 4K, spowoduje to tak zwaną „fragmentację wewnętrzną”, w której do przechowywania małego pliku użyto zaledwie kilku bajtów bloku.
phyloflash
@ phyloflash niektóre systemy plików (np. NTFS) przechowują małe pliki w samych wpisach plików (w przypadku NTFS jest to wpis MFT). W ten sposób ich zawartość zajmuje zerowe bloki alokacji, a fragmentacja wewnętrzna jest zmniejszona.
Ruslan
26

Aby to zrozumieć, lepiej mieć podstawową wiedzę na temat następujących zagadnień (system plików):

  • i-węzeł (zawiera atrybuty pliku, metadane pliku, strukturę wskaźnika)
  • plik (może być uważany za tabelę z 2 kolumnami, nazwą pliku i jego i-węzłem, i-węzeł wskazuje na surowe bloki danych na urządzeniu blokowym)
  • katalog (tylko specjalny plik, pojemnik na inne nazwy plików. Zawiera tablicę nazw plików i numerów i-węzłów dla każdej nazwy pliku. Opisuje także relacje między rodzicem a dzieckiem).
  • link symboliczny VS link twardy
  • dentry (wpisy katalogu)
  • ...

W typowym ext4systemie plików (z którego korzysta większość ludzi) domyślny inoderozmiar to 256 bajtów, rozmiar bloku to 4096 bajtów.

Katalog jest tylko specjalnym plikiem zawierającym tablicę nazw plików i numerów i-węzłów. Kiedy katalog został utworzony, system plików przydzielił 1 i-węzeł do katalogu z „nazwą pliku” (nazwa katalogu w rzeczywistości). I-węzeł wskazuje pojedynczy blok danych (minimalny narzut), który wynosi 4096 bajtów. Dlatego widzisz 4096 / 4.0K podczas używania ls.

Możesz uzyskać szczegółowe informacje, używając tune2fs& dumpe2fs.

Przykład

root@ubuntu:~# tune2fs -l /dev/ubuntu/root 
tune2fs 1.42 (29-Nov-2011)
Filesystem volume name:   <none>
Last mounted on:          /
Filesystem UUID:          2fca4cbb-22f1-4328-ab13-cacedb360930
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      has_journal ext_attr resize_inode dir_index filetype needs_recovery extent flex_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              967680
Block count:              3931136
Reserved block count:     0
Free blocks:              2537341
Free inodes:              517736
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      416
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8064
Inode blocks per group:   504
RAID stride:              35637
Flex block group size:    16
Filesystem created:       Thu Mar 15 14:31:04 2012
Last mount time:          Sat Oct 20 20:28:04 2012
Last write time:          Sat Oct 20 20:23:32 2012
Mount count:              1
Maximum mount count:      -1
Last checked:             Sat Oct 20 20:22:57 2012
Check interval:           0 (<none>)
Lifetime writes:          54 GB
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:           256
Required extra isize:     28
Desired extra isize:      28
Journal inode:            8
First orphan inode:       272350
Default directory hash:   half_md4
Directory Hash Seed:      d582ad79-75a0-4964-9a48-33ddba04df5c
Journal backup:           inode blocks
Terry Wang
źródło
7

Jeśli plik zawiera jakiekolwiek dane (nawet jeden bajt), zajmie jeden blok na dysku (obecnie jest to zwykle 4k). Jeden blok nie może być współdzielony między plikami. Oznacza to, że przestrzeń tego całego bloku nie będzie dostępna dla innych plików, dlatego jest uważana za „wykorzystaną”.

Źródło

ThiagoPonte
źródło