Określenie FAT jest używane w dwóch kontekstach: jako nazwa systemu plików - części systemu operacyjnego odpowiedzialnej za zachowanie danych na nośnikach i administrację urządzeniami pamięci masowej, albo bezpośrednio jako skrót od File Allocation Table - nazwy jednokierunkowej listy alokacji plików na której wykorzystaniu opiera się tenże filesystem. Na systemie FAT opierał się DOS oraz starsze wersje systemów operacyjnych z rodziny Windows.
W rodzinie FAT wyróżniamy trzy systemy: FAT12, FAT16 i FAT32 ze względu na wielkość wpisu w tablicy FAT. Idea działania każdego z nich jest taka sama, jednakże są pewne różnice techniczne między nimi, a także w zakresie ich funkcjonalności, zastosowań i niektórych możliwości.
Dane są przechowywane w 512-bajtowych sektorach, jednakże niepraktyczne byłoby zarządzanie bezpośrednio tak małymi jednostkami. Dlatego za podstawową jednostkę alokacji uważa się klaster. Każdy klaster ma określoną ilość sektorów. Zazwyczaj od 4 do 64, co odpowiada rozmiarowi od 2048 do 32768 bajtów.
Najstarszy FAT12 był wykorzystywany we wczesnych wersjach DOS'a. Wpisy w tablicy w FAT12 są 12-bitowe więc zaadresować można 2^12, czyli 4096 klastrów, co przy rozmiarze klastra od 0,5 do 4 kB daje maksymalny rozmiar partycji 16MB. FAT12 ma zastosowanie do dyskietek i b.małych dysków.
Nowszy FAT16 stosowany w DOS'ie od wersji 3.3 używa do adresowania 16-bitowej tablicy FAT, co daje możliwość zaadresowania 65256 klastrów, o rozmiarze od 2 do 32 kB. Czyli największy możliwy do obsłużenia rozmiar partycji to 2GB. FAT16 stosowany jest przy dyskach twardych małych i średnich rozmiarów.
Najnowszy FAT32 stosowany od Windows 95 używa do adresowania 28-bitowych tablic co przy klastrze rozmiaru 8kB daje maksymalny rozmiar partycji 2TB!
Strukturę partycji FAT przedstawia schemat:
Bootsector - pierwszy sektor napędu logicznego, zawiera dane dotyczące partycji, np. jej rozmiar w sektorach, liczbę i wielkość tablic FAT, rozmiar klastra, jeżeli z napędu można uruchamiać system to w bootsectorze jest także bootstraploader - program uruchamiający się automatycznie, inicjalizujący wczytanie systemu operacyjnego.
Tablica FAT - jest miejscem, gdzie są trzymane informacje o klastrach. Każdy klaster ma w FAT swój zapis w którym jest określone jak jest on wykorzystany. Zapisy w FAT są używane do określania które klastry należą do których plików oraz do łączenia ich w pliki. W rzeczywistości każdy dysk posiada jeszcze co najmniej jedną kopię FAT, na wypadek zniszczenia oryginału, żeby było możliwe jego odtworzenie. Jednakże rozwiązanie to wcale nie jest dobre, gdyż zapasowa kopia jest trzymana tuż za oryginałem i w przypadku wykrycia bad sectorów w oryginale jest duże prawdopodobieństwo, że uszkodzona jest również kopia. Poza tym narzędzia systemowe często duplikują FAT, i może się okazać, że zostanie skopiowana jakaś usterka zanim zostanie wykryta. W tablicy FAT wyróżniamy zastrzeżone wpisy oznaczające:
pusty klaster - 0000 (FAT12 i FAT16), 00000000 (FAT32)
uszkodzony klaster - 0FF7 (FAT12), FFF7 (FAT16), 0FFFFFF7 (FAT32)
koniec klastra (koniec pliku) - 0FF8 do 0FFF (FAT12), FFF8 do FFFF (FAT16), 0FFFFFF8 do 0FFFFFFF (FAT32)
Katalog główny - jest to jedyny katalog zakładany automatycznie podczas formatowania dysku. Dla użytkownika jest widoczny w postaci znaku \. Jednocześnie jest to miejsce gdzie zaczyna się obszar plików. Katalog główny zajmuje 32 sektory i może pomieścić do 512 plików lub podkatalogów. W systemie FAT32 katalog główny jest wpisany do tablicy FAT jako łańcuch klastrów i nie zajmuje na dysku miejsca o predefiniowanym rozmiarze. Zniesiono również ograniczenie 512 wpisów. Początek katalogu głównego jest wyspecyfikowany w przypadku FAT32 w sektorze startowym.
Obszar danych - pozostały na dysku obszar po odjęciu od ogólnej liczby jednostek alokacji części zajętych przez system i katalog główny.
Każdy plik na dysku znajduje się w jakimś katalogu. Katalog także jest plikiem, tyle, że posiada specjalną strukturę i posiada szczególne znaczenie z punktu widzenia systemu operacyjnego. Katalog jest tablicą zawierającą informacje o plikach i podkatalogach wewnątrz oraz wskaźniki do początków ich danych na dysku.
Każdy zapis w pliku katalogu składa się z 32 bajtów i zawiera następujące informacje (w tej kolejności):
Ponadto:
Każdy zwykły katalog posiada dwa specjalne zapisy:
. (kropka) - odnosząca się do bieżącego katalogu
.. (dwie kropki) - odnoszące się do nadkatalogu.
W systemie FAT pliki mają nazwy w klasycznej postaci składającej się z ustalonego dwuczęściowego formatu:
nazwa pliku - ciąg długości od 1 do 8 złożony z dozwolonych znaków (liter, cyfr i symboli $ % @ ' - _ ( ) ~ ! # ^ & )
rozszerzenie - opcjonalna część nazwy składająca się z ciągu długości od 0 do 3 znaków jak wyżej.
Rozszerzenia pełnią rolę oznaczeń typów plików i są w związku z tym pewne konwencje nazewnicze. Z drugiej jednak strony nie ma formalnych przeszkód do nazywania plików w dowolny inny sposób, byle prawidłowy.
W systemie Windows95 wprowadzono nazwy o długości do 255 znaków. Założeniem tej innowacji było nie tylko zniesienie ograniczenia do formatu 8.3, lecz także, aby z "nowych" nazw mogły korzystać "stare" aplikacje i żeby te nazwy dawało się zapisać na dosowych partycjach. Długie nazwy były częścią Virtual FAT (VFAT) stworzonego na potrzeby Widows95. Ponadto dopuszczone do stosowania w nazwach zostały kolejne znaki: + , ; = [ ]. Żeby zachować kompatybilność ze starymi programami wprowadzono automatyczne aliasowanie długich nazw. Odbywa się ono następująco:
rozszerzenie nazwy długiego pliku staje się rozszerzeniem nazwy aliasu
pierwsze sześć znaków nie będących spacjami w długiej nazwie jest analizowane, jeśli są niedozwolone w krótkim formacie, to w aliasie są zamieniane na znaki podkreślenia; wszystkie znaki małych liter są zamieniane na znaki wielkich liter; te sześć znaków staje się pierwszymi sześcioma znakami nazwy aliasu
pozostałe dwa znaki nazwy aliasu zostają określone jako ~1, w przypadku, gdy taki plik już istnieje ~2 itd.
Długie nazwy są zapisywane przy użyciu kilku sztuczek:
są zapisywane w plikach fikcyjnych katalogów, stworzonych specjalnie do tego celu
żeby uniknąć pomyłek mają one nadawane dziwną kombinację atrybutów: Read Only + Hidden + System + Volume label
Struktura rozwinięcia nazwy (dla kawałka 13 kolejnych znaków):
1 bajt - pierwsze 6 bitów określa numer fragmentu nazwy, bit 7 wskazuje czy to jest ostatni kawałek nazwy, bit 8 mówi, czy plik został usunięty lub jego nazwa skrócona
10 bajtów - pierwsze 5 znaków
1 bajt - atrybut (zawsze = F)
1 bajt - zarezerwowany (zawsze =0)
1 bajt - suma kontrolna wersji krótkiej 8.3
12 bajtów - 6 kolejnych liter
2 bajty - numer początkowego klastra (zawsze =0)
4 bajty - dwie ostatnie litery
Problemy z długimi nazwami:
wykrywanie przez starsze wersje narzędzi systemowych specjalnych plików jako błędnych i "poprawianie" ich
gubienie długiej nazwy przez stare aplikacje
nadpisywanie i duplikowanie aliasów
są związane z ich właściwościami.
mają charakter binarny, tzn. dany atrybut przysługuje plikowi lub nie.
można łączyć w kombinacje (bitowe sumowanie)
nie są chronione i można je zmieniać
Opis atrybutów przedstawia poniższa tabelka:
Atrybut |
Opis |
Kod bitowy |
Read-Only |
większość aplikacji nie pozwoli modyfikować, ani kasować tego pliku |
00000001 |
Hidden |
w normalnych warunkach nie jest wyświetlany przy listowaniu katalogu, chyba że podano odpowiedni parametr |
00000010 |
System |
pliki systemowe, które nie powinny być zmieniane, ani usuwane (może to mieć przykre konsekwencje) |
00000100 |
Volume Label |
etykieta dysku - przechowywana w katalogu głównym w postaci zapisu jako nazwa pliku w którym ustawiono ten atrybut |
00001000 |
Directory |
ten atrybut odróżnia pliki od katalogów |
00010000 |
Archive |
plik archiwalny - atrybut ten jest używany do metakomunikacji między aplikacjami, oznacza starszą wersję pliku, który może być backupowany |
00100000 |