TLUSTÝ

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 18. června 2022; kontroly vyžadují 2 úpravy .

FAT ( anglicky  File Allocation Table "file alokační tabulka") je klasická architektura souborového systému , která je díky své jednoduchosti stále široce používána pro flash disky . Používá se v disketách , paměťových kartách a některých dalších paměťových médiích. Dříve se používal i na pevných discích.

Vyvinuli Bill Gates a Mark McDonald v letech 1976-1977 [1] [2] . Byl používán jako hlavní souborový systém v operačních systémech rodiny MS-DOS a Windows 9x .

Struktura FAT se řídí standardem ECMA-107 a je podrobně definována oficiální specifikací Microsoftu známou jako FATGEN [3] .

Verze systému FAT

Existují čtyři verze FAT - FAT12 , FAT16 , FAT32 a exFAT (FAT64) . Liší se bitovostí záznamů ve struktuře disku, tedy počtem bitů vyhrazených pro uložení čísla clusteru. FAT12 se používá hlavně pro diskety , FAT16 pro malé disky. Na základě FAT byl vyvinut nový souborový systém exFAT (extended FAT), používaný především pro flash disky .

Zpočátku FAT nepodporoval hierarchický adresářový systém – všechny soubory byly umístěny v kořenovém adresáři disku. Bylo to provedeno pro jednoduchost, protože na jednostranných disketách s kapacitou pouhých 160–180 KB prostě nemělo smysl třídit pár souborů do adresářů. S rozšířením disket o velikosti 320 a více kilobajtů se ukládání všech souborů do kořenového adresáře ukázalo jako nepohodlné, kromě toho malá velikost kořenového adresáře omezovala počet souborů na disku. Adresáře byly představeny s vydáním MS-DOS 2.0.

Různé operační systémy také implementovaly různá rozšíření FAT. Například DR-DOS má další atributy přístupu k souborům; ve Windows 95 , Linux  - podpora dlouhých názvů souborů (LFN) ve formátu Unicode (Virtual FAT - VFAT); na OS/2  rozšířené atributy všech souborů.

VFAT

VFAT  je rozšíření FAT představené ve Windows 95 . V systému FAT jsou názvy souborů ve formátu 8.3 a skládají se pouze ze znaků ASCII . Do VFAT byla přidána podpora dlouhých (až 255 znaků) názvů souborů ( Long File Name, LFN ) v kódování UTF-16LE ,  zatímco LFN jsou uloženy současně s názvy ve formátu 8.3, zpětně nazývané SFN ( English Short File Name ). LFN při vyhledávání nerozlišují velká a malá písmena, avšak na rozdíl od SFN, které se ukládají velkými písmeny, si LFN zachovávají velikost písmen zadanou při vytvoření souboru [4] [5] .  

Struktura systému FAT

V systému souborů FAT jsou souvislé sektory disku sloučeny do jednotek nazývaných clustery . Počet sektorů ve shluku se rovná mocnině dvou (viz níže). Pro ukládání dat souboru je alokován celočíselný počet clusterů (alespoň jeden), takže pokud je například velikost souboru 40 bajtů a velikost clusteru je 4 KB, bude ve skutečnosti pouze 1 % prostoru pro něj přiděleného. obsazené informacemi o souboru. Aby se takovým situacím předešlo, je vhodné zmenšit velikost clusterů a naopak snížit množství adresových informací a zvýšit rychlost souborových operací. V praxi se volí určitý kompromis. Vzhledem k tomu, že kapacita disku nemusí být vyjádřena celočíselným počtem clusterů, obvykle na konci svazku existují takzvané přebytečné sektory - „zbytek“ menší než velikost clusteru, který nemůže být přidělen operačním systémem. ukládání informací.

Prostor svazku FAT32 je logicky rozdělen do tří souvislých oblastí:

FAT12 a FAT16 mají také vyhrazenou oblast pro kořenový adresář. Má pevnou pozici (bezprostředně za posledním prvkem tabulky FAT) a pevnou velikost ve 32bajtových prvcích, to znamená, že při popisu v oddílu Boot Record je to přesně počet 32bajtových prvků, který je uveden. , z nichž každý popisuje jakýkoli prvek kořenového adresáře (ať už jde o soubor nebo jiný podadresář).

Pokud cluster patří k souboru, pak odpovídající buňka v tabulce FAT obsahuje číslo dalšího clusteru stejného souboru. Pokud buňka odpovídá poslednímu clusteru souboru, pak obsahuje speciální hodnotu (0xFFFF pro FAT16). Je tak vytvořen řetězec klastrů souborů. Nuly odpovídají nepoužitým shlukům v tabulce. "Špatné" clustery (které jsou vyloučeny ze zpracování, například proto, že odpovídající oblast zařízení je nečitelná) mají také speciální kód (0xFFF7 pro FAT16).

Když je soubor odstraněn, je první znak názvu nahrazen speciálním kódem 0xE5 a řetězec clusteru souboru v alokační tabulce je resetován na nulu. Vzhledem k tomu, že informace o velikosti souboru (která se nachází v adresáři vedle názvu souboru) zůstávají nedotčeny, pokud byly shluky souborů umístěny postupně na disku a nebyly přepsány novými informacemi, lze smazaný soubor obnovit.

Spouštěcí záznam

První struktura svazku FAT se nazývá BPB ( blok parametrů BIOS  ) a nachází se ve vyhrazené oblasti, v sektoru nula. Tato struktura obsahuje informace identifikující typ souborového systému a fyzické vlastnosti média (disketa nebo oddíl pevného disku).

Blok parametrů BIOS (BPB)

