Souborové systémy FAT & NTFS Hardware · 4. ročník · FAT · FAT32 · NTFS · exFAT

1. Struktura logického disku

Schéma struktury logického FAT disku. Disk se dělí na dvě hlavní části: Organizační oblast (zelená – obsahuje Boot Record, dvě kopie FAT tabulky a Root Directory) a Datová oblast (šedá – prostor pro soubory organizovaný do clusterů).Schéma struktury logického FAT disku. Disk se dělí na dvě hlavní části: Organizační oblast (zelená – obsahuje Boot Record, dvě kopie FAT tabulky a Root Directory) a Datová oblast (šedá – prostor pro soubory organizovaný do clusterů).

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

Srovnání CHS a LBA adresování. Vlevo fyzická struktura HDD – plotny, cylindry, stopy a sektory. Uprostřed CHS adresování (Cylinder-Head-Sector): sektory jsou identifikovány trojicí čísel, přičemž Cylinder 0 je vnější stopa a čísla sektorů jsou v každé stopě od 0. Vpravo LBA adresování (Logical Block Addressing): disk se tváří jako lineární pole sektorů číslovaných od 0 do konce bez ohledu na fyzické uspořádání.Srovnání CHS a LBA adresování. Vlevo fyzická struktura HDD – plotny, cylindry, stopy a sektory. Uprostřed CHS adresování (Cylinder-Head-Sector): sektory jsou identifikovány trojicí čísel, přičemž Cylinder 0 je vnější stopa a čísla sektorů jsou v každé stopě od 0. Vpravo LBA adresování (Logical Block Addressing): disk se tváří jako lineární pole sektorů číslovaných od 0 do konce bez ohledu na fyzické uspořádání.

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.

Výpočet kapacity a velikost clusteruVelikost clusteru se volí při formátování a závisí na velikosti svazku. Vzorec: celkový počet clusterů = kapacita disku ÷ (sektory na cluster × 512 B). Menší cluster = méně plýtvání místem (menší interní fragmentace), ale větší FAT tabulka. Větší cluster = menší FAT, rychlejší přístup k velkým souborům, ale větší plýtvání u malých souborů.

2. Zaváděcí záznam – Boot Record (BR)

Boot Record zobrazený v programu Norton DiskEdit (View → as Boot Record). Vidíme všechna pole BPB: OEM ID (identifikátor výrobce formátovacího SW), Bytes per sector (512), Sectors per cluster (64), Reserved sectors (1), FAT Copies (2), Root directory entries (512), Sectors per FAT (256), Sectors per track (21652), Sides (264), Big total number of sectors (4185121), Volume Serial Number, Volume Label a File System ID (MSET).Boot Record zobrazený v programu Norton DiskEdit (View → as Boot Record). Vidíme všechna pole BPB: OEM ID (identifikátor výrobce formátovacího SW), Bytes per sector (512), Sectors per cluster (64), Reserved sectors (1), FAT Copies (2), Root directory entries (512), Sectors per FAT (256), Sectors per track (21652), Sides (264), Big total number of sectors (4185121), Volume Serial Number, Volume Label a File System ID (MSET).

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 BPBVelikostPopis
Jump instruction3 BInstrukce skoku na zaváděcí kód – přeskočí BPB při bootování
OEM ID8 BIdentifikátor software, který disk naformátoval (např. "MSDOS5.0", "MSWIN4.1", "MSET")
Bytes per sector2 BPočet bajtů v sektoru (512 nebo 4096)
Sectors per cluster1 BPočet sektorů tvořících jeden cluster (1, 2, 4, 8, 16, 32, 64, 128)
Reserved sectors2 BPočet sektorů rezervovaných před první FAT (minimálně 1 pro VBR)
FAT copies1 BPočet kopií FAT tabulky (standardně 2)
Root directory entries2 BMaximální počet záznamů v Root adresáři (pro FAT32 je 0 – Root je v datové oblasti)
Sectors per FAT2/4 BDélka jedné FAT tabulky v sektorech
Volume Serial Number4 BNáhodné sériové číslo svazku generované při formátování
Volume Label11 BJméno svazku (např. "SYSTEM", "DATA")
File System ID8 BTextový 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 zobrazená v DiskEdit (View → as FAT, F5). Každá položka je číslo představující index dalšího clusteru v řetězci nebo speciální hodnotu (0000 = volný, FFFF = EOF = konec souboru, FFF7 = vadný cluster). Vidíme klasický řetěz clusterů – hodnota v clusteru X říká, ve kterém clusteru pokračují data. Tato struktura je základem celého FAT souborového systému.FAT tabulka zobrazená v DiskEdit (View → as FAT, F5). Každá položka je číslo představující index dalšího clusteru v řetězci nebo speciální hodnotu (0000 = volný, FFFF = EOF = konec souboru, FFF7 = vadný cluster). Vidíme klasický řetěz clusterů – hodnota v clusteru X říká, ve kterém clusteru pokračují data. Tato struktura je základem celého FAT souborového systému.

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í.

