Lokalne systemy plików

 



FAT

 

System plików FAT został zaprojektowany przez firmę Microsoft. Pierwsza wersja tego systemu została zaprojektowana dla dysków o niewielkiej pojemności (głównym jej przeznaczeniem były dyskietki). Była to bardzo uboga wersja, nie obsługująca nawet podkatalogów.  Później zaczęły powstawać kolejne, coraz lepsze wersje systemu plików FAT.

Obecnie rozróżnia się trzy rodzaje systemów plików FAT. Są to:

Nazwy pochodzą od liczby bitów, używanych w każdym z systemów do adresowania. 

 

Opis poszczególnych struktur w systemie plików FAT:

Klaster jest grupą sektorów na partycji FAT. W klastry pogrupowane są tylko sektory z danymi. Rozmiar klastra wyspecyfikowany jest w strukturze Boot Record i może wynosić od jednego do 128 sektorów. 

Wszystkie trzy odmiany FATa posiadają strukturę Boot Record, zamieszczoną w zarezerwowanych sektorach. Struktura Boot Record znajduje się na samym początku każdej partycji FAT, z tym, że dla FAT12 i FAT16 zajmuje ona jeden sektor, a dla FAT32 trzy sektory. Struktura ta zawiera pole opisujące rozmiar sektora dla danej partycji (zwykle 512 b). 

Tablica alokująca pliki znajduje się na pierwszych 63 sektorach dysku, po Boot Sektorze.

Tablica alokująca pliki jest zwykłą tablicą, zawierającą 12, 16 lub 32 bitowe elementy. Zazwyczaj na jednej partycji znajdują się dwie  identyczne kopie. 

W strukturze Boot Record jest pole specyfikujące ilość kopii tablicy FAT. W systemach FAT12 i FAT16 używana jest pierwsza kopia tablicy FAT, ale wszystkie zmiany są synchroniczne nanoszone na pozostałe kopie. FAT32 został rozszerzony o możliwość specyfikacji w polu "Flags", która kopia jest podstawowa.

O strukturze plików FAT można po prostu myśleć jako o liście, gdzie każdy łańcuch specyfikuje, które obszary dysku zajęte są przez dany plik czy katalog. 

Katalog główny jest wyspecyfikowany jako normalny katalog, który nie posiada wpisów jedno- i dwu- kropkowych. W systemach FAT12 i FAT16 katalog główny znajduje się tuż za tablicami alokacji plików. Na partycjach FAT32 katalog główny jest utworzony ze zwykłego łańcucha klastrów, które adres początkowy znajduje się w strukturze Boot Record. 

 

Rys. 1  Organizacja partycji FAT16 

 

System plików FAT rezerwuje 1 sektor dla FAT12 i FAT16, a dla FAT32 zwykle 32 sektory. Zarezerwowane sektory zawierają Boot Record i jego kopię zapasową.  

W Boot Record znajduje się struktura BPB (BIOS Parameter Block):

BPB dla partycji FAT12 lub FAT16
BPB_FAT12 STRUC (offset)
bpbBytesPerSector DW ? 0x0B
bpbSectorsPerCluster DB ? 0x0D
bpbReservedSectors DW ? 0x0E
bpbNumberOfFATs DB ? 0x10
bpbRootEntries DW ? 0x11
bpbTotalSectors DW ? 0x13
bpbMedia DB ? 0x15
bpbSectorsPerFAT DW ? 0x16
bpbSectorsPerTrack DW ? 0x18
bpbHeadsPerCylinder DW ? 0x1A
bpbHiddenSectors DD ? 0x1C
bpbTotalSectorsBig DD ? 0x20
BPB_FAT12 ENDS

BPB dla partycji FAT32

BPB_FAT32 STRUC (offset)
bpbBytesPerSector DW ? 0x0B
bpbSectorsPerCluster DB ? 0x0D
bpbReservedSectors DW ? 0x0E
bpbNumberOfFATs DB ? 0x10
bpbRootEntries DW ? 0x11
bpbTotalSectors DW ? 0x13
bpbMedia DB ? 0x15
bpbSectorsPerFAT DW ? 0x16
bpbSectorsPerTrack DW ? 0x18
bpbHeadsPerCylinder DW ? 0x1A
bpbHiddenSectors DD ? 0x1C
bpbTotalSectorsBig DD ? 0x20
bpb32SectorsPerFAT DD ? 0x24
bpb32Flags DW ? 0x28
bpb32Version DW ? 0x2A
bpb32RootCluster DD ? 0x2C
bpb32InfoSector DW ? 0x30
bpb32BootBackupStart DW ? 0x32
bpb32Reserved DB 12 DUP (?) 0x34
BPB_FAT32 ENDS

