Tomasz Mazan

e-mail: tm189301@students.mimuw.edu.pl


FAT



Historia


Początki systemu plików FAT sięgają lat siedemdziesiątych, kiedy to Bill Gates użył go jako systemu plików dla dyskietek. Nie był on wystarczający do obsługi dysków twardych, jednak ambicje autora sięgały tych właśnie urządzeń. W ten sposób powstała kolejna, wydajniejsza wersja przygotowana do obsługi dysków twardych. FAT ten został użyty w pierwszych wersjach systemu DOS. Poprawione wersje FAT stosowane są także przez współczesne systemach operacyjne (choćby Windows 98).




Przegląd przez FAT'y - zastosowanie



FAT 12

FAT 16

FAT 32

zastosowanie

dyskietki,
małe dyski twarde

małe i średnie
dyski twarde
(do 200 MB)

średnie i duże
dyski twarde

Liczba bitów na adres klastra

12

16

32

maksymalna liczba klastrów

4096

65536

4294967296

wielkość używanych klastrów

0.5 – 4 KB

2-64 KB

4-32 KB

rozmiar partycji

16MB

4 GB

217 GB




Schemat podziału partycji


Boot Sektor

FAT

FAT (kopia)

katalog główny

dane


Boot sektor

skok do kodu ładującego system operacyjny, opis systemu plików

FAT

FAT + kopia awaryjna (może być przechowywanych więcej kopii, ale nic nie wiadomo o wsparciu dla obsługi większej liczby kopii nawet przez MS)

Katalog Główny

zawiera metadane plików w katalogu głównym partycji

Dane

informacje zapisane w plikach i puste miejsce



Zawartość Boot-Sektora

        
                
                        
Numer bajtu
Znaczenie
0-2
Pierwsza instrukcja procedury ładowania
03-10
Nazwa OEM 
11-12
Liczba bajtów na sektor
13
Liczba sektorów w klastrze
14-15
Liczba zarezerwowanych sektorów
16
Liczba kopii tablicy FAT
17-18
Liczba wpisów w katalogu głównym
19-20
Całkowita liczba sektorów
21
Bajt deskryptora urządzenia
22-23
Liczba sektorów w każdej z kopii tablicy FAT
24-25
Liczba sektorów na ścieżce
26-27
Liczba stron
28-29
Liczba ukrytych sektorów
30-509
Procedura ładowania i informacje o partycji
510
szesnastkowo 55
511
szesnastkowo AA


Tablica FAT - klastry


FAT przechowuje informacje o rozmieszczeniu plików w odpowiednich sektorach. Każdemu sektorowi jest przyporządkowany jeden wpis w tablicy – jest w nim przechowywany adres następnego sektora aktualnego pliku.

Poniżej przedstawiono szczególne (zastrzeżone) wartości dla wpisów w FAT :


Wpis

Stan klastra

Wartość wpisana w komórce dla poszczególnych rodzajów FAT



FAT 12

FAT 16

FAT 32

FREE

pusty

0x0000

0x0000

0x00000000

BAD CLUSTER

uszkodzony

0x0FF7

0xFFF7

0x0FFFFFF7

EOC

koniec
(koniec pliku)

0x0FF8 – 0x0FFF

0xFFF8 – 0xFFFF

0x0FFFFFF8 - 0x0FFFFFFF


Lista wolnych klastrów na dysku (a więc wolna przestrzeń na dysku) nie jest fizycznie przechowywana nigdzie na dysku – przeliczana jest w razie potrzeby, np. w czasie montowania nośnika.


Katalog


Folder główny jest umieszczony w określonej lokalizacji woluminu i może zawierać maksymalnie 512 wpisów. Maksymalna ilość wpisów na dyskietce/dysku zależy od jej rozmiarów.