BPB chyběl ve FAT, který sloužil MS-DOS 1.x, protože v té době se předpokládaly pouze dva různé typy svazků - jednostranné a oboustranné pětipalcové 320 KB diskety a formát svazku byl určen první bajt oblasti FAT. BPB byl zaveden v MS-DOS 2.x na počátku roku 1983 jako povinná struktura spouštěcího sektoru, ze které se určoval formát svazku; staré schéma detekce prvního bajtu FAT již nebylo podporováno. Také v MS-DOS 2.0 byla zavedena hierarchie souborů a složek (předtím byly všechny soubory uloženy v kořenovém adresáři).

Struktura BPB v MS-DOS 2.x obsahovala 16bitové pole „celkový počet sektorů“, což znamenalo, že tato verze FAT byla zásadně nepoužitelná pro objemy větší než 2 16 = 65 536 sektorů, tedy více než 32 MB se standardní velikostí sektoru 512 bajtů. V MS-DOS 4.0 (1988) bylo pole BPB rozšířeno na 32 bitů, což znamenalo zvětšení teoretické velikosti svazku na 232 = 4 294 967 296 sektorů, tedy až 2 TB s 512bajtovým sektorem.

Další modifikace BPB se objevila s Windows 95 OSR2, který představil FAT32 (v srpnu 1996). Byl odstraněn limit 2 TB na velikost svazku, svazek FAT32 může mít teoreticky velikost až 8 TB. Velikost každého jednotlivého souboru však nesmí přesáhnout 4 GB. Blok parametrů BIOS v systému FAT32 z důvodu kompatibility se staršími verzemi systému FAT opakuje BPB z FAT16 až do pole BPB_TotSec32 včetně, po kterém následují rozdíly.

"Boot sektor" FAT32 jsou ve skutečnosti tři 512bajtové sektory - sektory 0, 1 a 2. Každý z nich obsahuje signaturu 0xAA55 na adrese 0x1FE, tedy v posledních dvou bytech, pokud je velikost sektoru 512 bajtů. Pokud je velikost sektoru větší než 512 bajtů, pak je podpis obsažen jak na adrese 0x1FE, tak v posledních dvou bytech nulového sektoru, to znamená, že je duplikován.

FSInfo

Spouštěcí záznam oddílu FAT32 obsahuje strukturu nazvanou FSInfo , která se používá k uložení hodnoty volného počtu clusterů svazku. FSInfo zpravidla zabírá sektor 1 (viz pole BPB_FSInfo) a má následující strukturu (adresy vzhledem k začátku sektoru):

  • FSI_LeadSig. 4bajtový podpis 0x41615252 označuje, že sektor je používán pro strukturu FSInfo.
  • FSI_Reserved1. Interval od 4 do 483 bajtů sektoru včetně se vynuluje.
  • FSI_StrucSig. Další podpis je umístěn na 0x1E4 a obsahuje hodnotu 0x61417272.
  • FSI_Free_Count. 4bajtové pole na adrese 0x1E8 obsahuje poslední počet volných clusterů na svazku, který je systému znám. Hodnota 0xFFFFFFFF znamená, že počet volných klastrů je neznámý a musí se vypočítat.
  • FSI_Nxt_Free. 4bajtové pole na adrese 0x1EC obsahuje číslo clusteru, od kterého by mělo začít hledání volných clusterů v tabulce ukazatelů indexu. Toto pole obvykle obsahuje číslo posledního clusteru FAT přiděleného pro ukládání souborů. Hodnota 0xFFFFFFFF znamená, že hledání volného clusteru by se mělo provádět od samého začátku tabulky FAT, tedy od druhého clusteru.
  • FSI_Reserved2. Vyhrazené 12bajtové pole na adrese 0x1F0.
  • FSI_TrailSig. Signatura 0xAA550000 jsou poslední 4 bajty sektoru FSInfo.

Smyslem zavedení FSInfo je optimalizovat provoz systému, protože ve FAT32 může být tabulka ukazatelů indexu velmi velká a její vyhledávání bajt po bajtu může trvat značnou dobu. Hodnoty polí FSI_Free_Count a FSI_Nxt_Free však nemusí odpovídat skutečnosti a měly by být zkontrolovány, zda jsou adekvátní. Navíc se neaktualizují ani v záloze FSInfo, která se obvykle nachází v sektoru 7.

Určení typu objemu FAT

Určení typu FAT svazku (tj. výběr mezi FAT12, FAT16 a FAT32) provádí operační systém na základě počtu clusterů ve svazku, který je zase určen z polí BPB. Nejprve se vypočítá počet sektorů kořenového adresáře:

RootDirSectors = (BPB_RootEntCnt * 32) / BPB_BytsPerSec

Dále se určí, která z polí BPB_FATSz16/32 a BPB_TotSec16/32 se nerovna nule a použijí se k určení počtu sektorů oblasti objemových dat:

DataSec = TotSec - (BPB_ResvdSecCnt + (BPB_NumFATs * FATSz) + RootDirSectors)

Nakonec je určen počet clusterů datových oblastí:

CountofClusters = DataSec / BPB_SecPerClus

Podle počtu clusterů existuje vzájemná korespondence se systémem souborů:

  • CountofClusters < 4085 - FAT12
  • CountofClusters = 4085 ÷ 65524 - FAT16
  • Počet clusterů > 65524 - FAT32

Podle oficiální specifikace je to jediný platný způsob, jak určit typ FAT. Umělé vytvoření svazku, který porušuje zadaná pravidla mapování, způsobí, že jej systém Windows zpracuje nesprávně. Doporučuje se však vyhnout se hodnotám CountofClusters, které se blíží kritickým hodnotám (4085 a 65525), aby bylo možné správně určit typ souborového systému pomocí jakýchkoli, často nesprávně zapsaných ovladačů.