Boot Sector dla partycji FAT12 lub FAT16

BS_FAT12 STRUC (offset)
bsJmp DB 3 DUP (?) 0x00
bsOemName DB 8 DUP (?) 0x03
bsFAT12 BPB_FAT12 Structure 0x0B
bsDriveNumber DB ? 0x24
bsUnused DB ? 0x25
bsExtBootSignature DB ? 0x26
bsSerialNumber DD ? 0x27
bsVolumeLabel DB "NO NAME    " 0x2B
bsFileSystem DB "FAT12   " 0x36
bsBootCode DB 450 DUP (?) 0x3E
BS_FAT12 ENDS

Boot Sector dla partycji FAT32

BS_FAT32 STRUC (offset)
bsJmp DB 3 DUP (?) 0x00
bsOemName DB 8 DUP (?) 0x03
bsFAT32 BPB_FAT32 Structure 0x0B
bs32DriveNumber DB ? 0x40
bs32Unused DB ? 0x41
bs32ExtBootSignature DB ? 0x42
bs32SerialNumber DD ? 0x43
bs32VolumeLabel DB "NO NAME    " 0x47
bs32FileSystem DB "FAT32    " 0x52
bs32BootCode DB 422 DUP (?) 0x5A
BS_FAT32 ENDS

 

 

FAT12

FAT16

FAT32

liczba klastrów na partycji

n-4084

4085-65524

65525-n

 

Trochę o implementacji katalogów.

W systemach FAT12 i FAT16 wszystkie katalogi poza katalogiem głównym są w zasadzie plikami. Plik to ciąg bajtów, umieszczony w jednym bądź wielu klastrach. Rozmiar pliku przechowywany jest w strukturze katalogu.

Katalogi nie posiadają rozmiarów, traktowane są jako wielokrotność rozmiaru klastra. Katalogi są powiększane, gdy dodajemy do nich wpis, a katalog był już pełen. 

Katalog główny występuje na ustalonym miejscu w partycji. W systemach FAT12 i FAT16 katalog główny nie może być powiększony, gdyż jego rozmiar został z góry określony przy formatowaniu partycji. Katalog główny w tych systemach ma ustaloną maksymalną liczbę wpisów na 512. W systemie FAT32 zostało to poprawione i nie ma ograniczeń na wpisy w katalogu głównym.

Katalog jest podzielony na małe struktury nazywane wpisami. Każde wpis ma rozmiar 32 bajtów i jest informacją o katalogu bądź pliku, zawartym w naszym katalogu. Wpis zawiera pola:

Suma bajtów = 29. Pozostałe 3 bajty są zarezerwowane, nie mają obecnie znaczenia.

Każdy klaster posiada własny wpis w tablicy FAT. Poniższa tabelka przedstawia wszystkie możliwe wartości dla takiego wpisu:

  FAT12 FAT16 FAT32
Wolny 000 0000 00000000
Zarezerwowany 001 0001 00000001
Używany przez plik 002-FF6 0002-FFF6 00000002-0FFFFFF6
Uszkodzony FF7 FFF7 0FFFFFF7
Ostatni klaster w pliku FF8-FFF FFF8-FFFF 0FFFFFF8-0FFFFFFF

 

Każdy katalog i plik w katalogu głównym liczony jest jako jeden wpis (może ich być więc w sumie maksymalnie 512, a jeśli mają nazwy dłuższe niż 8.3 to jeszcze mniej).

W tablicy alokacji plików plik dostaje pierwszą dostępną lokację na partycji. Numer początkowego klastra to adres pierwszego klastra, używanego przez plik. Każdy klaster zawiera wskaźnik do następnego klastra danego pliku albo wskaźnik końca pliku (np. 0xFFFF dla FAT16). 

 

Rys.2  Pliki na partycji FAT16



NTFS

 

