Do spisu treści



6.3.1 Opis systemu plików EXT2 na dysku.



Spis tresci



System plików Ext2 na dysku składa się z wielu grup bloków dyskowych, przy czym pojedynczy blok uważamy za podstawową fizyczną jednostkę objętościową danych. Wielkość bloku dyskowego jest stała w ramach całego systemu plików. Stałe ograniczające rozmiar bloku dyskowego znajdują się w pliku nagłówkowym:

include/linux/ext2_fs.h 

#define   EXT2_MIN_BLOCK_SIZE        1024 
#define   EXT2_MAX_BLOCK_SIZE	     4096    
                              /* oczywiście bajtów */
Oczywiście nie trudno zauważyć, iż są to potęgi 2 oraz, że dodatkowym pośrednim rozmiarem jest 211 bajtów czyli 2048. Jak wspomnieliśmy fizycznie bloki na dysku położone są w grupach. Struktura ta wygląda następująco.

Rys.1 Fizyczna struktura systemu plików na dysku.

Boot
Sektor

Bloki
Grupy 1

Bloki
Grupy 2


. . . . . . . . . .

Bloki
Grupy N


W systemie EXT2 można jednak wyróżnić logiczne grupy bloków, które nie zupełnie pokrywają się z fizycznymi grupami.


Na logiczną grupę składają się:

Natomiast każda grupa fizyczna zawiera informacje o jednej grupie logicznej, a ponadto pewne informacje o całym systemie plików.
Rys.2 Fizyczna grupa bloków na dysku.


Blok
Identyfikacyjny

Bloki
Deskryptorów
Systemu plików

Blok z Bitmapą
Zajętości bloków
danej Grupy

Blok z Bitmapą
Zajętości i-węzłów
danej Grupy

Tablica I-węzłów

Bloki Danych

Grupa fizyczna zawiera blok z mapą zajętości bloków danych, blok z mapą zajętości tablicy i-węzłów, bloki z tablicą i-węzłów, bloki danych - określonej grupy logicznej oraz redundantną kopię bloku identyfikacyjnego (ang. super block, którego strukturę ext2-super_block opisano w paragrafie dotyczącym struktur danych) i bloki z deskryptorami wszystkich grup logicznych systemu plików. Przy czym kolejność występowania tych bloków jest taka jak na rys. 2.

Podczas inicjalizowania systemu, do pamięci wczytywane są bloki z deskryptorami grup logicznych z pierwszej grupy fizycznych bloków dyskowych, gdy nie występują sytuacje wyjątkowe system nie korzysta z bloków z deskryptorami i z bloku identyfikacyjnego z pozostałych grup fizycznych. Deskryptor grupy opisuje struktura ext2_grup_desc, która zajmuje 32 bajty, co oznacza, że gdy blok dyskowy ma pojemność 1024 bajty to jeden blok zawiera 32 deskryptory grup logicznych.
( Do wniosków takich doszliśmy po lekturze Linux Kernel Hackers Guide oraz analizie funkcji ext2-read-super(...) i get_group_desc())
Po analizie funkcji przydzielającej nowy blok dyskowy ext2_new_block ( z pliku fs/ext2/balloc.c ) i podobnej funkcji dla i-węzłów ext2_new_inode ( z pliku fs/ext2/ialloc.c ) doszliśmy do wniosku, iż bitmapy zajętości to po prostu tablice bitów, przy czym jedna bitmapa zajmuje dokładnie jeden blok. Konsekwencją tego jest wyliczenie maksymalnego rozmiaru grupy. Mianowicie jeśli bloki są rozmiaru 1 KB tzn. 8096 bitów, to pojedynczą mapą możemy opisać 8096 bloków - tyle ile bitów, więc w takiej grupie logicznej możemy 8 MB na bloki z danymi. Jeżeli natomiast bloki dyskowe są rozmiaru 4 KB to na bloki z danymi mamy wówczas szczesnaście razy więcej miejsca czyli 128MB.


Podzielenie systemu plików na grupy bloków ma na celu zwiększenie bezpieczeństwa oraz optymalizację zapisu danych na dysku. Zwiększenie bezpieczeństwa jest uzyskane poprzez utrzymywanie redundantnych informacji o systemie plików (blok informacyjny oraz deskryptory grup) w każdej fizycznej grupie bloków. Optymalizacja zapisu danych jest uzyskiwana poprzez algorytmy przydziału nowych i-węzłów i bloków dyskowych. Podczas przydziału i-węzeła plikowi, który jest katalogiem wyszukiwana jest grupa z największą liczbą wolnych i-węzłów. Jeżeli nie jest to katalog to zaczyna się szukać wolnego i-węzła od grupy w której znajduję się i-węzeł katalogu tego pliku. Dzięki czemu zwiększa się prawdopodobieństwo, że i-węzły plików z danego katalogu leżą w tej samej grupie a przez to, co się zaraz okaże również i prawdopodobieństwo położenia bloków danych plików z danego katalogu w jednej grupie bloków.
Wyszukiwanie wolnego bloku dyskowego zaczyna się od grupy w której znajduję się i-węzeł pliku, przez co z dużym prawdopodobieństwem bloki danych jednego pliku położone są w obrębie jednej grupy bloków dyskowych. Algorytmy przydziału i-węzłów i bloków danych powodują więc ich równomierne rozłożenie w grupach oraz w miarę możliwości spójne położenie bloków danych plików.


Bibliografia

  1. Pliki źródłowe Linuxa:
  2. Projekt Linux
  3. Linux Kernel Hackers Guide
  4. Maurice J. Bach "Budowa systemu operacyjnego UNIX"


Autorzy: Adam Hlebowicz, Krzysztof Ostrowski, Piotr Kawczyński i Maciej Zarzycki