Proč FAT tabulka leží vždy na začátku disku?FAT tabulka je nejčastěji čtená struktura na disku – při každém přístupu k souboru musí OS projít celým řetězem clusterů v FAT. Uložením FAT na začátek disku (vnější cylindry u klasického HDD, kde je přenosová rychlost nejvyšší díky ZBR) se minimalizuje seektime. U SSD je poloha na disku pro rychlost irelevantní.

4. Hlavní adresář (Root Directory) a záznamy adresáře

Adresář zobrazený v DiskEdit (View → as Directory, F4). Vidíme záznamy adresáře pro podadresář C:\NU: jméno souboru a přípona (Name.Ext), velikost (Size), datum a čas, číslo prvního clusteru (sloupec vpravo), a atributy (R/O, Sys, Hid, Dir, Vol). Zvýrazněný řádek ukazuje soubor wORTCMD.TXT s atributem Archive. Tečka a dvě tečky jsou záznamy pro aktuální a nadřazený adresář.Adresář zobrazený v DiskEdit (View → as Directory, F4). Vidíme záznamy adresáře pro podadresář C:\NU: jméno souboru a přípona (Name.Ext), velikost (Size), datum a čas, číslo prvního clusteru (sloupec vpravo), a atributy (R/O, Sys, Hid, Dir, Vol). Zvýrazněný řádek ukazuje soubor wORTCMD.TXT s atributem Archive. Tečka a dvě tečky jsou záznamy pro aktuální a nadřazený adresář.

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á:

OffsetDélkaObsah
0–78 BJméno souboru (8 znaků, doplněno mezerami). První bajt: 0x00 = nikdy nepoužitý záznam (konec adresáře), 0xE5 = smazaný soubor.
8–103 BPřípona (3 znaky, doplněno mezerami). Odtud pochází legenda "8.3 formát".
111 BAtributy: Read-Only (0x01), Hidden (0x02), System (0x04), Volume Label (0x08), Directory (0x10), Archive (0x20).
12–2110 BRezervováno (NT informace, čas vytvoření u FAT32)
22–232 BČas poslední modifikace (5 bitů hodiny, 6 minut, 5 sekundy/2)
24–252 BDatum poslední modifikace (7 bitů rok od 1980, 4 měsíc, 5 den)
26–272 BČíslo prvního clusteru (u FAT32 doplněno horními 2 bajty z offsetu 20–21)
28–314 BVelikost 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).

VlastnostFAT12FAT16FAT32exFAT
Šířka položky12 bitů16 bitů28 bitů (32)32 bitů
Max. clusterů4 08665 524268 milionů2³² − 1
Max. velikost svazku~32 MB2 GiB2 TiB128 PiB
Max. velikost souboru~32 MB2 GiB4 GiB − 1 B2⁶⁴ − 1 B
Root DirectoryPevná pozicePevná poziceV datové oblastiV datové oblasti
ŽurnálováníNeNeNeNe (transakční log)
Typické použitíStaré disketyHistorické diskyUSB klíče, SD do 32 GBSD 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ří:

  1. 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.
  2. 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.