System plików NTFS został, podobnie jak FAT, stworzony przez firmę Microsoft. Zaprojektowany został specjalnie dla nowego systemu operacyjnego tej firmy Windows NT (New Technology). stworzenie tego systemu było konieczne, gdyż zaczęły pojawiać się dyski twarde o pojemności przewyższającej możliwości adresowania systemu FAT. Ponadto FAT nie nadawał się do wykorzystań sieciowyc, katalogi i pliki nie miały uprawnień dla różnych użytkowników. NTFS posiada już te wszystkie cechy, wraz z nowymi, wciąż rozwijanymi w różnych systemach np. journallingiem. 

 

Architektura systemu NTFS

W systemie plików NTFS, każda struktura jest plikiem, wliczając w to struktury do zarządzania partycją i statystyk. Informacje kontrolne o partycji przechowywane są w zestawie specjalnych plików, które są tworzone wraz z partycją. Zawierają one informacje o plikach na partycji, rozmiarze partycji, rozmieszczeniu klastrów itp. Jedynym wyjątkiem od zasady "wszystko jest plikiem" jest Boot Sektor, który poprzedza na partycji pliki specjalne. Odpowiedzialny jest za najbardziej podstawowe funkcje, np. ładowanie systemu operacyjnego.

Każdy plik na partycji NTFS stanowi zbiór atrybutów. Dotyczy to nawet zawartości pliku, która traktowana jest jako jeden z atrybutów. Inne atrybuty to nazwa pliku i jego rozmiar. Dzięki takiemu rozwiązaniu system operacyjny traktuje pliki jako obiekty o różnych charakterystykach, pozwala to na łatwe zarządzanie plikami i dodawanie atrybutów w przyszłości.

NTFS przechowuje pliki (także pliki specjalne) używając systemu klastrów - każdy plik podzielony jest na klastry, z których każdy zawiera binarną ilość sektorów 512 bajtowych. Wygląda to podobnie do systemu FAT, ale różni się implementacją klastrów.

NTFS Boot Sektor

Boot Sektor znajduje się na początku każdej partycji NTFS. Jego funkcjonalność jest analogiczna, jak Boot Sektora w systemie FAT. 

NTFS Boot Sektor pomimo, że w nazwie ma słowo "sektor", w rzeczywistości może zajmować na partycji do 16 sektorów. 

NTFS  Boot Sektor zaczyna się w pierwszym sektorze partycji i składa z dwóch struktur.

Volume Boot Code na partycji FAT to ulubiony cel dla wirusów, gdyż zmiana tego kodu może pozwolić wirusowi na automatyczne ładowanie przy każdym starcie systemu. 

Partycje i ich rozmiary w systemie NTFS

Dużą wadą systemów FAT jest ich stosunkowo niewielka przestrzeń adresowa. Maksymalny rozmiar partycji NTFS to 2^64 bajtów, czyli 18,446,744,073,709,551,616 bajtów. 

Dla porównania FAT32 może maksymalnie zaadresować 2 Terabajty pamięci, ale olbrzymich tablicach FAT i stratach pamięci.

 

Klastry

Jedno z podobieństw między systemami FAT i NTFS polega na zarządzaniu nie pojedynczymi sektorami, ale ich grupami - klastrami. Jednak zarządzają nimi w zupełnie inny sposób. Podobnie jak FAT, NTFS wybiera rozmiar klastrów w zależności od rozmiaru partycji. Jednak sposób wyboru wielkości klastra różni się od tego z FAT. Poniższa tabela pokazuje liczbę klastrów i ich rozmiar w zależności od wielkości partycji: 

Rozmiar partycji (GiB)

Liczba sektorów w klastrze

Rozmiar klastra (kiB)

<= 0.5

1

0.5

> 0.5 to 1.0

2

1

> 1.0 to 2.0

4

2

> 2.0 to 4.0

8

4

> 4.0 to 8.0

16

8

> 8.0 to 16.0

32

16

> 16.0 to 32.0

64

32

> 32.0

128

64

Rozmiar klastrów ma istotny wpływ na działanie systemu. Im większe klastry tym więcej pamięci jest marnowane. 

Pliki systemowe

Pliki systemowe znajdują się na początku partycji NTFS. Jednym z plików systemowych jest Master File Table (MFT). MFT zawiera rekord, opisujący każdy plik i katalog na partycji, a jeśli plik jest dość mały, to znajduje się też tam jego zawartość. 

Pliki systemowe też znajdują się w rekordzie MFT, co opisuje poniższa tabelka:

Nazwa pliku systemowego