Każdy folder i nazwa pliku 8.3 jest liczona jako wpis. Na przykład, jeżeli maksymalna liczba wpisów w folderze głównym wynosi 512 i znajduje się w nim 100 folderów, to możliwe jest utworzenie w nim jeszcze tylko 412 plików lub folderów. Jeżeli te foldery lub pliki posiadają nazwy wykraczające poza format 8.3, to ilość plików lub folderów, jakie można utworzyć, automatycznie ulega zmniejszeniu. To ograniczenie nie dotyczy jednak FAT-32.

Foldery zawierają 32-bajtowe wpisy dla każdego pliku i folderu, który się w nich znajduje. Wpisy te zawierają następujące informacje:

Uwaga Trzy bity w każdym z wpisów zostały zarezerwowane.


Omówienie niektórych z pól :


NAME

W polu zawierającym nazwę plików oprócz znaków alfanumerycznych (i innych mogących

wystąpić w nazwie) są stosowane znaki specjalne:


00h - wpis jest pusty i nie był wcześniej używany

E5h - stary wpis został wymazany

2Eh - wpis specjalny występujący we wszystkich katalogach oprócz katalogu głównego oznaczający że pierwszy znak jest kropką. Znak ’.’ - wskazuje na bieżący katalog, ’..’ - wskazuje na katalog macierzysty lub na NULL, jeśli katalog macierzysty jest katalogiem głównym.


Znaki niedopuszczalne w nazwie pliku / katalogu

" / \ [ ] : ; | =

Zarezerwowane nazwy

CON, AUX, COM1, COM2, COM3, COM4, LPT1, LPT2, LPT3, PRN, NUL


ATTR

Możliwe atrybuty pliku:


Atrybut

Kod binarny

Tylko odczyt

00000001

Ukryty

00000010

Systemowy

00000100

Etykieta

00001000

Katalog

00010000

Archiwalny

00100000


RESERVED

W przypadku FAT 32 pole to zawiera 16 starszych bitów numeru początkowego klastra. W pozostałych wersjach wartość pola reserved jest ignorowana.


SIZE

W przypadku plików określa ich wielkość, a dla katalogów przyjmuje zawsze wartość 0.



Długie nazwy plików


