FAT 32
Wstęp
System plików FAT został stworzony przez Microsoft w roku 1977. Początkowo stosowany do przechowywania danych na dyskietkach, szybko został rozwinięty jako szybki i elastyczny system do zarządzania danymi zarówno na nośnikach wymiennych, jak i stałych.
Powstanie FAT 32 zostało wymuszone przez pojawianie się coraz większych dysków, na których FAT 16 ograniczał rozmiar partycji do 2 GB, oraz powodował zbyt duże straty związane z rozmiarem cluster 'ów. Standard ten został wprowadzony przez Microsoft wraz z drugą edycją Windows 95 (OSR2).
(Cluster: Grupa sektorów dysku zawierająca informację. Np. 4 KB cluster zawiera 8 sektorów. Każdy cluster posiada wpis w FAT. Wpis ten określa czy cluster jest zapisany, jeżeli tak: czy jest on cluster'em końcowym (pliku), wpis 0 oznacza pusty, 0FFFFFFF - ostatni w łańcuchu.)
Tabela 1: Porównanie rozmiaru cluster'ów
Rozmiar Cluster'a |
Skuteczność |
Rozmiar partycji (Dotyczy systemu FAT) |
|
2K |
98.4% |
0-127 MB |
|
4K |
96.6% |
128-255 MB |
|
8K |
92.9% |
256-511 MB |
|
16K |
85.8% |
512-1023 MB |
|
32K |
73.8% |
1024-2047 MB |
|
64K |
56.6% |
2047 MB |
|
Rozmiar Cluster'a |
Skuteczność1 |
Rozmiar partycji (Dotyczy systemu FAT32) |
|
4K |
96.6% |
> 260 MB |
|
8K |
92.9% |
> 8 GB |
|
16K |
85.8% |
> 60 GB |
|
32K |
73.8% |
> 2 TB |
Ponadto dyski w formacie FAT32 są mniej wrażliwe na uszkodzenia pojedynczych sektorów, gdyż system ten potrafi przenieść katalog główny (root directory), jak również używać zapasowej kopii FAT zamiast domyślnej (opcja ta pozwala również dynamicznie zmieniać rozmiar partycji, chociaż Microsoft tego do tej pory nie zaimplementował w swoich narzędziach). Boot record także został rozszerzony o dodatkowe (zapasowe) informacje dotyczące struktury danych.
Dane techniczne
Master Boot Record
Jest podobny dla większości systemów operacyjnych. Jego położenie, to Cylinder 0,
głowica 0, sektor 1. Jest on miejscem, z którego jest odczytywany początek kodu uruchamianego po procedurze POST. MBR zawiera także tablicę patrycji.
Tabela 2: budowa MBR
Offset |
Opis |
Rozmiar |
000h |
Executable Code (Uruchamia komputer) |
446 B |
1BEh |
1st Partition Entry |
16 B |
1CEh |
2nd Partition Entry |
16 B |
1DEh |
3rd Partition Entry |
16 B |
1EEh |
4th Partition Entry |
16 B |
1FEh |
Boot Record Signature (55h AAh) |
2 B |
Tabela 3: „Partition Entry” - informacja o partycji
Offset |
Opis |
Rozmiar |
00h |
Status partycji (00h=Nieaktywna, 80h=Aktywna) |
1 B |
01h |
Początek partycji - Głowica |
1 B |
02h |
Początek partycji - Cylinder/Sektor |
2 B |
04h |
Typ partycji |
1 B |
05h |
Koniec partycji - Głowica |
1 B |
06h |
Koniec partycji - Cylinder/Sektor |
2 B |
08h |
Liczba sektorów pomiędzy MBR i pierwszym sektorem partycji |
4 B |
0Ch |
Liczba sektorów w partycji |
4 B |
Tabela 4: Pole Cylinder/Sektor
15 |
14 |
13 |
12 |
11 |
10 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
Cylinder (bity 7 do 0) |
Cylinder |
Sektor (bity 5 do 0) |
Tabela 5: Typy partycji
Wartość |
Opis |
00h |
Nieznane lub puste |
01h |
FAT 12 |
04h |
FAT 16 (Partycja mniejsza niż 32MB) |
05h |
Rozszerzona partycja MS-DOS |
06h |
FAT 16 (Partycja większa niż 32MB) |
0Bh |
FAT 32 |
0Ch |
Jak 0BH, używane rozszerzenia LBA1 13h |
0Eh |
Jak 06H, używane rozszerzenia LBA1 13h |
0Fh |
Jak 05H, używane rozszerzenia LBA1 13h |
Tworzenie wielu partycji realizowane jest przy pomocy „sztuczki” polegającej na tworzeniu dysków logicznych na partycji rozszerzonej.
Boot Record w FAT32
Informacje zawarte w tabeli znajdują się w pierwszym sektorze każdej partycji.
Tabela 6: Boot Record
Offset |
Opis |
Rozmiar |
00h |
Kod skoku + NOP |
3 B |
03h |
Nazwa OEM (Np. MSWIN4.1) |
8 B |
0Bh |
Bajtów na sektor |
2 B |
0Dh |
Sektorów na Cluster |
1 B |
0Eh |
Sektorów zarezerwowanych |
2 B |
10h |
Liczba kopii FAT |
1 B |
11h |
Maks. Liczba wpisów w katalogu głównym (nie dotyczy FAT32) |
2 B |
13h |
Liczba sektorów na partycji mniejszej niż 32MB (nie dotyczy FAT32) |
2 B |
15h |
Typ nośnika (Np. F8h dla dysków twardych) |
1 B |
16h |
Rozmiar FAT w starszych systemach FAT (nie dotyczy FAT32) |
2 B |
18h |
Sektorów na ścieżkę |
2 B |
1Ah |
Liczba głowic |
2 B |
1Ch |
Liczba sektorów ukrytych w partycji |
2 B |
20h |
Liczba sektorów w partycji |
2 B |
24h |
Liczba sektorów w FAT |
2 B |
28h |
Flagi (Bity 0-4 oznaczają aktywną kopię FAT ) (Bit 7 określa czy włączono mirroring FAT <0-TAK>) (Jeżeli FAT Mirroring jest wyłączony, Informacje zapisywane są wyłącznie do aktywnej kopii) |
2 B |
2Ah |
Wersja dysku FAT32 |
2 B |
2Ch |
Numer cluster'a początkowego katalogu głównego |
2 B |
30h |
Sektor informacyjny (struktura poniżej) |
2 B |
32h |
Numer sektora zawierającego zapasowy boot sector |
2 B |
34h |
Zarezerwowane |
12 B |
40h |
Numer logicznego dysku na partycji |
1 B |
41h |
Nieużywane |
1 B |
42h |
Extended Signature (29h) |
1 B |
43h |
Numer seryjny dysku |
2 B |
47h |
Nazwa woluminu |
11 B |
52h |
Nazwa FAT (FAT32) |
8 B |
5Ah |
Kod uruchamialny |
420 B |
1FEh |
Boot Record Signature (55h AAh) |
2 B |
Tabela 7: Struktura sektora informacyjnego Boot Record
Offset |
Opis |
Rozmiar |
00h |
First Signature (52h 52h 61h 41h) |
4 B |
04h |
Nieużywane |
480 B |
1E4h |
Sygnature of FSInfo Sector (72h 72h 41h 61h) |
4 B |
1E8h |
Liczba wolnych Clusterów (-1 jeżeli nieznana) |
4 B |
1ECh |
Numer cluster'a ostatnio zaalokowanego. |
4 B |
1F0h |
Zarezerwowane |
12 B |
1FCh |
Nieużywane |
2 B |
1FEh |
Boot Record Signature (55h AAh) |
2 B |
Każdy plik zapisywany na nośniku zajmuje rozmiar będący całkowitą wielokrotnością rozmiaru jednostki alokacji, skuteczność jest rozumiana jako średnia efektywna pojemność dysku która może zostać wykorzystana.