Nazwa pliku

Rekord MFT #

Opis

Master File Table (MFT)

$MFT

0

MFT też jest plikiem w MFT znajduje się opis jego działania.

Master File Table 2 (MFT2) / Master File Table Mirror

$MFTMirr

1

"Lustrzane" odbicie MFT, zawiera 16 pierwszych rekordów MFT, opisujących pliki systemowe. Plik przechowywany w środku partycji (Windows NT 3.5 i wcześniejsze) albo na jej końcu (Windows NT 4.0 i późniejsze). 

Log File

$LogFile

2

Zapis wszystkich transakcji na plikach. Zapewnia odtwarzalność danych.

Volume Descriptor

$Volume

3

Zawiera podstawowe informacje o partycji, jak nazwa, wersja systemu NTFS, czas utworzenia, itp.

Attribute Definition Table

$AttrDef

4

Zawiera opis różnych typów atrybutów plików na partycji NTFS.

Root Directory / Folder

"." (single period)

5

Wskaźnik na Root Directory katalog partycji.

Cluster Allocation Bitmap

$Bitmap

6

Zawiera mapę, które klastry są zajęte, a które wolne.

Volume Boot Code

$Boot

7

Zawiera kopie struktury Boot Sektor.

Bad Cluster File

$BadClus

8

Lista wszystkich klastrów na partycji, oznaczonych jako uszkodzone.

Quota Table

$Quota

9

Zawiera informacje o quocie na partycji (tylko dla NTFS 5.0 i późniejszych).

Upper Case Table

$UpCase

10

Zawiera informacje o konwersji nazw plików do formatu UNICODE (16 bitów).

Przechowywanie informacji o plikach systemowych pozwala na łatwą rozbudowę systemu. Ponadto pliki systemowe nie muszą znajdować się w określonym miejscu na partycji, więc w razie uszkodzenia jakiejś części twardego dysku mogą być przeniesione w inne miejsce.

Master File Table (MFT)

MFT jest najważniejszym plikiem systemowym na partycji NTFS. Przechowywane są tutaj dane o każdym pliku i katalogu na partycji. Działa jako "punkt startowy" i "spis treści" zarządzania partycją. 

Kiedy na partycji tworzymy katalog lub plik, zostaje dla niego utworzony rekord w MFT. Dla takiego rekordu minimalnym rozmiarem jest 1,024 bajty, a maksymalnym 4,096 bajtów. System używa rekordu do przechowywania informacji o pliku/katalogu w postaci atrybutów. W systemie NTFS nie ma rozróżnienia między zawartością pliku, a jego atrybutami. Ma to ciekawy skutek dla małych plików: jeśli rozmiar pamięci potrzebny na wszystkie atrybuty pliku, wliczając w to jego zawartość, jest mniejszy niż rozmiar rekordu, zawartość pliku będzie przechowywana wewnątrz MFT. Dlatego takie pliki nie wymagają już przechowywania poza MFT, a w dodatku skraca się czas wczytywania pliku. 

Inne ciekawe wykorzystanie atrybutów plików w systemie NTFS to kompresja plików. Zajmuje się tym aplikacja systemu Windows NT. Plik przechowywany jest na partycji w postaci skompresowanej. Gdy użytkownik chce go odczytać następuje automatyczna dekompresja tego pliku bez wiedzy użytkownika. 

Pliki rzadkie przechowywane są na partycji NTFS oszczędnie (tylko znaczące dane). Pozwala to oszczędniej wykorzystywać miejsce na partycji.

Rys. 3 Rekord MFT dla małego pliku lub katalogu

Jeśli wszystkie atrybuty pliku nie mieszczą się w MFT, są przechowywane poza nią, jako atrybuty zewnętrzne. Dla bardzo dużych plików nawet wskaźniki na zawartość pliku mogą być atrybutami zewnętrznymi! Duże katalogi są zorganizowane w B-drzewa. Ich rekordy zawierają wskaźniki do zewnętrznych klastrów, zawierających atrybuty katalogu, które nie zmieściły się w MFT.

Takie zarządzanie plikami powoduje duży rozrost MFT. Przy zakładaniu partycji NTFS 12,5 % rozmiaru dysku rezerwowane jest dla MFT. Normalne pliki i katalogi nie będą używać tej przestrzeni, chyba że zabraknie miejsca na reszcie dysku..

 


Witold Wojtyra