FAT umożliwia także przechowywanie i obsługę długich nazw plików. Informacje o nazwie takiego pliku muszą być zapamiętywane na dwa sposoby, w celu zachowania zgodności z formatem 8.3. Gdy sprawę tę zaniedbano, nie byłoby możliwe dostanie się do zasobów dyskowych po uruchomieniu systemu DOS. By tego uniknąć, przechowuje się standardowy wpis w katalogu przechowujący podstawowe informacje o pliku oraz początkową część nazwy w strukturze opisywanej powyżej. By móc przechować całą nazwę, potrzebna jest druga struktura (opisana poniżej), w której przechowuje się dalszą część nazwy (w każdej strukturze kolejnych 13 znaków.



Omówienie niektórych z pól :


ID (8 bitów)











6 bitów

odpowiadają za numer fragmentu nazwy pliku

1 bit

wskazuje czy dany wpis jest ostatnim fragmentem nazwy

1 bit

ustawiony, jeśli wpis usunięty (w przypadku usunięcia pliku lub skrócenia jego nazwy)


Z powyższych danych widać, że maksymalna długość nazwy wynosi 63 * 13 liter, czyli 819.


ATTR

We wpisie zawierającym fragment długiej nazwy pliku atrybut ten przyjmuje wartość 0x0f. W standardowym wpisie wartość 0x0f oznacza błąd. Pliki z atrybutem 0x0f są niedostępne dla starszego oprogramowania, ponieważ żaden z programów nie obsługuje pliku, który ma flagi: tylko do czytania, ukryty, systemowy, etykieta dysku.



Porównanie wydajności FAT 16 i FAT 32


FAT 16: Pod DOS widziany do 2GB, pod Windows – do 4 GB.


Rozmiar dysku

Rozmiar klastra

Wydajność

0-127 MB

2K

98.4%

128-255 MB

4K

96.6%

256-511 MB

8K

92.9%

512-1023 MB

16K

85.8%

1024-2047 MB

32K

73.8%

powyżej 2047 MB

64K

56.6%



FAT 32: obsługiwany od Windows 95 OSR2 (95b)


Rozmiar dysku

Rozmiar klastra

Wydajność

260MB – 8GB

4K

96.6

8 - 60GB

8K

92.9%

60GB - 2TB

16K

85.8%

powyżej 2TB

32K

73.8%










NTFS


Dziennik


Dziennik transakcyjny (kronikowanie – ang. journaling) jest koncepcją wykorzystywaną w nowoczesnych systemach plików. Służy od zwiększeniu bezpieczeństwa danych dyskowych. Dane mogą ulec zagubieniu (nie dokończony zapis) lub rozspójnione w przypadku awarii systemu czy napięcia zasilającego. Większość systemów posiada narzędzia wspomagające przywrócenie spójności danych (niedokończone zapisy jednak nie są tym obejmowane). Operacja taka jest czasochłonna i, jak pokazują doświadczenia, nie w 100% skuteczna. Rozwiązaniem mogą być tu częste kopie bezpieczeństwa – jednak pytanie : jak często można takie kopie robić? Kosztuje to nośniki do przechowywania, a także czas.

Odpowiedzią na te niedogodności stały się właśnie dzienniki transakcyjne. Operacje dyskowe grupowane są w transakcje, następnie tworzony jest wpis do dziennika, a dopiero faktyczny zapis. W przypadku niepowodzenia w zapisie (jedna z wyszczególnionych wcześniej sytuacji awaryjnych) transakcje są wycofywane z dysku. Oszczędza to co prawda czas przy „reanimowaniu” dysku po awarii, jednak powoduje pewne narzutu przy okazji standardowych operacji na rzecz zapisów do dziennika – podsumowując jednak zyski i straty, wychodzimy na plus.


Historia


NTFS (New Technology File System) jest kolejnym systemem plików po rodzinie FAT, stworzonym przez firmę Microsoft. Przeznaczony jest on dla systemów wieloużytkownikowych (Windows NT/2000/XP), gdyż obsługuje system uprawnień do zasobów dyskowych. Daje to szerokie możliwości, a przede wszystkim szansę na profesjonalne wykorzystanie w sieci.



Szczególne zalety:



Klastry

Warto byłoby porównać wielkości rozmiarów klastra dla poszczególnych rozmiarów dysku w odniesieniu do rodziny FAT

Rozmiar dysku

Rozmiar klastra

poniżej 512MB

0.5 KB

513MB-1024MB

1KB

1025MB-2048MB

2KB

2049MB i więcej...

4KB



Dziennik zmian (dodatkowa funkcja w W2k)

Dziennik zmian jest nową funkcją NTFS w systemie Windows 2000, udostępniającą trwały rejestr zmian dokonywanych w plikach w woluminie. NTFS korzysta z dziennika zmian w celu śledzenia informacji o dodawanych, usuwanych i modyfikowanych plikach w każdym woluminie. Gdy dowolny plik jest tworzony, modyfikowany lub usuwany, system NTFS dodaje odpowiedni rekord do dziennika zmian w danym woluminie.
Dziennik zmian umożliwia znaczną skalowalność aplikacji, które bez jego wykorzystywania musiałyby przeszukiwać cały wolumin w poszukiwaniu zmian. Projektanci aplikacji indeksujących system plików, tworzących przyrostowe kopie zapasowe, menedżerów replikacji lub skanerów antywirusowych mogą korzystać z dziennika zmian w celu zwiększenia ich wydajności.
Dziennik zmian jest znacznie bardziej efektywnym sposobem rozpoznawania zmian w danym woluminie niż znaczniki czasu lub powiadomienia plików. Aplikacje, które do tej pory musiały skanować cały wolumin w celu odnalezienia zmian, mogą teraz wykonać ten proces jednorazowo, a następnie odwoływać się do dziennika zmian. Koszt operacji wejścia/wyjścia w tych aplikacjach staje się zależny od ilości zmienionych plików, a nie od ilości plików w woluminie.
Każdy rekord w dzienniku zmian zajmuje w przybliżeniu 80-100 bajtów. Dziennik zmian posiada określony limit rozmiaru, który nigdy nie jest przekraczany. Po jego osiągnięciu usuwana jest odpowiednia część najstarszych rekordów.
API związane z dziennikiem zmian są w pełni udokumentowane. Mogą z nich korzystać wszyscy dostawcy oprogramowania. Dostawcy oprogramowania planują wykorzystać tą funkcję do zwiększenia skalowalności i wydajności wielu różnorodnych produktów, takich jak oprogramowanie służące do tworzenia kopii zapasowych oraz antywirusowe.
Więcej informacji na temat dziennika zmian można uzyskać korzystając z odnośnika na stronie :
http://windows.microsoft.com/windows2000/reskit/webresources.

Kompresja woluminów, folderów i plików

System Windows 2000 umożliwia kompresję poszczególnych plików, folderów oraz całych woluminów NTFS. Pliki skompresowane w woluminie NTFS mogą być odczytywane i zapisywane przez dowolną aplikację systemu Windows bez dokonywania uprzedniej dekompresji za pomocą oddzielnego programu. Dekompresja pliku następuje automatycznie podczas jego odczytu, natomiast kompresja jest wykonywana po jego zamknięciu lub zapisaniu. Skompresowane pliki i foldery posiadają atrybut C, widoczny podczas przeglądania ich w Eksploratorze Windows.
Jedynie system plików NTFS może odczytywać dane w formie skompresowanej. Przed udostępnieniem pliku aplikacji, takiej jak Microsoft Word, lub poleceniu systemu operacyjnego, takiemu jak copy, sterownik kompresji dokonuje jego dekompresji. Na przykład, gdy plik taki jest kopiowany pomiędzy dyskami twardymi komputerów używających systemu Windows 2000, to jest on w pierwszej kolejności dekompresowany, następnie kopiowany, a w końcu kompresowany podczas zapisywania.
Algorytm kompresji w systemie Windows 2000 jest zbliżony do używanego przez aplikację DriveSpace 3 w systemie Windows 98, z jedną istotną różnicą – aplikacja ta potrafiła kompresować jedynie wolumin podstawowy lub logiczny. System NTFS pozwala na kompresję całego woluminu, jednego lub kilku folderów w woluminie lub nawet poszczególnych plików w folderze znajdującym się w woluminie NTFS.
Algorytm kompresji w systemie NTFS został zaprojektowany do obsługi klastrów o rozmiarze do 4 KB. Jeżeli w woluminie NTFS rozmiar klastra jest większy od 4 KB, to żadna z funkcji kompresji NTFS nie jest dostępna.

Kompresowanie i dekompresowanie woluminów, folderów i plików

Woluminy, foldery i pliki w systemie NTFS mogą być skompresowane lub zdekompresowane. Stan kompresji folderu nie musi odzwierciedlać stanu kompresji znajdujących się w nim plików. Na przykład folder może być skompresowany, natomiast niektóre znajdujące się w nim pliki nie – jeżeli użytkownik selektywnie je zdekompresuje.
Stan kompresji folderów i plików można zmieniać za pomocą Eksploratora Windows lub narzędzia Compact dostępnego z poziomu wiersza poleceń



Szyfrowanie


Kolejnym wygodnym usprawnieniem NTFS użytej w W2k jest szyfrowanie danych. Można szyfrować na dowolnym poziomie, pliki lub katalogi. Wszystko dzieje się na dość niskim poziomie – do użytkownika należy tylko decyzja, które partie danych mają zostać szyfrowane – odpowiada za do moduł związany ze Systemem Szyfrowania Plików (EFS - Encrypting File System), połączony ze sterownikiem urządzania.

EFS korzysta z szyfrowania za pomocą klucza symetrycznego w połączeniu z technologią kluczy publicznych. Pozwala to zabezpieczyć pliki i zagwarantować, że jedynie ich właściciel będzie miał do nich dostęp. Użytkownicy EFS otrzymują certyfikat cyfrowy oraz parę klucza publicznego i prywatnego. EFS korzysta z zestawu kluczy użytkownika zalogowanego w lokalnym komputerze, w którym przechowywany jest klucz prywatny.
Użytkownicy pracują z zaszyfrowanymi plikami i folderami w taki sam sposób, jak z innymi plikami. Szyfrowanie jest dla nich przezroczyste, system automatycznie odszyfrowuje plik lub folder, gdy użytkownik z niego korzysta. Podczas zapisania pliku wykonywany jest proces jego szyfrowania. Intruzi usiłujący uzyskać dostęp do zaszyfrowanego pliku lub folderu (próbując go otworzyć, skopiować, przenieść lub zmienić jego nazwę) otrzymują komunikat „Odmowa dostępu”.
Aby zaszyfrować lub odszyfrować folder lub plik, należy ustawić dla niego atrybut Zaszyfrowany, w taki sam sposób, jak ustawia się inne atrybuty. Po zaszyfrowaniu folderu wszystkie znajdujące się w nim pliki i podfoldery są automatycznie szyfrowane. Zalecane jest szyfrowanie na poziomie folderu.


Struktura partycji



Boot Sektor

Główna tablica plików

Pliki systemowe

Dane



Powyżej pokazany jest ogólny schemat partycji NTFS. Można ten schemat traktować jako pewien pogląd a nie dosłowne przedstawienie rzeczywistości. W praktyce tylko Boot Sektor znajduje się na początku dysku i jest rozdzielny z pozostałymi częściami, które mogą być dowolnie ze sobą przemieszane.


Role obszarów na dysku

Boot sektor

Skok do kodu ładującego system operacyjny, opis systemu plików

MFT (Master File Table)

Tablica z wpisami dla każdego z plików

Pliki Systemowe

Szczegółowo opisane w dalszej części

Pliki

Pliki użytkownika



Boot Sektor przechowuje wskazanie na MFT, która z kolei zawiera wpisy (z metadanymi) dla każdego z plików na dysku. Pliki mogą być różnej wielkości, w związku z tym zajmują jeden lub więcej wpisów w tablicy MFT.

Jest on identyfikowany na partycji NTFS przez numer indeksu w tablicy MFT zawierający jego metadane.


W NTFS występują zarezerwowane pliki systemowe. Niosą one w sobie niezbędne informacje o systemie plików. W poniższej tabeli przedstawiono indeks w MFT i nazwę pliku.



0 - $Mft

1 - $MftMirr

2 - LogFile

3 - Volume

4 - $AttrDef

5 - $

6 - Bitmap

7 - Boot

8 - BadClus

9 - Secure

10 - $Upcase

11 - $Extend

12-15 - zarezerwowane



Opis poszczególnych plików

$Mft

MFT

$MftMirr

Kopia pierwszych 4 sektorów MFT

$LogFile

Dziennik transakcyjny

$Volume

Informacje dotyczące partycji

$AttrDef

Tablica atrybutów używanych dla każdego z wpisów w MFT

$

Katalog główny partycji

$Bitmap

Bitmapa zawierająca informacje o zajętości klastrów

$Boot

Informacje niezbędne do startu systemu

$BadClus

Informacje o zepsutych klastrach

$Secure

Zabezpieczenia

$Upcase

Tablica odpowiadających sobie małych i wielkich liter w standardzie Unicode.

$Extend

Rozszerzenia


Dane atrybutu mogą być przechowywane wewnątrz rekordu MFT (wtedy mówimy o atrybutach rezydentnych) lub poza rekordem (wtedy mówimy o atrybutach nierezydentnych). Jeśli lista atrybutów nie mieści się w jednym rekordzie MFT wtedy na potrzeby pliku rezerwowany jest kolejny rekord. Listę możliwych atrybutów przedstawiono poniżej :


Atrybut

Opis

Informacje standardowe

Zawiera informacje takie jak m. in. znaczniki czasu.

Lista atrybutów

Zawiera wskazania na wszystkie rekordów atrybutów, które nie mieszczą się w rekordzie MFT.

Nazwa pliku

Atrybut dla długich i skróconych nazw plików. Długa nazwa pliku może składać się z maksymalnie 255 znaków w standardzie Unicode. Skrócona nazwa pliku jest zapisywana w formacie 8.3 (nierozróżnialna wielkość znaków).

Deskryptor zabezpieczeń

Identyfikuje właściciela pliku oraz uprawnionych użytkowników.

Dane

Zawiera dane pliku. NTFS zezwala na występowanie wielu atrybutów danych dla jednego pliku.

ID obiektu

Identyfikator pliku (unikalny w obrębie woluminu). Wykorzystywany przez usługę śledzenia łączy (nie każdy plik posiada identyfikator obiektu).

Rejestrowany strumień pomocniczy

Zbliżony do strumienia danych, z rejestracją operacji w pliku dziennika NTFS podobnie, jak zmiany metadanych NTFS, używany przez szyfrowanie EFS.

Punkt specjalny

Używany przez punkty instalacji woluminów, a także przez sterowniki filtrów IFS (Installable File System) w celu oznaczenia niektórych plików jako specjalnych dla danego sterownika.

Indeks główny

Używany do implementowania folderów i innych indeksów

Alokacje indeksu

j.w.

Mapa bitowa

j.w.

Informacje o woluminie

Używany jedynie dla $Volume (zawiera wersję).

Nazwa woluminu.

Używany jedynie dla $Volume (zawiera etykietę).


Katalog


Do przechowywania danych katalogowych w NTFS wykorzystywane jest B-drzewo, w którym wykorzystuje się 3 rodzaje atrybutów w MFT:


1) Indeks główny – korzeń drzewa reprezentującego katalog