FAT12 se při formátování vždy vytvoří na disketě . Pokud jde o pevné disky a flash disky , pak při velikosti disku do 512 MB (se sektorem 512 bajtů) se ve výchozím nastavení vytvoří FAT16, přes 512 MB - FAT32. Velikost clusteru se určuje během formátování na základě systému souborů a velikosti svazku.

Pořadové číslo svazku

Sériové číslo svazku (pole BS_VolID) ve Windows 98 je vytvořeno z formátu data a času takovým způsobem, že je není možné obnovit bez dalších informací.

Tabulka FAT

Další důležitou strukturou svazku FAT je samotná tabulka FAT, která zabírá samostatnou logickou oblast. Definuje seznam (řetězec) clusterů, které hostí soubory a složky svazku. Mezi shluky a indexovými ukazateli tabulky existuje vzájemná korespondence - N-tý ukazatel odpovídá shluku se stejným číslem. Prvnímu shluku datové oblasti je přiřazeno číslo 2. Hodnota ukazatele indexu odpovídá stavu odpovídajícího shluku. Jsou možné následující stavy:

  • shluk je volný — ukazatel je vynulován;
  • shluk je obsazen souborem a není posledním shlukem souborů — ukazatel obsahuje číslo dalšího shluku souborů;
  • cluster je posledním clusterem souboru — ukazatel obsahuje štítek EOC (End Of Clusterchain), jehož hodnota závisí na verzi FAT: pro FAT12 je štítkem EOC jakákoli hodnota větší nebo rovna 0x0FF8 (0x0FFF o výchozí); pro FAT16 — větší nebo rovno 0xFFF8 (výchozí 0xFFFF); pro FAT32 jakákoli hodnota větší nebo rovna 0x0FFFFFF8 (výchozí 0x0FFFFFFF);
  • cluster je poškozen — ukazatel obsahuje speciální popisek, jehož hodnota je 0x0FF7 pro FAT12, 0xFFF7 pro FAT16 a 0x0FFFFFF7 pro FAT32. Poškozený cluster nemůže souborový systém použít k ukládání dat; odpovídající ukazatele nejsou ovlivněny při formátování svazku, když jsou všechny ostatní ukazatele nastaveny na nulu;
  • cluster je vyhrazen "pro budoucí standardizaci" - ukazatel obsahuje hodnotu větší než CountofClusters, ale menší než označení poškozeného clusteru (tj. do 0xFFF6 včetně pro FAT16). V tomto případě je cluster, který neodpovídá žádným reálným datům, považován za zaneprázdněný a je přeskočen při hledání volného, ​​ale nejsou o něm poskytovány žádné další informace.

Shluky 0 a 1 se odrážejí samostatně pomocí FAT. Ukazatel indexu odpovídající nule shluku (úplně první ukazatel tabulky FAT) obsahuje hodnotu BPB_Media v dolních 8 bitech; zbývající bity jsou nastaveny na 1. Pokud například BPB_Media = 0xF8 (pevný disk), FAT[0] = 0x0FFFFFF8 pro FAT32. Tedy formálně FAT[0] = EOC, který se používá při zpracování souborů s nulovou velikostí (viz níže).

Druhý rezervovaný ukazatel, FAT[1], je při formátování nastaven na hodnotu značky EOC. Ve FAT12 se již nijak nepoužívá a ve FAT16 a FAT32 mohou horní dva bity tohoto ukazatele obsahovat značku o nutnosti zkontrolovat hlasitost (tzv. „ špinavý bit “) a všechny ostatní bity jsou nastaveny na 1. Přítomnost špinavého bitu se kontroluje během procesu spouštění systému Windows autochk.exe programem. Nečistý bit se generuje, když svazek není správně odpojen nebo když má médium hardwarovou chybu, a proto nabývá dvou možných hodnot.

Indexový ukazatel FAT32 má podle definice 32 bitů, ale horní 4 bity jsou ve skutečnosti ignorovány, takže hodnota ukazatele je ve skutečnosti 28 bitů. Jedinou operací, která funguje na horních 4 bitech ukazatele, je formátování svazku, které resetuje celý ukazatel. To znamená, že například hodnoty ukazatele 0x10000000, 0xF0000000 a 0x00000000 všechny odpovídají volnému clusteru, protože se liší pouze v horních 4 bitech.

Hodnota velikosti tabulky BPB FAT, tj. BPB_FATSz16/32, může být větší než skutečná, takže na konci každé tabulky FAT mohou být sektory, které neodpovídají žádným reálným datovým shlukům. Při formátování se tyto sektory vynulují a při provozu svazku se nijak nepoužívají. Skutečná adresa posledního sektoru tabulky FAT, který obsahuje ukazatele na skutečné svazky svazků, se proto musí vždy vypočítat z celkového počtu shluků datové oblasti, nikoli z pole BPB_FATSz16/32. Navíc poslední sektor obsazený tabulkou FAT jí nemusí být nutně zcela obsazen – v tomto případě se nadbytečný prostor sektoru také nevyužije a při formátování svazku se zaplní nulami.

Záznamy souborů

Bezprostředně za koncem poslední tabulky FAT je datová oblast obsahující soubory a složky. Adresář FAT je běžný soubor označený speciálním atributem. Data (obsah) takového souboru v jakékoli verzi FAT je řetězec 32bajtových záznamů souborů (záznamů adresářů). Adresář normálně nemůže obsahovat dva soubory se stejným názvem. Pokud program pro kontrolu disku nalezne ve stejném adresáři uměle vytvořenou dvojici shodně pojmenovaných souborů, jeden z nich se přejmenuje.

