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 i średnie |
średnie i duże |
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
|
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:
Nazwa w formacie 8.3 (11 bajtów) – name + ext
Atrybuty (1 bajt, opisany dalej) – attr
Czas utworzenia (3 bajty) – ctime_ms + ctime
Data utworzenia (2 bajty) – cdate
Data ostatniego dostępu (2 bajty) – adate
Czas ostatniej modyfikacji (2 bajty) – time
Data ostatniej modyfikacji (2 bajty) – date
Numer początkowego klastra w tablicy alokacji plików (2 bajty) – start
Rozmiar pliku (4 bajty) – size
Wielkość liter nazwy i rozszerzenia pliku (1 bajt) – lcase
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.
Numer fragmentu (1 bajt) – id
Pierwszych 5 liter nazwy (10 bajtów) – name0_4
Kolejnych 6 liter nazwy (12 bajtów) – name5_10
Ostatnie 2 litery nazwy (4 bajty) – name11_12
Numer początkowego klastra (2 bajty, zawsze 0) - start
Atrybut (1 bajt) – attr
Suma kontrolna krótkiej nazwy (1 bajt) – alias_checksum
Zarezerwowane (1 bajt) – reserved
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:
Zapewnia obsługę dysków o dużej pojemności (64-bitowe adresowanie)
Wbudowana kompresja danych
Szyfrowanie
Kronikowanie
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.
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.
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/