2) Alokacje indeksu - przechowuje węzły drzewa katalogu

3) Mapa bitowa - kontrola wolnych miejsc w katalogu


Wpis katalogowy zawiera całą nazwę pliku i kopię atrybutu „informacje standardowe” (uzasadniane jest to względami wydajnościowymi). Korzeń trzymany jest w „indeksie głównym”, wskaźniki do węzłów o wielkości 4KB przechowywane są w atrybucie „alokacje indeksu” (w postaci przedziałów bloków na dysku). Reprezentacje plików w drzewie uporządkowane są leksykograficznie po nazwach plików.



Jak dostać się do danych dyskowych?


Jeśli do opisania pliku zostały użyte tylko atrybuty rezydentne, operacja ogranicza się do sięgnięcia wprost do odpowiedniego wpisu w MFT.

Sprawa komplikuje się w przypadku atrybutów nierezydentnych, albowiem informacja o miejscu faktycznego przechowywania danych na dysku podaje przedziały. Idea polega na tym, że zapamiętywane są wskaźniki do spójnych bloków i ich rozmiar, z których czerpiemy informację, jak z nich posklejać cały plik (jak puzzle). Istotne jest także to, że nie są przechowywane bezwzględne wskaźniki do danych na dysku, lecz względne, do poprzedniego wpisu.




BIBLIOGRAFIA:


System plików FAT i FAT32:
http://support.microsoft.com/default.aspx?scid=KB;EN-US;q100108&
http://www.alumni.caltech.edu/~pje/dosfiles.html
http://www.project9.com/fat32/


System plików NTFS:
http://www.pcguide.com/ref/hdd/file/ntfs/index.htm
http://www.winntmag.com/Articles/Index.cfm?IssueID=27&ArticleID=3455

http://www.microsoft.com/poland/windows2000/