Kořenový adresář

Jediný adresář, který musí být přítomen, je kořenový adresář. Ve FAT12/FAT16 má kořenový adresář pevnou velikost v sektorech, která se vypočítává z hodnoty BPB_RootEntCnt a řídí se tabulkou FAT na disku.

V systému FAT32 má kořenový adresář, stejně jako každý jiný, proměnnou velikost a je řetězcem shluků. Číslo prvního clusteru kořenového adresáře odráží BPB_RootClus. Kořenový adresář se liší od ostatních adresářů na svazku FAT následujícími způsoby:

  • nemá žádné datum a čas;
  • žádné vlastní jméno (kromě "\");
  • neobsahuje soubory s názvem "." a ".." (viz níže);
  • je jediný adresář, který může normálně obsahovat soubor jmenovky svazku (viz níže).
Struktura záznamu souboru

Záznam souboru FAT32 se skládá z následujících struktur:

  • Název_adresáře. 11bajtové pole na relativní adrese 0 obsahuje krátký název souboru (podle standardu 8.3). Názvy souborů viz níže.
  • DIR_Attr. Bajt na adrese 0x0B, zodpovědný za atributy souboru.
  • DIR_NTres. Bajt na adrese 0x0C, používané ve Windows NT.
  • DIR_CrtTimeTenth. Bajt na adrese 0x0D. Počet desítek milisekund doby vytvoření souboru, platné hodnoty jsou 0–199. Pole je často zbytečně ignorováno.
  • DIR_CrtTime. 2 bajty na adrese 0x0E. Doba vytvoření souboru s přesností na 2 sekundy.
  • DIR_CrtDate. 2 bajty na adrese 0x10. Datum vytvoření souboru.
  • DIR_LstAccDate. 2 bajty na adrese 0x12. Datum posledního přístupu k souboru (tedy posledního čtení nebo zápisu - v druhém případě se rovná DIR_WrtDate). Žádné podobné pole pro čas neexistuje.
  • DIR_FstClusHI. 2 bajty na adrese 0x14. Číslo prvního clusteru souboru (vysoké slovo, nula na svazku FAT12/FAT16).
  • DIR_WrtTime. 2 bajty na adrese 0x16. Čas posledního záznamu (úpravy) souboru, například jeho vytvoření.
  • DIR_WrtDate. 2 bajty na adrese 0x18. Datum posledního záznamu (úpravy) souboru včetně vytvoření.
  • DIR_FstClusLO. 2 bajty na adrese 0x1A. Číslo prvního clusteru souboru (nízké slovo).
  • DIR_FileSize. DWORD obsahující hodnotu velikosti souboru v bajtech. Základním omezením FAT32 je, že maximální povolená velikost souboru je 0xFFFFFFFF (tj. 4 GB mínus 1 bajt).

Pokud první bajt položky FAT (tj. DIR_Name[0]) obsahuje 0xE5 nebo 0x05, znamená to, že položka je volná (odpovídající soubor byl smazán). Nula v DIR_Name[0] znamená, že nejen tento záznam je volný, ale i všechny následující položky adresáře; Systém Windows neanalyzuje zbytek adresáře po vynulované položce.

Název souboru ve FAT

Pole DIR_Name je logicky rozděleno na prvních 8 znaků, které tvoří název souboru, a na poslední 3, které tvoří příponu. Tečka oddělovače se přidává na úrovni operačního systému a neukládá se do pole názvu. Pokud název souboru a přípona nevyplňují prostor pro ně přidělený, zbývající bajty pole DIR_Name jsou vyplněny mezerami (0x20). Název a přípona souboru může obsahovat libovolnou kombinaci písmen, číslic nebo znaků s kódy ASCII většími než 127; speciální znaky jsou rozděleny do tří skupin:

  • Povoleno: ! # $ % & () - @ ^ _ ` { } ~ '
  • Zakázáno: +.; =[]
  • Služba: * ? <: > / \ | "

Znaky služby mají v DOS a Windows zvláštní význam a nemohou být součástí názvu souboru (znaky * ? jsou metaznaky a znaky : / \ se používají jako oddělovače v cestách k souborům , ostatní servisní a nepovolené znaky jsou řídicí znaky v interpretech příkazového řádku COMMAND. COM a cmd.exe ), zatímco zakázané znaky mohou být stále zahrnuty do názvu souboru za cenu položky LFN (viz níže). Například adresář s názvem začínajícím tečkou nebo obsahujícím více teček lze vytvořit v režimu příkazového řádku ( mkdir .directory) nebo v prostředích jako FAR Manager , Total Commander , WinRAR . Název souboru nemůže začínat ani končit mezerou; v žádném bajtu pole názvu nejsou povoleny žádné řídicí znaky ASCII (tj. 0x00-0x1F), s výjimkou výše uvedeného případu kódu 5. Informace o aktuální (v době vytvoření souboru) kódové stránce DOS není uloženo, takže přístup k souborům, jejichž názvy obsahují národní kódy z Extended ASCII (například znaky azbuky z kódové stránky 866 ), s jinou kódovou stránkou může být problematický až nemožný (protože před vyhledáním souboru v adresáři se jeho jméno se převede na velká písmena v souladu s tabulkou uvedenou na kódové stránce). Úplná cesta k souboru nesmí přesáhnout 80 bajtů (3 je písmeno jednotky; 64 je cesta; 12 je název souboru včetně oddělovače; 1 je znak nuly terminálu).

Všechny 8.3 abecední znaky jména jsou vždy přeloženy a uloženy v poli DIR_Name velkými písmeny. Bajt DIR_NTres se používá k zachování původních velkých a malých písmen názvu systému Windows NT : 1 v bitu 3 říká, že název má být zobrazen malými písmeny; za příponu je zodpovědný bit 4. Pokud název nebo přípona obsahuje znaky obou pádů, vytvoří se pro takový soubor záznam LFN (viz níže). Windows 9x vždy vytvoří položku LFN, aby se zachovala netriviální velikost názvu a ignoruje pole DIR_NTres. V důsledku toho může být název stejného souboru bez přidružené položky LFN zobrazen ve Windows 9x celý velkými písmeny, ale Windows NT (částečně) malými písmeny.

Atributy souboru

V bajtu atributu jsou horní dva bity rezervovány a musí být vždy nastaveny na nulu. Zbývající bity jsou distribuovány tak, že hodnota 0x01 odpovídá atributu "pouze pro čtení", 0x02 - "skryto", 0x04 - "systém", 0x20 - "archivováno". Součtem základních hodnot je vytvořena sada několika atributů. Kromě těchto standardních atributů se používají následující: 0x10 - označuje, že soubor je adresář (kontejner pro jiné soubory); 0x08 - ATTR_VOLUME_ID, speciální atribut jedinečného souboru nulové velikosti v kořenovém adresáři, jehož název je považován za jmenovku svazku. Limit jmenovky svazku FAT na 11 znaků souvisí s velikostí pole DIR_Name. Pokud má soubor READ_ONLY | SKRYTÝ | SYSTÉM | VOLUME_ID (hodnota 0x0F), to znamená, že položka neodpovídá samostatnému souboru, ale obsahuje část dlouhého názvu jiného souboru, který se nehodí do rámce 8.3 (viz níže).

Umělé přiřazení nenulové hodnoty horním dvěma bitům DIR_Attr se používá k vytvoření souborů, které nelze smazat nebo přejmenovat standardními prostředky souborového systému bez formátování. To se hodí například při boji s viry Autorun.inf (program Panda USB a AutoRun Vaccine). Na druhou stranu viry samotné mohou používat stejný nástroj. Hodnota DIR_Attr = 0x40 je vyhrazena pro interní použití (zařízení).

Co se stane, když je vytvořen adresář

Když je adresář vytvořen, nastaví se pro něj „pro život“ DIR_FileSize = 0. Velikost obsahu adresáře se určí jednoduchým sledováním řetězců shluků až ke značce End Of Chain. Velikost samotného adresáře je omezena systémem souborů na 65 535 32bajtových záznamů (to znamená, že adresářové záznamy v tabulce FAT nemohou přesáhnout 2 MB). Tento limit má urychlit operace se soubory a umožnit různým obslužným programům používat 16bitové celé číslo (WORD) k počítání počtu položek v adresáři (v důsledku toho existuje teoretický limit na počet souborů v adresáři). - 65 535, za předpokladu, že všechny názvy souborů odpovídají standardu 8.3). Adresáři je přiřazen jeden klastr datové oblasti (pokud se nejedná o kořenový adresář FAT12/FAT16) a pole DIR_FstClusHI / DIR_FstClusLO jsou nastavena na hodnotu tohoto čísla klastru. Do tabulky FAT je umístěn štítek EOC pro položku odpovídající tomuto shluku a samotný shluk je vyplněn nulami. Dále se vytvoří dva speciální soubory, bez kterých je adresář FAT považován za poškozený (první dvě 32bajtové položky v oblasti dat clusteru) - soubory nulové velikosti s názvy "." (jedna tečka, identifikátor adresáře) ​​a ".." (dvě tečky, ukazatel na nadřazený adresář). Datum a časová razítka těchto souborů jsou nastavena na hodnoty pro samotný adresář v době vytvoření a nejsou aktualizovány, když se adresář změní. Pole DIR_FstClusHI / DIR_FstClusLO pole "." obsahovat hodnotu čísla clusteru, který jej obsahuje, a soubor ".." - číslo prvního clusteru adresáře obsahujícího daný. Tedy soubor "." odkazuje na samotný adresář a soubor ".." odkazuje na počáteční cluster nadřazeného adresáře; pokud je nadřazeným adresářem kořenový adresář, je počáteční klastr považován za nulový.

