Różnica między rozmiarem bloku a rozmiarem klastra


20

Mam pytanie dotyczące rozmiaru bloku i rozmiaru klastra. W odniesieniu do tego, co o tym przeczytałem, zakładam, co następuje:

  • Rozmiar bloku to fizyczny rozmiar bloku, w większości 512 bajtów. Nie ma sposobu, aby to zmienić.
  • Rozmiar klastra to minimalny rozmiar bloku odczytywanego i zapisywalnego przez system operacyjny. Jeśli utworzę nowy system plików, np. Ext3, mogę określić ten minimalny rozmiar bloku za pomocą przełącznika -b. Prawie wszystkie programy, takie jak dumpe2fs, mke2fs używają rozmiaru bloku jako nazwy rozmiaru klastra.

Jeśli mam następujące dane wyjściowe:

$ stat test
File: `test'
Size: 13            Blocks: 4          IO Block: 2048   regular file
Device: 700h/1792d  Inode: 15          Links: 1

Czy to prawda, że ​​rozmiar jest rzeczywistą przestrzenią w bajtach, bloki są fizycznie używanymi blokami (512 bajtów na każdy), a blok IO odnosi się do rozmiaru bloku określonego podczas tworzenia FS?

Odpowiedzi:


26

Myślę, że jesteś zdezorientowany, być może dlatego, że przeczytałeś kilka dokumentów, które używają innej terminologii. Terminy takie jak „rozmiar bloku” i „rozmiar klastra” nie mają uniwersalnego znaczenia, nawet w kontekście literatury systemu plików.

Systemy plików

W przypadku ext2 lub ext3 sytuacja jest stosunkowo prosta: każdy plik zajmuje pewną liczbę bloków . Wszystkie bloki w danym systemie plików mają ten sam rozmiar, zwykle jeden z 1024, 2048 lub 4096 bajtów. Plik¹, którego rozmiar zawiera się między N blokami plus jeden bajt i N + 1 bloków, zajmuje N + 1 bloków. Ten rozmiar bloku określa się za pomocą mke2fs -b. Nie ma osobnego pojęcia klastrów.

System plików FAT używany w szczególności w MS-DOS i we wczesnych wersjach systemu Windows ma podobnie prosty przydział miejsca. Co ext2 wywołuje bloki, FAT wywołuje klastry ; koncepcja jest taka sama.

Niektóre systemy plików mają bardziej wyrafinowany schemat alokacji: mają bloki o stałym rozmiarze, ale mogą używać tego samego bloku do przechowywania ostatnich kilku bajtów więcej niż jednego pliku. Jest to znane jako subalokacja bloków ; Reiserfs i Btrfs robią to, ale nie ext3, a nawet ext4.

Narzędzia

Narzędzia uniksowe często używają słowa „blok”, aby oznaczać jednostkę o dowolnym rozmiarze, zwykle 512 bajtów lub 1kB. To użycie nie jest powiązane z żadnym konkretnym systemem plików ani sprzętem dyskowym. Historycznie blok 512B powstał, ponieważ dyski i systemy plików w tym czasie często działały w porcjach 512B, ale współczesne użycie jest po prostu arbitralne. Tradycyjne narzędzia i interfejsy uniksowe nadal używają czasami bloków 512B, choć obecnie preferowane są bloki 1kB . Musisz sprawdzić dokumentację każdego narzędzia, aby dowiedzieć się, jakiego rozmiaru bloku używa (niektóre mają przełącznik, np. du -BLub df -Bw systemie Linux).

W GNU / Linux statużyteczności, blocksliczba jest liczbą bloków 512B używanych przez plik. Liczba IO Blockta jest preferowanym rozmiarem pliku wejściowego / wyjściowego, co w zasadzie nie jest powiązane, ale zwykle wskazuje na wielkość bloku podstawowego systemu plików (lub rozmiar klastra, jeśli tak chcesz go nazwać). Tutaj masz 13-bajtowy plik, który zajmuje jeden blok w systemie plików ext3 o rozmiarze bloku 2048; dlatego plik zajmuje 4 512-bajtowe jednostki (zwane „blokami” przez stat).

Dyski

Większość dysków ma interfejs, który pokazuje dysk jako wiązkę sektorów . Dysk może zapisywać lub odczytywać cały sektor, a nie pojedyncze bity lub bajty. Większość dysków twardych ma sektory 512-bajtowe, chociaż dyski sektorowe 4kB zaczęły pojawiać się kilka lat temu.

Rozmiar sektora dyskowego nie jest bezpośrednio związany z rozmiarem bloku systemu plików, ale lepsza wydajność ma blok zawierający całą liczbę sektorów.

¹ Wyjątek: rzadkie pliki oszczędzają miejsce.


2
Dzięki za wyjaśnienie. Przybyłem tutaj z powodu takiego zamieszania spowodowanego przez narzędzie ext2fsd dla systemu Windows. Uruchamiają się opcje wiersza poleceń: ´Użycie: mke2fs [-c | -l nazwa pliku] [-b rozmiar bloku] [-C rozmiar klastra] ... Widzisz, zarówno rozmiar bloku, jak i klastra ...
Bernhard Hiller

Chciałbym również wiedzieć, jaka jest różnica między wielkością bloku mke2fs a wielkością klastra. Czy ktoś wie ?
X.LINK

1
@ X.LINK Wyjaśniono to na stronie podręcznika. Rozmiar klastra jest używany przez funkcję bigalloc , która, jeśli dobrze rozumiem, przyspiesza dostęp do dużych plików kosztem większej ilości zmarnowanego miejsca.
Gilles „SO- przestań być zły”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.