DiskEdit zobrazující tabulku oddílů (PAT) fyzického disku – View → as Partition Table (F6). Vidíme 4 možné záznamy PAT: prvky System (typ FS), Boot (zda je oddíl aktivní), Starting Location (CHS start), Ending Location (CHS end), Relative Sectors (LBA start) a Number of Sectors (délka). V příkladu jsou 2 platné oddíly (typ '?') a 2 prázdné (unused). Záznamy mají LBA adresy 131341520 a 144803616.DiskEdit zobrazující tabulku oddílů (PAT) fyzického disku – View → as Partition Table (F6). Vidíme 4 možné záznamy PAT: prvky System (typ FS), Boot (zda je oddíl aktivní), Starting Location (CHS start), Ending Location (CHS end), Relative Sectors (LBA start) a Number of Sectors (délka). V příkladu jsou 2 platné oddíly (typ '?') a 2 prázdné (unused). Záznamy mají LBA adresy 131341520 a 144803616.

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.

Bezpečné smazání SSDU SSD disků je situace komplikovanější. SSD firmware automaticky přesouvá data mezi buňkami (wear leveling), takže software nemá kontrolu nad tím, které fyzické buňky jsou přepsány. Bezpečné smazání SSD vyžaduje příkaz ATA Secure Erase nebo NVMe Format – firmware sám přepíše nebo kryptograficky znehodnotí všechna data. Nebo lze SSD šifrovat BitLockerem od začátku – pak stačí smazat šifrovací klíč.

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.

VlastnostFAT32NTFS
Max. soubor4 GiB − 1 B16 EiB (prakticky 256 TiB)
Max. svazek2 TiB256 TiB (s 4K sektory ještě více)
ŽurnálováníNeAno ($LogFile)
ACL (přístupová práva)NeAno (pro soubor i složku)
ŠifrováníNeAno (EFS)
KompreseNeAno (transparentní)
MetasouboryNeAno ($MFT, $LogFile, $Bitmap...)
Sparse filesNeAno
Hard linkyNeAno
PortabilitaVysoká (všechna zařízení)Omezená (primárně Windows)

9.1 Struktura logického disku NTFS

Runtime's DiskExplorer for NTFS zobrazující boot sektor NTFS oddílu. Vidíme klíčové parametry: NTFS Signature ('NTFS'), Bytes per sector (512), Sectors per cluster (8), 1st MFT cluster (číslo clusteru kde začíná MFT tabulka = 43434), 1st MFT minor cluster (záložní MFT mirror = 2), Clusters/file record (246 = 1024 B záznam), Volume serial number. Sekce ukazuje dva platné boot sektory (128 a 130) a dva neplatné (129, 131).Runtime's DiskExplorer for NTFS zobrazující boot sektor NTFS oddílu. Vidíme klíčové parametry: NTFS Signature ('NTFS'), Bytes per sector (512), Sectors per cluster (8), 1st MFT cluster (číslo clusteru kde začíná MFT tabulka = 43434), 1st MFT minor cluster (záložní MFT mirror = 2), Clusters/file record (246 = 1024 B záznam), Volume serial number. Sekce ukazuje dva platné boot sektory (128 a 130) a dva neplatné (129, 131).

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.

Dialog inicializace disku ve Windows Správci disků. Při prvním připojení nového fyzického disku Windows nabídne volbu stylu oddílů: MBR (Hlavní spouštěcí záznam) nebo GPT (GUID Partition Table). Tato volba ovlivňuje, jaký souborový systém a jak velké oddíly lze na disku vytvořit. Pro disky nad 2 TiB a pro UEFI boot je nutné GPT.Dialog inicializace disku ve Windows Správci disků. Při prvním připojení nového fyzického disku Windows nabídne volbu stylu oddílů: MBR (Hlavní spouštěcí záznam) nebo GPT (GUID Partition Table). Tato volba ovlivňuje, jaký souborový systém a jak velké oddíly lze na disku vytvořit. Pro disky nad 2 TiB a pro UEFI boot je nutné GPT.