Čas a datum

Dvoubajtové datumové razítko má následující formát:

  • bity 0-4 — den v měsíci, hodnoty 1-31 jsou povoleny;
  • bity 5–8 — měsíc v roce, hodnoty 1–12 jsou povoleny;
  • bity 9-15 - rok, počítáno od roku 1980 ("epocha MS-DOS"), jsou možné hodnoty od 0 do 127 včetně, to znamená 1980-2107.

Dvoubajtové časové razítko má následující formát:

  • bity 0-4 - počítadlo sekund (každý dva), platné hodnoty jsou 0-29, tj. 0-58 sekund;
  • bity 5-10 jsou minuty, platné hodnoty jsou 0-59;
  • bity 11-15 jsou hodiny, platné hodnoty jsou 0-23.

Z datových a časových razítek je kritický pouze čas poslední změny (tj. DIR_WrtTime a DIR_WrtDate), zbytek nemusí být podporován mnoha systémy; při práci se souborem v takovém systému (například v DOS nebo Windows 3.1) jsou tato pole ignorována. FAT ukládá datum a čas podle místního časového pásma, při jeho změně se značky nemění.

Časová razítka pro adresáře se nastavují při jejich vytvoření a nemění se, když jsou do adresáře zapsány nové soubory, přejmenovány nebo je mu přidělen nový cluster.

