Souborové systémy FAT a FAT32,
NTFS a exFAT
Logická struktura disku · FAT12/16/32/VFAT · exFAT · NTFS · Metasoubory · MFT · Defragmentace
1. Struktura logického disku
Aby počítač mohl s diskem pracovat smysluplně – ukládat soubory, najít je zpět, pojmenovat je a smazat – musí být disk zorganizován. Tato organizace se nazývá souborový systém. Bez souborového systému by disk byl pouhou řadou anonymních sektorů, do nichž by OS nedokázal nic spolehlivě zapsat ani přečíst.
FAT (File Allocation Table) je jedním z nejstarších a nejjednodušších souborových systémů vůbec. Byl navržen Billem Gatesem a Marcem McDonalds pro MS-DOS v roce 1977. Přestože je dnes na pevných discích nahrazen NTFS, stále dominuje na přenosných médiích (USB, SD karty) kvůli své jednoduchosti a kompatibilitě prakticky se všemi zařízeními na světě.
Logický disk (svazek) formátovaný FAT se dělí na dvě velké oblasti. Organizační oblast (anglicky reserved/system area) je pevná část na začátku disku, která obsahuje metadata – informace o disku samotném. Je vždy na stejném místě a musí existovat vždy, jinak OS disk nerozpozná. Datová oblast pak zabírá zbytek disku a slouží pro ukládání skutečných dat souborů a adresářů. Tato oblast je rozdělena do clusterů.
1.1 Číslování sektorů a cluster
Disk je fyzicky rozdělen na sektory – základní jednotky přístupu k médiu. Historicky měl sektor vždy 512 bajtů; od roku 2010 se prosazuje standard Advanced Format se sektory 4 096 bajtů (4 KiB). Sektor je minimální množství dat, které disk přečte nebo zapíše najednou – i když potřebuji změnit jediný bajt, disk musí přečíst celý sektor, modifikovat bajt v paměti a zapsat celý sektor zpět.
Sektory mohou být adresovány dvěma způsoby. Starší CHS adresování (Cylinder–Head–Sector) identifikuje sektor trojicí čísel odpovídající fyzickému umístění na plotně. Moderní LBA adresování (Logical Block Addressing) považuje disk za lineární pole sektorů číslovaných od 0. Operační systém pracuje výhradně s LBA; fyzické mapování na CHS zajišťuje firmware disku zcela transparentně.
Pro souborový systém je sektor příliš malou jednotkou. Pokud by OS spravoval každý soubor na úrovni jednotlivých sektorů, tabulky alokace by byly ohromné. Proto FAT pracuje s clustery (česky také shluk) – skupinou sousedních sektorů, které jsou alokovány a uvolňovány jako celek. Výsledkem je, že souborový systém musí sledovat mnohem méně položek. Cluster je základní alokační jednotka FAT – každý soubor zabírá celý počet clusterů, nikdy jejich části.
2. Zaváděcí záznam – Boot Record (BR)
Zaváděcí záznam (Boot Record, BR) je první sektor každého logického disku (svazku). Je to absolutně klíčová datová struktura – bez ní OS nedokáže disk identifikovat, protože nezná ani základní parametry: kolik sektorů má cluster, kde začíná FAT, kde je Root adresář. BR logického disku (nazývaný také VBR – Volume Boot Record) je odlišný od MBR (Master Boot Record) na začátku fyzického disku – MBR popisuje dělení fyzického disku na oddíly, kdežto VBR popisuje konkrétní svazek.
Struktura VBR se nazývá BPB (BIOS Parameter Block). Obsahuje tyto klíčové informace, které OS čte vždy při připojení svazku:
| Pole BPB | Velikost | Popis |
|---|---|---|
| Jump instruction | 3 B | Instrukce skoku na zaváděcí kód – přeskočí BPB při bootování |
| OEM ID | 8 B | Identifikátor software, který disk naformátoval (např. "MSDOS5.0", "MSWIN4.1", "MSET") |
| Bytes per sector | 2 B | Počet bajtů v sektoru (512 nebo 4096) |
| Sectors per cluster | 1 B | Počet sektorů tvořících jeden cluster (1, 2, 4, 8, 16, 32, 64, 128) |
| Reserved sectors | 2 B | Počet sektorů rezervovaných před první FAT (minimálně 1 pro VBR) |
| FAT copies | 1 B | Počet kopií FAT tabulky (standardně 2) |
| Root directory entries | 2 B | Maximální počet záznamů v Root adresáři (pro FAT32 je 0 – Root je v datové oblasti) |
| Sectors per FAT | 2/4 B | Délka jedné FAT tabulky v sektorech |
| Volume Serial Number | 4 B | Náhodné sériové číslo svazku generované při formátování |
| Volume Label | 11 B | Jméno svazku (např. "SYSTEM", "DATA") |
| File System ID | 8 B | Textový identifikátor FS: "FAT12 ", "FAT16 ", "FAT32 " |
Na konci BR (offset 510–511) je vždy podpisová sekvence 0x55AA. Stejně jako u MBR, BIOS tuto hodnotu ověřuje jako příznak zaváděcí schopnosti sektoru. Pokud chybí, BIOS odmítne sektor jako nezaváděcí.
3. FAT tabulka – typy, struktura a funkce
FAT tabulka (File Allocation Table, tabulka alokace souborů) je absolutním srdcem FAT souborového systému. Celý systém je pojmenován právě podle ní. FAT tabulka je lineární pole, kde index prvku odpovídá číslu clusteru a hodnota prvku říká, co v daném clusteru je nebo co po něm následuje.
Princip je elegantní. Každý soubor na disku zabírá jeden nebo více clusterů. Pokud soubor zabírá více clusterů, nejsou nutně sousední – mohou být rozmístěny po celém disku. FAT tabulka slouží jako mapa cesty skrze tento řetěz: záznam adresáře říká číslo prvního clusteru souboru, FAT v tom clusteru říká číslo druhého, FAT v druhém říká číslo třetího, a tak dál, dokud nenarazíme na speciální hodnotu označující End of File (EOF).
Speciální hodnoty v FAT tabulce: 0x0000 = volný cluster (může být použit pro nový soubor). 0xFFF7 (FAT16) nebo 0x0FFFFFF7 (FAT32) = vadný cluster (cluster je fyzicky poškozen, OS ho vynechává). 0xFFFF (FAT16) nebo 0x0FFFFFFF (FAT32) = konec souboru (EOF, End of File) – tento cluster je posledním clusterem souboru.
Proč jsou dvě kopie FAT tabulky? Jde o základní ochranné opatření. Pokud by první FAT tabulka byla poškozena (vadný sektor, výpadek napájení při zápisu), druhá kopie umožní obnovu. OS Windows primárně pracuje s první kopií a druhou aktualizuje synchronně. Při detekci poškození (CHKDSK) může druhou kopií nahradit poškozenou první.
4. Hlavní adresář (Root Directory) a záznamy adresáře
Root Directory (hlavní adresář, kořenový adresář) je speciální struktura, která popisuje obsah kořenového adresáře – tedy seznam souborů a podadresářů přímo v kořeni svazku (C:\, D:\). U FAT12 a FAT16 je Root Directory uložen na pevném místě hned za FAT tabulkami a má pevnou maximální velikost (typicky 512 záznamů, tj. 512 × 32 B = 16 KiB). U FAT32 je Root Directory uložen v datové oblasti a může být libovolně velký.
Každý záznam adresáře (Directory Entry) má přesně 32 bajtů a popisuje jeden soubor nebo podadresář. Struktura záznamu je přísně definovaná:
| Offset | Délka | Obsah |
|---|---|---|
| 0–7 | 8 B | Jméno souboru (8 znaků, doplněno mezerami). První bajt: 0x00 = nikdy nepoužitý záznam (konec adresáře), 0xE5 = smazaný soubor. |
| 8–10 | 3 B | Přípona (3 znaky, doplněno mezerami). Odtud pochází legenda "8.3 formát". |
| 11 | 1 B | Atributy: Read-Only (0x01), Hidden (0x02), System (0x04), Volume Label (0x08), Directory (0x10), Archive (0x20). |
| 12–21 | 10 B | Rezervováno (NT informace, čas vytvoření u FAT32) |
| 22–23 | 2 B | Čas poslední modifikace (5 bitů hodiny, 6 minut, 5 sekundy/2) |
| 24–25 | 2 B | Datum poslední modifikace (7 bitů rok od 1980, 4 měsíc, 5 den) |
| 26–27 | 2 B | Číslo prvního clusteru (u FAT32 doplněno horními 2 bajty z offsetu 20–21) |
| 28–31 | 4 B | Velikost souboru v bajtech |
Všimněme si důmyslnosti systému: záznam adresáře obsahuje jen číslo prvního clusteru. OS pak prochází FAT tabulku a sestavuje celý řetěz clusterů. Proto je FAT tabulka nepostradatelná – bez ní nelze přečíst jediný soubor, protože nevíme, kde jsou jeho data.
4.1 Struktura podadresářů
Podadresáře (subdirectory) jsou v FAT systému obyčejné soubory s atributem Directory (bit 4 nastaven). Jejich datový obsah místo dat souboru obsahuje pole 32bajtových záznamů adresáře – tedy seznam souborů a podadresářů, které leží uvnitř tohoto podadresáře. Tím vzniká stromová struktura: Root Directory obsahuje záznamy podadresářů a souborů, každý podadresář obsahuje další záznamy, a tak dál do hloubky.
Každý podadresář obsahuje dva speciální záznamy: tečka (.) – odkaz na sám sebe (aktuální adresář), a dvě tečky (..) – odkaz na nadřazený adresář. Tyto záznamy jsou vidět v DiskEdit screenshotu. Slouží pro navigaci – příkaz cd .. pracuje právě s tímto záznamem. Root directory tyto záznamy nemá, protože nadřazený adresář neexistuje.
5. Verze FAT: FAT12, FAT16, FAT32 a exFAT – rozdíly a řešení dlouhých názvů
Číslice v názvu FAT verze (12, 16, 32) udávají šířku položky v FAT tabulce v bitech. To přímo určuje, kolik clusterů může adresovat, a tedy jakou maximální kapacitu disk může mít.
FAT12
FAT12 používá 12bitové položky v tabulce (1,5 bajtu na položku). Maximálně může adresovat 2¹² – 2 = 4 086 clusterů (hodnoty 0 a 1 jsou rezervovány). Je to systém pro malá média – původně pro 8palcové a 5,25palcové diskety, dnes se ještě používá na FAT souborových systémech pro diskety a velmi malé USB klíče. Celá FAT12 tabulka se vejde do paměti, což usnadňovalo implementaci v paměťově velmi omezeném MS-DOSu.
FAT16
FAT16 rozšiřuje položky na 16 bitů – maximálně 65 536 clusterů. Přišel s MS-DOS 3.0 (1984) a byl standardem pro pevné disky v éře DOS a Windows 95. Maximální velikost svazku závisí na velikosti clusteru: při clusteru 32 KiB je maximum 2 GiB (65 536 × 32 KiB = 2 048 MiB). Větší disky nebylo možné pod FAT16 vůbec použít. Pro disky do 512 MB byl FAT16 dostačující, ale pro disky 1–2 GB se musely použít clustery 16 nebo 32 KiB, což vedlo k velkému plýtvání místem u malých souborů.
FAT32
FAT32 přišel s Windows 95 OSR2 (1996) a rozšiřuje položky na 32 bitů (ale horních 4 bity jsou rezervovány, takže efektivně 28 bitů – max. 268 milionů clusterů). Maximální kapacita svazku: 2 TiB při sektoru 512 B. FAT32 odstranil nejvýraznější omezení FAT16 a přinesl podporu disků do desítek GB, typické pro konec 90. let a počátek 2000. let. Zároveň u FAT32 přestala platit pevná velikost Root Directory – Root je nyní uložen v datové oblasti jako běžný adresář a může být libovolně velký.
Kritickým omezením FAT32 (i FAT16 a FAT12), které trvá dodnes, je maximální velikost souboru 4 GiB – 1 bajt (2³² – 1 bajtů). Je to dáno 32bitovým polem pro velikost souboru v záznamu adresáře. Soubory větší než 4 GiB (ISO obrazy, zálohy, filmy ve vysokém rozlišení) nelze na FAT32 vůbec uložit. Toto je nejčastěji narážená překážka při kopírování dat na USB klíče naformátované FAT32.
exFAT (Extended FAT)
exFAT (Extended FAT) vytvořil Microsoft v roce 2006 jako přímý nástupce FAT32 pro přenosná média. Odstraňuje omezení FAT32: maximální velikost souboru je 2⁶⁴ – 1 bajtů (prakticky neomezeno), maximální velikost svazku je 128 PiB, podporuje až 2 796 202 záznamy adresáře ve složce. Zároveň zachovává jednoduchost FAT (bez žurnálování, bez ACL), což zajišťuje kompatibilitu se širokou škálou zařízení (digitální fotoaparáty, čtečky, TV). exFAT je dnes standardním formátem pro SD karty od 32 GB a výše (specifikace SDXC). Nevýhoda: od Microsoft vyžadoval licenční poplatky za implementaci (od 2019 specifikace otevřena).
| Vlastnost | FAT12 | FAT16 | FAT32 | exFAT |
|---|---|---|---|---|
| Šířka položky | 12 bitů | 16 bitů | 28 bitů (32) | 32 bitů |
| Max. clusterů | 4 086 | 65 524 | 268 milionů | 2³² − 1 |
| Max. velikost svazku | ~32 MB | 2 GiB | 2 TiB | 128 PiB |
| Max. velikost souboru | ~32 MB | 2 GiB | 4 GiB − 1 B | 2⁶⁴ − 1 B |
| Root Directory | Pevná pozice | Pevná pozice | V datové oblasti | V datové oblasti |
| Žurnálování | Ne | Ne | Ne | Ne (transakční log) |
| Typické použití | Staré diskety | Historické disky | USB klíče, SD do 32 GB | SD 32 GB+, USB velké |
5.1 VFAT – řešení dlouhých názvů souborů
Původní FAT (FAT12, FAT16) podporoval pouze tzv. 8.3 formát názvů souborů: maximálně 8 znaků jména + 3 znaky přípony, bez mezer, bez háčků a čárek (jen základní ASCII), výhradně velká písmena. Soubor pojmenovaný "moje prezentace o fyzice.pptx" by v čistém FAT byl uložen jako "MOJEPR~1.PPT" nebo podobně. To bylo pro uživatele krajně nepraktické.
VFAT (Virtual FAT) přišel s Windows 95 (1995) jako rozšíření FAT16, které přidalo podporu dlouhých názvů souborů (LFN – Long File Names) při zachování zpětné kompatibility se starými systémy. Trik byl geniálně jednoduchý a přitom záludný.
Pro každý soubor s dlouhým názvem VFAT vytvoří:
- Krátký alias (8.3) – automaticky vygenerované 8.3 jméno (např. "PREZENT~1.PPT") uložený v klasickém záznamu adresáře. Staré MS-DOS programy vidí soubor pod tímto jménem.
- LFN záznamy – jeden nebo více speciálních 32bajtových záznamů adresáře uložených bezprostředně před krátkým záznamem. Jsou označeny kombinací atributů Read-Only + Hidden + System + Volume Label = hodnota 0x0F, což je kombinace, která nikdy v normálním záznamu nenastane. Starý DOS takové záznamy přeskočí. Každý LFN záznam obsahuje 13 Unicode znaků (UTF-16LE), takže soubor se jménem 255 znaků potřebuje max. 20 LFN záznamů.
VFAT je tedy rozšíření s nulovou zpětnou kompatibilitou k datům – DOS soubory na VFAT disku vidí jen krátká jména. Windows 95 a novější vidí obě jména. Tento mechanismus je zachován ve FAT32 i exFAT dodnes.
6. Chyby FAT systému a jejich řešení
FAT souborový systém nemá žurnálování – nezaznamenává záměry operací před jejich provedením. Proto je náchylný na poškození při nečekaném přerušení operace (výpadek napájení, vytažení USB za zápisu, pád systému). Chyby se projevují v několika typických formách.
Ztracené clustery (Lost clusters / Lost allocation units)
Ztracený cluster nastane, když je cluster v FAT tabulce označen jako obsazený (nenulová hodnota), ale žádný soubor na něj neodkazuje. Vznik: OS zahájil ukládání souboru, zapsal data do clusterů a aktualizoval FAT, ale před zápisem adresářového záznamu (nebo aktualizací délky souboru) systém spadl. FAT nyní "ví", že clustery jsou obsazené, ale adresář o souboru neví. Clustery jsou tedy ztracené – zabírají místo, ale jsou nedostupné. CHKDSK nalezené ztracené clustery buď smaže (uvolní místo), nebo je uloží do souborů FILE0001.CHK atd. ve složce FOUND.000.
Zkřížené soubory (Cross-linked files)
Zkřížení nastane, když záznamy dvou různých souborů v adresáři odkazují na stejný cluster – nebo jinými slovy, FAT řetěz dvou souborů se někde protne a sdílejí společnou část. Jeden ze souborů má tedy poškozená data. Příčina: chyba při přesunu souboru nebo defragmentaci. CHKDSK tento stav detekuje a opraví zkopírováním sdíleného clusteru a odkazováním každého souboru na svoji kopii – alespoň jeden ze souborů pak má nepoškozená data.
Nekonzistentní velikost souboru
Velikost souboru v záznamu adresáře (4bajtové číslo) neodpovídá skutečnému počtu clusterů v FAT řetězu. Typicky: adresář říká velikost 100 000 bajtů, ale FAT řetěz vede jen přes clustery pojmující 50 000 bajtů. Nebo naopak. CHKDSK opraví velikost v adresáři na hodnotu odpovídající skutečné délce FAT řetězu.
Vadné sektory (Bad sectors)
Vadný sektor je fyzicky poškozená oblast média. FAT systém označuje vadné clustery speciální hodnotou v FAT tabulce (0xFFF7 u FAT16, 0x0FFFFFF7 u FAT32). OS tyto clustery pak při alokaci přeskočí. Fyzicky vadné sektory (povrchové defekty) jsou trvalé. Logicky vadné sektory (chyba čtení/zápisu) mohou být opravitelné. Příkaz CHKDSK /R hledá vadné sektory, testuje čitelnost každého sektoru a označuje vadné clustery.
6.1 Nástroje pro analýzu a opravu – DiskEdit, CHKDSK
Norton DiskEdit (součást Norton Utilities) byl legendárním nástrojem pro nízkoúrovňovou analýzu a editaci disků v éře MS-DOS. Umožňoval zobrazit a upravit libovolný sektor disku v různých formátech: jako hexadecimální dump (View → as Hex), jako text (F3), jako Directory (F4), jako FAT tabulku (F5), jako Partition Table (F6) nebo jako Boot Record (F7). Pomocí DiskEdit bylo možné obnovit smazané soubory (přepsáním 0xE5 v záznamu adresáře na platný první znak), opravit poškozené FAT záznamy nebo analyzovat chyby filesystému.
CHKDSK (Check Disk) je standardní nástroj Windows pro kontrolu a opravu FAT i NTFS svazků. Základní použití: CHKDSK C: zkontroluje disk, CHKDSK C: /F opraví nalezené chyby, CHKDSK C: /R opraví chyby a hledá vadné sektory (pomalé). Při spuštění na systémovém disku se CHKDSK naplánuje na příští restart. Ve Windows 8+ nahrazen rychlejší variantou Repair-Volume v PowerShellu, která využívá NTFS žurnál pro rychlejší kontrolu.
ScanDisk byl ekvivalent CHKDSK pro Windows 9x a MS-DOS – grafická verze s průběhovým ukazatelem.
7. Bezpečné odstraňování dat
Když soubor "smažete" v operačním systému (koš nebo Shift+Delete), co se vlastně stane? Překvapivě málo: OS změní první bajt záznamu adresáře z platného znaku na hodnotu 0xE5 (označení smazaný), uvolní clustery v FAT tabulce (nastaví je na 0x0000), a hotovo. Samotná data souboru zůstávají na disku nedotčena až do chvíle, kdy je přepsána novými soubory. Právě proto dokáže software jako Recuva, PhotoRec nebo R-Studio obnovovat "smazané" soubory.
Pro skutečně bezpečné smazání dat musíme fyzicky přepsat datové oblasti jiným obsahem. Standardní přístupy:
Jednoduchý přepis nulami – přepíše data jedním průchodem samými nulami. Rychlé a pro většinu situací dostatečné. Implementuje to např. cipher /W:C:\ v CMD (přepisuje volný prostor). Pro moderní SSD a disky s flash pamětí je to obvykle dostačující, protože firmware disku přiřazuje buňky interně.
DoD 5220.22-M standard – americký vojenský standard definující minimálně 3 průchody přepisem (nuly, jedničky, náhodná data) s ověřením. Dnes je považován za překonaný pro magnetické disky.
Gutmannova metoda – 35 průchodů s různými vzory. Navržena Peterem Gutmannem v roce 1996 pro MFM/RLL disky. Pro moderní disky je zbytečně pomalá (35 průchodů terabajtového disku by trvalo dny) a studie ukazují, že pro moderní pevné disky s vysokou hustotou záznamu stačí jeden nebo několik průchodů.
Fyzické zničení – demagnetizace (degaussing) nebo fyzické rozmělnění je jedinou stoprocentně spolehlivou metodou pro vysoce citlivá data. Degausser je přístroj generující intenzivní magnetické pole, které smaže veškerou magnetizaci plotny. SSD disk musí být fyzicky rozřezán, protože degausser na flash paměť nefunguje.
8. Fragmentace a defragmentace disku
Fragmentace nastává tehdy, když jsou clustery jednoho souboru rozmístěny po různých místech disku místo toho, aby ležely sousedně. Je to přirozený důsledek používání disku: soubory se zapisují, mažou a přepisují. Po čase vypadají volné oblasti jako "švýcarský sýr" s otvory různých velikostí. Nový soubor, který se nevejde do žádného volného sousedního úseku, musí být rozdělen do několika fragmentů na různých místech.
Fragmentace souborů má přímý negativní dopad na výkon magnetického pevného disku (HDD). Důvod: pro přečtení fragmentovaného souboru musí rameno disku přejíždět mezi různými oblastmi plotny. Každé přesunutí ramene trvá průměrně 8–12 ms. Soubor rozdělený do 50 fragmentů tedy vyžaduje ~50 seeků místo jednoho. U souboru velikosti 1 GB to může znamenat rozdíl v době čtení v řádu sekund až desítek sekund.
U SSD disků fragmentace výkon prakticky neovlivňuje – přístupová doba SSD je stejná bez ohledu na polohu dat (žádné mechanické pohyby). Naopak, defragmentace SSD je škodlivá: zbytečně opotřebovává buňky přepisovacími cykly. Windows 10/11 proto na SSD disky defragmentaci zakáže a místo toho provádí TRIM operace (oznámení firmware disku, které bloky jsou volné).
Defragmentace je proces reorganizace clusterů tak, aby soubory byly uloženy v sousedních clusterech a volné místo bylo co nejvíce kompaktní. Moderní Windows nástroj se jmenuje Defragmentace a optimalizace jednotek (dříve Disk Defragmenter). Funguje ve dvou fázích: analýza (zjistí míru fragmentace), pak přesun dat.
Proč FAT filesystem fragmentuje více než NTFS? FAT alokuje clustery postupně – vezme první volný cluster. Pokud je disk zaplněn a poté se soubory mažou a přidávají, volné oblasti jsou rozptýleny a nové soubory se musejí fragmentovat. NTFS implementuje inteligentní alokaci: snaží se alokovat clustery v sousedních oblastech ("best fit" algoritmus) a oddaluje alokaci, dokud nezná skutečnou velikost souboru.
9. NTFS – porovnání s FAT a vnitřní struktura
NTFS (New Technology File System) byl navržen od základů jako profesionální souborový systém pro Windows NT (1993). Oproti FAT přináší zásadní vylepšení v oblasti spolehlivosti, bezpečnosti a schopnosti pracovat s velkými disky a soubory.
Hlavní filozofický rozdíl: FAT je jednoduchý seznam – dvě tabulky (FAT + Root Directory) a data. NTFS je databáze – vše (soubory, adresáře, bezpečnostní deskriptory, volné clustery) je uloženo jako záznamy v jedné centrální tabulce nazvané MFT.
| Vlastnost | FAT32 | NTFS |
|---|---|---|
| Max. soubor | 4 GiB − 1 B | 16 EiB (prakticky 256 TiB) |
| Max. svazek | 2 TiB | 256 TiB (s 4K sektory ještě více) |
| Žurnálování | Ne | Ano ($LogFile) |
| ACL (přístupová práva) | Ne | Ano (pro soubor i složku) |
| Šifrování | Ne | Ano (EFS) |
| Komprese | Ne | Ano (transparentní) |
| Metasoubory | Ne | Ano ($MFT, $LogFile, $Bitmap...) |
| Sparse files | Ne | Ano |
| Hard linky | Ne | Ano |
| Portabilita | Vysoká (všechna zařízení) | Omezená (primárně Windows) |
9.1 Struktura logického disku NTFS
NTFS oddíl začíná Boot sektorem (VBR) – jako FAT, ale s jinými hodnotami BPB. Klíčový rozdíl: NTFS BPB neobsahuje polohu FAT tabulky, protože FAT tabulka neexistuje. Místo toho obsahuje číslo clusteru, kde začíná MFT (Master File Table) – to je vše, co OS potřebuje k nalezení veškeré struktury disku. Pokud zná polohu MFT, najde z ní všechno ostatní.
Na disku NTFS neexistuje žádná pevně daná organizační oblast jako u FAT. Veškerá metadata jsou uložena jako soubory v MFT. Tím vzniká elegantní symetrie: vše je soubor. MFT sama o sobě je soubor. Žurnál je soubor. Bitmapa volných clusterů je soubor. Informace o svazku jsou souborem. Tato unifikace zjednodušuje vnitřní logiku systému.
9.2 Metasoubory NTFS – seznam a funkce
Metasoubory jsou speciální soubory, které tvoří interní strukturu NTFS. Jsou pojmenovány s prefixem dolaru ($) a jejich záznamy v MFT mají čísla 0–23 (první záznamy jsou vždy rezervovány pro metasoubory). Nejde o "soubory" v běžném slova smyslu – uživatel je normálně nevidí (jsou skryté a chráněné), ale OS je čte a zapisuje při každé operaci s diskem.
| Metasoubor | MFT záznam # | Funkce |
|---|---|---|
$MFT | 0 | Master File Table – srdce NTFS. Obsahuje záznamy o každém souboru a adresáři na svazku. Je to soubor popisující sám sebe (MFT má záznam v MFT). |
$MFTMirr | 1 | Záloha prvních 4 záznamů MFT uložená uprostřed disku. Při poškození začátku disku umožní obnovu základní struktury. |
$LogFile | 2 | Žurnál transakcí (Transaction Log). Zaznamenává všechny změny metadat před jejich provedením. Při recovery po pádu systému Windows přečte LogFile a vrátí nebo dokončí nedokončené transakce. Typická velikost: 64 MB – desítky MB. |
$Volume | 3 | Informace o svazku: jméno svazku (Volume Label), verze NTFS (1.2, 3.0, 3.1), příznaky stavu (dirty bit = disk nebyl bezpečně odpojen). |
$AttrDef | 4 | Definice typů atributů – tabulka všech platných atributů, jejich kódů a vlastností. Základ pro parsování MFT záznamů. |
. (tečka) | 5 | Kořenový adresář (Root Directory = C:\). Je to běžný adresář s indexem B-stromu ($INDEX_ROOT a $INDEX_ALLOCATION atributy). Obsahuje záznamy pro všechny soubory a podadresáře v kořeni. |
$Bitmap | 6 | Bitmapa alokace clusterů. Každý bit odpovídá jednomu clusteru: 1 = obsazený, 0 = volný. OS čte $Bitmap při hledání volných clusterů pro nové soubory. |
$Boot | 7 | Boot sektor (VBR) svazku – uložen jako soubor. Obsahuje BPB s parametry svazku a kód zavaděče. |
$BadClus | 8 | Seznam vadných clusterů. Jako sparse file, kde "data" tvoří právě clustery označené jako vadné. OS při alokaci vždy přeskočí clustery z tohoto seznamu. |
$Secure | 9 | Bezpečnostní deskriptory (ACL). Centrální databáze přístupových práv. Místo aby každý soubor nesl celý svůj bezpečnostní deskriptor, odkazuje jen na záznam v $Secure. Soubory se stejnými právy sdílejí jeden záznam. |
$UpCase | 10 | Tabulka konverze Unicode znaků na velká písmena. NTFS je case-insensitive (nerozlišuje velikost písmen při vyhledávání), ale case-preserving (uloží je jak jsou zadány). $UpCase definuje pravidla pro 65 536 Unicode znaků. |
$Extend | 11 | Adresář pro rozšiřující metasoubory: $Quota (kvóty disku), $ObjId (object ID), $Reparse (reparse points = symlinky, junction points, OneDrive placeholder). |
9.3 MFT záznam – struktura a atributy
Každý soubor a každý adresář na NTFS svazku je reprezentován jedním nebo více záznamy MFT (MFT record). Výchozí velikost záznamu je 1 024 bajtů (1 KiB). Záznam se skládá ze dvou částí: fixní hlavičky a variabilního seznamu atributů.
Hlavička MFT záznamu (FILE header) začíná signeturou FILE (4 bajty, ASCII 0x46 0x49 0x4C 0x45), za níž následují metadata záznamu samotného: offset k prvnímu atributu, příznaky (v použití, adresář), ID záznamu, číslo sekvence pro detekci znovu-použití záznamu, počet hard linků.
Za hlavičkou následují atributy, každý se svou vlastní hlavičkou popisující typ atributu, délku a zda jsou data resident (uložena přímo v záznamu MFT) nebo non-resident (uložena v datové oblasti, MFT jen obsahuje VCN–LCN mapping – mapování virtuálních čísel clusterů souboru na logická čísla clusterů disku).
Nejdůležitější standardní atributy NTFS:
- $STANDARD_INFORMATION (0x10) – časová razítka (vytvoření, modifikace, přístup, změna záznamu MFT), příznaky souboru, Security ID (odkaz do $Secure), kvótová informace.
- $FILE_NAME (0x30) – jméno souboru v Unicode (UTF-16LE), délka jména, časová razítka, odkaz na MFT záznam rodičovského adresáře. Soubor může mít více $FILE_NAME atributů: jeden pro Win32 jméno, jeden pro DOS krátké jméno.
- $SECURITY_DESCRIPTOR (0x50) – u starších NTFS verzi. Od NTFS 3.0 jsou bezpečnostní deskriptory centralizovány v $Secure metasouboru; atribut v záznamu souboru jen obsahuje odkaz (Security ID).
- $DATA (0x80) – samotná data souboru. Pokud je soubor malý (méně než ~700 bajtů se vejde do záznamu MFT), data jsou resident – uložena přímo v MFT. Větší soubory mají non-resident $DATA s tzv. run listrmi (data runs) – seznam dvojic (počet clusterů, startovní LCN), který popisuje, kde na disku leží datové clustery souboru.
- $INDEX_ROOT (0x90) a $INDEX_ALLOCATION (0xA0) – indexy pro adresáře. NTFS ukládá obsah adresářů jako B-stromy, nikoliv jako lineární pole jako FAT. B-strom umožňuje logaritmicky rychlé vyhledávání i v adresářích s miliony souborů.