Hlavné menuPrihlásenieHľadať |
Souborové systémy FAT
sobota, 02.08.2008 11:26
V tomto článku si povíme něco o souborových systémech, jimiž byly formátovnány diskety a pevné disky v dobách MS-DOSu a "raných" verzí Windows. FAT souborové systémy se sice stále používají, ale s příchodem Windows NT byly zvláště na pevných discích nahrazeny souborovým systémem NTFS, o kterém si možná v budoucnu také něco řekneme. Cílem tohoto článku není podat informace o tom, co FAT (ne)umí či jej srovnávat s NTFS (důvody vzniku obou systémů jsou rozdílné), ale podívat se, jak to na médiu formátovaném takovýmto jednoduchým souborovým systémem vypadá. Mezi FAT souborové systémy patří FAT12, FAT16 (zkráceně zvaný FAT) a FAT32. Mezi nimi nenajdeme zásadní odlišnosti – liší se pouze v několika aspektech (velikostí záznamů v tabulce FAT, umístěním kořenového adresáře). Systém FAT12 je již celkem nezajímavý, protože jej využívaly diskety (nelze s ním formátovat média s velkou kapacitou). FAT16 se používá na USB flash discích, pokud jejich kapacita nepřesahuje řádově několik GB. FAT32 na pevných discích do velikosti 32 GB. 32 GB ale není dáno omezením souborového systému, ale Microsoftem. POmocí aplikací třetích stran samozřejmě můžete zformátovat systémem FAT32 i médium s kapacitou větší 32 GB. Struktura diskového oddílu (partition) zformátovaného systémem FATDisk se systémem FAT12 či FAT16 má tuto strukturu:
Souborový systém FAT32 je rozdělen pouze na tři oblasti
Jednotlivé oblasti nejsou zarovnány na clustery od začátku disku, jak by se mohlo zdát, ale na sektory. Nepočítejte tedy s tím, že by datová oblast začínala na celém clusteru. Rezervované sektoryTyto sektory se nacházejí hned na začátku diskového prostoru a obsahují podrobné informace o souborovém systému. Typicky se na FAT12/16 nachází jeden takový sektor – boot sektor – ve FAT32 těchto sektorů bývá třicet dva. Za rezervovanými sektory se ihned nachází tabulky FAT (žádné zarovnání na clustery!). Prvním rezervovaným sektorem je boot sektor. Jeho struktura je různá v závislosti na FATu, kterým je disk formátován. Prvních 36 bytů však mají všechny FATy společných. Struktura je následující:
V systémech FAT12 a FAT16 je struktura dalších 476ti bytů následující:
Do offsetu 0x1FE se nachází zaváděcí kód operačního systému. Posladní dva byty sektoru obsahují značku konce sektoru. Ve FAT32 to vypadá trochu jinak:
Pak opět následuje položka FsType (na 8 bytů a má mít hodnotu „FAT32 “. Offset 0x052). Do offsetu 0x1FE je pak zaváděcí kód operačního systému. Poslední dva byty jsou opět vyplněny značkou konce boot sektoru. Tabulka FATTabulky FAT se nachází hned za posledním rezervovaným sektorem. V drtivé většině případů bývají dvě. Adresa počátku první tabulky se tedy vypočítá takto:
Tabulka FAT je vlastně pole záznamů. Pro každý cluster z datové oblasti disku je zde jeden záznam, který udává stav tohoto clusteru. Velikost záznamů je 12 bitů pro FAT12, 16 bitů pro FAT16 a 32 bitů pro FAT32. První cluster datové oblasti se v tomto poli nachází pod indexem 2. První záznam (index 0) totiž obsahuje stejnou hodnotu jako BootSector.MediaDescriptor a druhý (index 1) je vyplněn jakousi značkou. Význam hodnot záznamů (pro index větší než 1) je v následující tabulce.
Pozor na to, že systém FAT32 nepoužívá ze záznamů ve FAT tabulce 32 bitů, ale pouze 28. Zbývající bity mohou mít libovolnou hodnotu (příslušné místo je proto určeno znakem „?“). Kořenový adresářFAT12 a FAT16 mají vyčleněno speciální místo pro kořenový adresář. Kořenový adresář má tedy omezenou velikost. Maximální počet položek v něm je obsažen v BootSector.RootEntriesCount. Adresu vypočítáme následujícím způsobem:
RootDir = Tabulka_FAT + BootSector.NumberOfFATs * BootSector.FATSize16 * * BootSector.BytesPerSector
Kořenový adresář (stejně jako ostatní adresáře) se skládá ze záznamů o velikosti 32 bytů, jejichž struktura bude popsána později. Určit velikost kořenového adresáře není až tak prosté, jak se zdá. Nikdo totiž netvrdí,že je zarovnán na sektory – a na sektory zarovnávat musíme. Velikost tedy dostaneme takto:
RootDir_Size = (BootSector.RootEntriesCount * * 32 + BootSector.BytesPerSector – 1) / BootSector.BytesPerSector
Tak dostaneme v sektorech – pokud chceme v bytech, musíme vynásobit BootSector.BytesPerSector. Kořenový adresář ve FAT32 má naprosto stejnou strukturu jako jakýkoli jiný adresář. Jelikož se již nachází v datové oblasti (zaujímá hned první cluster, popř. i další, obsahuje-li hodně položek), jsou clustery, které jej obsahují, popsány v tabulce FAT. To dovoluje kořenovému adresáři obsahovat mnoho položek – jednotlivé clustery pak vytvoří spojový seznam. Počátek kořenového adresáře ve FAT32 vypočítáme tedy následovně:
RootDir = Tabulka_FAT + (BootSector.NumberOfFATS * * BootSector.FATSize32) * BootSector.BytesPerSector
Datová oblastDatová oblast začíná ihned za kořenovým adresářem (v případě FAT12/16), nebo hned za posledním sektorem poslední tabulky FAT (v případě FAT32). Pro systémy FAT12/16 vypočteime počátek datové oblasti takto:
Pro FAT32 vypočítáme takto:
V datové oblasti se nacházejí adresáře a soubory. Každá adresářová položka je charakterizována záznamem dlouhým 32 bytů, který v sobě obsahuje ukazatel na první cluster dat. Rozdíl mezi souborem a adresářem je jen v tom, že adresář ve svých datech obsahuje svoje podadresáře a „podsoubory“. Jelikož nelze poznat, co jsou data adresáře a co data souboru, musíme vždy začít od kořenového adresáře a postupně se stromem propracovat. Struktura záznamu adresářové položky vypadá takto:
Každá adresářová položka má na disku záznam v této podobě. Pokud však daná položka má dlouhé jméno, tento záznam je předcházen speciálními strukturami, které to dlouhé jméno obsahují. Tyto struktury mají rovněž 32 bytů a každý z nich obsahuje 13 znaků jména položky v kódování UTF-16. Těchto záznamů je povoleno maximálně 20 pro každou adresářovou položku. Z toho tedy vyplývá maximální délka názvu souboru (adresáře) - 260 znaků. Struktura tohoto speciálního záznamu je následující:
Mějme adresářovou položku, jejíž jméno se vejde do N záznamů. Na disku to bude vypadat následovně.
Vše ukážeme na příkladu. V kořenovém adresáři diskového oddílu „C“ se nachází složka „Systém Volume Information“. Na disku to bude vypadat takto:
Z příkladu vidíme, jaký význam má pořadové číslo „dlouhého“ záznamu a také to, jak je jméno do jednotlivých struktur zapsáno – odzadu dopředu. Zjištění FAT systému, kterým je disk zformátovánTyp použitého FAT systému se zjišťuje naprosto jedinečným způsobem, který mohl vymyslet pouze opravdový génius. Géniů asi mají v Microsoftu mnoho, tudíž není divu, že technika zjištění typu FAT systému je tak dokonalá. Typ se určí tak, že se spočítá počet clusterů v datové oblasti. Je-li menší než 4086, jedná se o FAT12, je-li vypočtená hodnota mezi 4086 a 65526, jedná se o FAT16. Pokud je clusterů více než 65526, jde o FAT32. Toto je napsáno přímo ve specifikaci souborového systému FAT. Na řetězce „FATXX “, které se nachází v boot sektoru se prý nemá spoléhat. |
Fórum | IRCOdkazy |