Datum posledního přístupu k souboru se aktualizuje při každém přístupu, například při zobrazení vlastností souboru, při přesunu na jiný svazek (ale ne v rámci svazku). Při kopírování souboru v systému Windows 98 se aktualizuje datum posledního přístupu k původnímu souboru, ale nikoli v systému Windows XP.

Datum-čas úpravy souboru se změní vždy, když je do datové oblasti zapsán nový obsah (nikoli záznam souboru). Jinými slovy, při změně atributů nebo přejmenování souboru se datum-čas změny nezmění. Přesunutí nebo kopírování souboru zachová původní značku úpravy.

Datum a čas vytvoření se nastaví při přidělení záznamu souboru pro nový soubor, který dříve neexistoval. Jinými slovy, když se soubor přejmenuje nebo přesune, datum a čas vytvoření se nezmění, ale po zkopírování dostane nový soubor nové razítko. Při kopírování souboru v systému Windows tedy může skončit s datem vytvoření, které je pozdější než datum úpravy.

Záznamy LFN

Soubory a adresáře s dlouhým názvem (větším než 8.3) jsou systémem souborů FAT zpracovávány zvláštním způsobem. Struktura 32bajtového záznamu pro soubor s LFN (Long File Name) se liší od běžného záznamu (SFN):

  • LDIR_Ord. První bajt položky se používá k číslování položek v sadě.
  • LDIR_Name1. 10bajtové pole na adrese 0x01 obsahuje prvních pět znaků názvu souboru (nebo spíše část jeho názvu, která se odráží v tomto záznamu LFN).
  • LDIR_Attr. Bajt atributu na adrese 0x0B je 0x0F (ATTR_LONG_NAME).
  • LDIR_Type. Bajt na adrese 0x0C je nastaven na nulu a navíc označuje, že tato položka v tabulce FAT odkazuje na soubor s dlouhým názvem.
  • LDIR_Chksum. Byte na adrese 0x0D obsahuje kontrolní součet SFN aliasu souboru odpovídajícího sadě záznamů LFN.
  • LDIR_Name2. 12bajtové pole na adrese 0x0E obsahující znaky 6 až 11 názvu souboru.
  • LDIR_FstClusLO. 2bajtové pole na adrese 0x1A nemá v kontextu záznamu LFN žádný význam a je nastaveno na nulu.
  • LDIR_Name3. 4bajtové pole na adrese 0x1C obsahující 12. a 13. znak názvu souboru.

Sada položek LFN v adresáři FAT musí být vždy spojena s běžnou položkou SFN, která je na disku fyzicky předřazena. Sada záznamů LFN nalezená bez odpovídajícího normálního záznamu se nazývá sirotek a záznam je považován za poškozený; takový soubor je ve starších verzích MS-DOS/Windows zcela neviditelný.

V posloupnosti záznamů LFN má každý z nich své vlastní pořadové číslo určené prvním bajtem (LDIR_Ord). Maska 0x40 označuje, že tato položka je poslední v řadě položek LFN, která za ní následuje (to znamená, že například pro třetí položku LFN v řadě bude hodnota bajtu LDIR_Ord 0x43, pro 17. - 0x51 ). V následujících záznamech se tento bajt změní z N pro N-tý "dlouhý" záznam v účtu z odpovídající normální na 1 pro nejbližší normální záznam.

Dlouhé názvy souborů jsou uloženy v kódování Unicode ( UTF-16 ), při zachování velikosti písmen zadávaných abecedních znaků. Pokud určitý znak názvu OEM nebo Unicode nelze převést na znak kódové stránky, zobrazí se vždy jako znak podtržení "_" a skutečný znak uložený na disku se nezmění.

Byte kontrolního součtu se vypočítá podle určitého algoritmu založeného na 8.3-jménu běžného záznamu (u souboru s dlouhým názvem se „jméno“ z běžného záznamu nazývá alias – alias) a zkopíruje se do všech „dlouhých “ záznamy, které tomu odpovídají. Pokud je některá z hodnot nekonzistentní s názvem souboru (například pokud byl soubor přejmenován v dřívější verzi MS-DOS/Windows), dojde k sirotku.

Alias ​​souboru SFN s dlouhým názvem se skládá z těla a v případě potřeby z digitálního „ocasu“. Pokud má soubor příponu, jsou jeho první tři znaky uloženy v aliasu. Odpovídající název je tvořen překladem znaků dlouhého názvu souboru do kódování OEM, přičemž všechny mezery dlouhého názvu jsou ignorovány a znaky, které nelze přeložit v OEM nebo jsou zakázány v kontextu krátkého názvu, jsou nahrazeny podtržítko "_". Číslicový konec "~n", kde n = 1 ÷ 999999, je přidán k aliasu, pokud původně získaný alias byl v konfliktu s názvem libovolného souboru ve stejném adresáři nebo byl delší, než definuje standard 8.3, nebo pokud jakýkoli znak při změna kódování nenašla OEM protějšek a byla nahrazena podtržítkem. Tak se vytvoří aliasy jako NEWFIL~1.DJV (LFN = Nový soubor pro me.djvu). Schéma aliasingu souborů je optimalizováno pro rychlost, a proto je v detailech nepředvídatelné.

Název souboru, který není násobkem 13 znaků, zcela nevyplňuje pole názvů položek LFN v tabulce FAT. V tomto případě je název souboru uměle ukončen znakem NUL (0x00) a přebytečné bajty jsou zaneseny jedničkami (tedy znaky 0xFF).

U dlouhých jmen je délka názvu omezena na 255 znaků, nepočítaje oddělovač NUL, a úplná cesta je omezena na 260 znaků, včetně NUL. Dlouhý název také umožňuje použití šesti speciálních znaků, které jsou v krátkých jménech zakázány: +,; =[]