9.2 Metasoubory NTFS – seznam a funkce

Schéma logické struktury NTFS oddílu s metasoubory. Od vrcholu: $Boot (zaváděcí sektor), $AttrDef (definice atributů), prázdný prostor, $MFT (Master File Table), $Secure (bezpečnostní deskriptory), $Logfile (žurnál transakcí), $Extend (rozšíření), $BadClus (vadné clustery), $Volume (informace o svazku), $MFTMirr (záloha MFT), tečka (kořenový adresář), $Bitmap (mapa volných clusterů), prázdný prostor (Data), $UpCase (tabulka Unicode). Celý obsah je jedním oddílem NTFS.Schéma logické struktury NTFS oddílu s metasoubory. Od vrcholu: $Boot (zaváděcí sektor), $AttrDef (definice atributů), prázdný prostor, $MFT (Master File Table), $Secure (bezpečnostní deskriptory), $Logfile (žurnál transakcí), $Extend (rozšíření), $BadClus (vadné clustery), $Volume (informace o svazku), $MFTMirr (záloha MFT), tečka (kořenový adresář), $Bitmap (mapa volných clusterů), prázdný prostor (Data), $UpCase (tabulka Unicode). Celý obsah je jedním oddílem NTFS.

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.

MetasouborMFT záznam #Funkce
$MFT0Master 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).
$MFTMirr1Zá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.
$LogFile2Ž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.
$Volume3Informace 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).
$AttrDef4Definice typů atributů – tabulka všech platných atributů, jejich kódů a vlastností. Základ pro parsování MFT záznamů.
. (tečka)5Koř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.
$Bitmap6Bitmapa 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.
$Boot7Boot sektor (VBR) svazku – uložen jako soubor. Obsahuje BPB s parametry svazku a kód zavaděče.
$BadClus8Seznam 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.
$Secure9Bezpeč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.
$UpCase10Tabulka 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ů.
$Extend11Adresář pro rozšiřující metasoubory: $Quota (kvóty disku), $ObjId (object ID), $Reparse (reparse points = symlinky, junction points, OneDrive placeholder).
DiskExplorer zobrazující kořenový adresář NTFS svazku (MFT# 45, DIR). Vidíme výpis metasouborů: $AttrDef, $BadClus, $Bitmap, $Boot, $Extend, $LogFile, $MFT, $MFTMirr, $RECYCLE.BIN, $Secure, $UpCase, $Volume – to jsou všechny systémové metasoubory NTFS. Dále jsou vidět uživatelské soubory a složky (fsutil, key_pass_is_test.plx, KRATKY.C, programy, strovacka.txt, slozka_pro_analyzu, soubor_*, System Volume Information, tajny_soubor.txt). Každý soubor má MFT číslo záznamu (Mft#), datum, velikost a atributy.DiskExplorer zobrazující kořenový adresář NTFS svazku (MFT# 45, DIR). Vidíme výpis metasouborů: $AttrDef, $BadClus, $Bitmap, $Boot, $Extend, $LogFile, $MFT, $MFTMirr, $RECYCLE.BIN, $Secure, $UpCase, $Volume – to jsou všechny systémové metasoubory NTFS. Dále jsou vidět uživatelské soubory a složky (fsutil, key_pass_is_test.plx, KRATKY.C, programy, strovacka.txt, slozka_pro_analyzu, soubor_*, System Volume Information, tajny_soubor.txt). Každý soubor má MFT číslo záznamu (Mft#), datum, velikost a atributy.

9.3 MFT záznam – struktura a atributy

Nahoře: fyzické rozložení NTFS oddílu – BOOT, Systemové soubory, MFT, MFT Zone (rezervovaná oblast pro růst MFT), MFT Mirror, Systemové soubory, Oblast souborů. Šipky ukazují, že každý systemový soubor – soubory s metadaty – má svůj záznam v MFT. Vpravo nahoře: struktura MFT Atributu: Hlavička atributu + Lokace a velikost + Obsah. Vpravo dole: MFT záznam je složen z: MFT hlavičky, pak série atributů, pak Nepoužité místo. Dole: $MFT záznam pro jeden soubor obsahuje atributy: (0x10) Standardní informace, (0x30) Název souboru nebo složky, (0x50) Bezpečnostní popisovač, (0x80) Data nebo (0x90) index.Nahoře: fyzické rozložení NTFS oddílu – BOOT, Systemové soubory, MFT, MFT Zone (rezervovaná oblast pro růst MFT), MFT Mirror, Systemové soubory, Oblast souborů. Šipky ukazují, že každý systemový soubor – soubory s metadaty – má svůj záznam v MFT. Vpravo nahoře: struktura MFT Atributu: Hlavička atributu + Lokace a velikost + Obsah. Vpravo dole: MFT záznam je složen z: MFT hlavičky, pak série atributů, pak Nepoužité místo. Dole: $MFT záznam pro jeden soubor obsahuje atributy: (0x10) Standardní informace, (0x30) Název souboru nebo složky, (0x50) Bezpečnostní popisovač, (0x80) Data nebo (0x90) index.

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ů.

Detail MFT záznamu analyzovaného nástrojem. Vlevo: Atribut $10 (Standard Information) – offset 0x038, délka 96 B. Obsahuje: časy vytvoření, modifikace, záznamu a přístupu (UTC), příznaky souboru (Read-Only, Hidden, System, Archive, Sparse, Encrypted...), Owner ID, Security ID (odkaz do $Secure). Uprostřed: File attributes bitové příznaky – Read-Only=0, Hidden=0, Archive=1, atd. Vpravo: kompletní FILE header – signatura 'FILE', offset 0x30 na update sequence, LSN číslo z $LogFile, hard link count=1, offset k prvnímu atributu=0x38, příznaky (In use=1, Directory=0), záznamy atributů $10, $30, $40, $80.Detail MFT záznamu analyzovaného nástrojem. Vlevo: Atribut $10 (Standard Information) – offset 0x038, délka 96 B. Obsahuje: časy vytvoření, modifikace, záznamu a přístupu (UTC), příznaky souboru (Read-Only, Hidden, System, Archive, Sparse, Encrypted...), Owner ID, Security ID (odkaz do $Secure). Uprostřed: File attributes bitové příznaky – Read-Only=0, Hidden=0, Archive=1, atd. Vpravo: kompletní FILE header – signatura 'FILE', offset 0x30 na update sequence, LSN číslo z $LogFile, hard link count=1, offset k prvnímu atributu=0x38, příznaky (In use=1, Directory=0), záznamy atributů $10, $30, $40, $80.

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:

Hexadecimální výpis MFT záznamu na offsetu 0x1F40E800. Nahoře vlevo jsou vidět barevně zvýrazněné části: modrá = FILE hlavička (signatura FILE = 0x46 0x49 0x4C 0x45), fialová = Update Sequence Array, zelená = $STANDARD_INFORMATION atribut (typ 0x10). Uprostřed je vidět $FILE_NAME atribut s Unicode jménem souboru (čitelné vpravo v ASCII/Unicode sloupcích: 'soubor_pro_analyzu.txt'). Komentář v datech říká: 'Toto je soubor, ktery mate za ukol prozkoumat v programu pro analyzu NTFS.'Hexadecimální výpis MFT záznamu na offsetu 0x1F40E800. Nahoře vlevo jsou vidět barevně zvýrazněné části: modrá = FILE hlavička (signatura FILE = 0x46 0x49 0x4C 0x45), fialová = Update Sequence Array, zelená = $STANDARD_INFORMATION atribut (typ 0x10). Uprostřed je vidět $FILE_NAME atribut s Unicode jménem souboru (čitelné vpravo v ASCII/Unicode sloupcích: 'soubor_pro_analyzu.txt'). Komentář v datech říká: 'Toto je soubor, ktery mate za ukol prozkoumat v programu pro analyzu NTFS.'