Pokud se pokusíte vytvořit soubor nebo adresář na svazku FAT32 s názvem obsahujícím takový znak, automaticky se vygeneruje položka LFN, bez ohledu na délku názvu souboru. K podobnému procesu dochází při vytváření souboru/složky s názvem obsahujícím jiné než ASCII znaky.

Je možné, že soubor jmenovky svazku fyzicky nepředchází všechny položky ve svazku s dlouhými názvy (když svazek štítek nemá nebo pokud byl štítek přiřazen poté, co byl zapsán nějaký soubor s dlouhým názvem). Potom se jmenovka svazku ve FAT12/FAT16 nezobrazí správně, protože bude převzata z nejbližšího záznamu LFN (protože má také atribut VOLUME_ID), a pokud se pokusíte změnit jmenovku svazku, název odpovídajícího souboru bude skutečně porušen. Při mazání souboru, který má přidružené záznamy LFN, nejsou tyto záznamy ovlivněny a stávají se sirotkem. Při dalším vytváření nového souboru k němu může být zmíněný sirotek chybně přidružen, pokud se kontrolní součty názvů starých a nových souborů shodují, avšak použitý algoritmus výpočtu kontrolního součtu (kód ASCII prvního znaku souboru alias se cyklicky posouvá o bit doprava a přidává se kód dalšího znaku atd. d) činí tuto pravděpodobnost zanedbatelnou.

Význam souborových operací ve FAT

Formátování svazku  - tabulka ukazatelů indexu je vynulována, s výjimkou prvních tří (FAT[0] a FAT[1] jsou vyhrazeny a FAT[2] obsahuje záznam odpovídající souboru jmenovky svazku, nebo pokud chybí označení EOC) a záznamy o poškozených shlucích; položky kořenového adresáře jsou nastaveny na nulu (kromě souboru jmenovky svazku, pokud existuje), jinak není datová oblast ovlivněna.

Smazání souboru  - první znak záznamu souboru a všech souvisejících záznamů LFN je nahrazen kódem 0xE5; clustery obsazené souborem jsou v tabulce FAT označeny jako volné, ale clustery v datové oblasti nejsou ovlivněny.

Vytvoření souboru nebo adresáře příkazem "Nový" z kontextového menu - pro nový "prázdný" soubor se vytvoří záznam s výchozím názvem (například "Nová složka") a velikostí určenou typem souboru; samotný soubor, pokud má nenulovou velikost (což platí pro téměř všechny "prázdné" soubory, kromě adresářů a textových dokumentů), je zapsán do datové oblasti v jemu přidělených clusterech; odpovídající řetězec clusteru je vytvořen v tabulce FAT. Po zadání platného názvu souboru (nikoli výchozího) se původně vytvořený záznam souboru označí jako odstraněný a vytvoří se nový.

Přejmenování souboru  - vytvoří se nový záznam s aktualizovaným názvem; starý záznam je označen jako smazaný.

Uložení souboru z aplikace (ne z příkazové řádky) - vytvoří se záznam obsahující všechna pole kromě velikosti a počátečního clusteru souboru; po uložení souboru se vytvoří nový záznam obsahující všechna pole a starý záznam se odstraní.

Kopírování souboru  - v novém umístění se vytvoří identický záznam souboru (možná kromě některých časových razítek, viz výše), souboru se přiřadí první volný cluster a obsah souboru se zkopíruje do nového umístění, přičemž se zkopíruje aktuální cluster, vyhledání dalšího volného a vyplnění tabulky FAT .

Přesunutí souboru (mezi různými svazky) – zkopírování a následné smazání souboru z jeho původního umístění.

Přemístění souboru (v rámci svazku) - řetězec clusteru není ovlivněn, záznam souboru je zkopírován beze změny do nového adresáře a poté odstraněn ze starého.

Hledání volného clusteru v tabulce indexových ukazatelů pro přidělení novému souboru obvykle nezačíná od začátku datové oblasti (tj. od clusteru 2), ale od posledního clusteru přiděleného libovolnému souboru, počtu který je uložen ve struktuře FSInfo. Jinými slovy, pokud byl souboru 1 přiřazen klastr 30 a souboru 2 byl přiřazen klastr 31 a pak byl soubor 1 smazán, pak když se vytvoří nový soubor 3, bude s největší pravděpodobností fyzicky umístěn počínaje klastrem 32.

Odolnost proti chybám systému

Protože systém FAT ukládá data o souborech a data o volném místě na disku do stejné tabulky, operace zápisu souboru, která se tradičně skládá ze dvou fází (přidání obsazeného bloku do seznamu obsazených a vymazání stejného bloku ze seznamu volné), vyskytuje se v FAT v jedné akci. Díky tomu má systém FAT vlastní odolnost proti chybám, to znamená, že porucha (například napájení) v době operace čtení nebo zápisu ve většině případů nepovede ke zničení systému souborů. V tomto případě však mluvíme o integritě souborového systému, nikoli o samotných souborech.

Charakteristika [3]

FAT12 FAT16 FAT32
Vývojář Microsoft
Celý název Tabulka přidělení souborů
(12bitová verze) (16bitová verze) (32bitová verze)
Prezentováno 1980 ( Microsoft Disk BASIC ) Srpen 1984 ( MS-DOS 3.00, zkrácený)
celý - červenec 1988, MS-DOS 4.0 [6]
Srpen 1996 (Windows 95 OSR 2)
ID svazku 0x01 ( MBR ) 0x04, 0x06, 0x0E (MBR) 0x0B, 0x0C (MBR)
EBD0A0A2-B9E5-4433-87C0-68B6B72699C7 ( GPT )
struktur
Obsah adresáře Stůl
Umístění souboru Lineární seznam
Špatné bloky Klastrové značkování
Omezení
velikost souboru 32 MB _ 2 GB _ 4 GB
Počet shluků 4084 65 524 268 435 445 (2 28 −12)
Délka názvu souboru 8,3 nebo 255 znaků při použití LFN
Velikost objemu 2 MB (512 bajtů na sektor)

32 MB (64 KB na cluster)

2 GB
4 GB (64 KB na cluster, ne všude podporováno)
2 TB
8 TB (32 KB na sektor)
Schopnosti
Uložená data Tvorba, úprava, přístup
Časové období 1. ledna 1980 – 31. prosince 2107
Dodatečné informace Zpočátku nepodporováno
Atributy souboru Pouze pro čtení, skrytý, systém, jmenovka svazku, podadresář, archiv
Diferenciace přístupových práv Ne
Transparentní komprese Samostatné nástroje ( Stacker , DoubleSpace , DriveSpace )
Transparentní šifrování Nástroje třetích stran nebo klony DOS

Licence

Některé algoritmy pro práci s FAT a VFAT jsou patentovány společností Microsoft.

V USA na přehodnocení[ kdy? ] bylo rozhodnuto o zrušení některých patentů, ale pak to bylo zrušeno.

V říjnu 2006 byl v Německu pro zjevnost zrušen patent na VFAT vydaný Evropským patentovým úřadem [7] .

Postupem času se FAT stal široce používaným v různých zařízeních pro kompatibilitu mezi DOS, Windows, OS / 2, Linux. Microsoft neprokázal žádný úmysl je nutit k licencování[ upřesnit ] [8] .

V únoru 2009 Microsoft zažaloval TomTom , výrobce linuxových automobilových navigačních systémů , za porušení patentu [9] .

Podle Jeremyho Ellisona[ upřesnit ] Cílem Microsoftu je nabídnout různým společnostem možnost volby: uzavřít s Microsoftem smlouvu o ochraně patentů (jako Novell s ním uzavřel v listopadu 2006), čímž poruší GNU GPL a znemožní jim používat Linux , nebo takovou dohodu neuzavřít a být obviněn z porušování patentů, jejichž ochrana je při jejím uzavření poskytována za podmínky mlčenlivosti [10] [11] .

V březnu 2009 podal TomTom protižalobu na porušení patentu [12] .

Viz také

Poznámky

  1. Archivovaná kopie . Získáno 9. června 2009. Archivováno z originálu 16. července 2011.
  2. www.microsoft.com/mscorp/ip/tech/fathist.asp na archive.org
  3. 1 2 Microsoft Extensible Firmware Initiative FAT32 File System Specification 1.03 (odkaz není dostupný) . Microsoft (6. prosince 2000). — Dokument ve formátu Microsoft Word, 268 Kb. Získáno 5. dubna 2010. Archivováno z originálu 22. srpna 2011. 
  4. A co VFAT? (nedostupný odkaz) . Archiv TechNet . Microsoft (15. října 1999). Získáno 5. dubna 2010. Archivováno z originálu 22. srpna 2011. 
  5. Nezaměňujte příponu systému souborů VFAT se stejnojmenným ovladačem systému souborů, který se objevil ve Windows for Workgroups 3.11 a je navržený pro zpracování volání funkcí MS-DOS (INT 21h) v chráněném režimu (viz: KB126746: Windows pro Historie verzí pracovních skupin (nedostupné (odkaz) VERZE 3.11 → Nesíťové funkce Microsoft (14. listopadu 2003) Načteno 5. dubna 2010. Archivováno z originálu 22. srpna 2011.  )
  6. MS-DOS Partitioning Summary (downlink) . microsoft.com . Získáno 23. října 2012. Archivováno z originálu 23. října 2012. 
  7. Federální patentový soud prohlašuje FAT patent společnosti Microsoft za neplatný  (v angličtině)  (odkaz není k dispozici) . heise online . Heise Zeitschriften Verlag (2. března 2007). Získáno 10. března 2009. Archivováno z originálu dne 22. srpna 2011.
  8. Brian Kahin. Microsoft válcuje svět patenty FAT  (anglicky)  (odkaz není k dispozici) . The Huffington Post (10. března 2009). Získáno 10. března 2009. Archivováno z originálu dne 22. srpna 2011.
  9. Ryan Paul. Žaloba Microsoftu kvůli patentům FAT by mohla otevřít OSS Pandora's Box  (anglicky)  (nedostupný odkaz) . Ars Technica . Publikace Condé Nast (25. února 2009). Získáno 9. března 2009. Archivováno z originálu dne 22. srpna 2011.
  10. Glyn Moody. Skutečný důvod soudního sporu TomTom společnosti Microsoft  (anglicky)  (odkaz není k dispozici) . počítačový svět UK . IDG (5. března 2009). Získáno 9. března 2009. Archivováno z originálu dne 22. srpna 2011.
  11. Steven J. Vaughan-Nichols. Linuxové společnosti podepisují pakty Microsoft o ochraně patentů  (anglicky)  (nedostupný odkaz) . Blogy Computerworld . IDG (5. března 2009). Získáno 9. března 2009. Archivováno z originálu dne 22. srpna 2011.
  12. Erica Oggová. TomTom podal proti společnosti Microsoft žalobu v patentovém sporu  (anglicky)  (nedostupný odkaz) . CNet (19. března 2009). Získáno 20. března 2009. Archivováno z originálu dne 22. srpna 2011.

Odkazy