Popis NTFS

Souborový systém NTFS byl navržen pro Windows NT. NT také podporují nebo podporovaly HPFS (navržený pro OS/2) a FAT (navržený pro DOS), ale tyto souborové systémy mají omezené možnosti a nesplňují podmínky kladené dnešními potřebami. Těmito nedostatky jsou zejména omezená velikost disku a bezpečnost. Rovněž FAT32 podporovaný Windows 2000 tyto požadavky nesplňuje.

NTFS byl navržen na konci 80 let při součastně zahájeném vývoji NT a lze říct, že byl navržen, aby splňoval nejen součastné, ale i předpokládané požadavky.

Disky (resp. partition) většiny souborových systémů jsou děleny na logické jednotky nazývané clustery. FAT používá 16-bitovou identifikaci clusterů, proto může adresovat maximálně 65536 clusterů. Velikost clusteru je tedy přímo úměrná na velikosti disku. Větší clustery způsobují větší vnitřní fragmentaci a větší plýtvání s prostorem na disku. Například 250-ti bajtový soubor na disku s 16 kB clustery zabírá celý cluster a více než 15 kB je nevyužito.

Vývojáři FAT a HPFS nevěnovali pozornost bezpečnosti, ale NTFS používá stejný bezpečnostní model jako NT. Seznamy řízení libovolného přístupu (Discretionary access control lists - DACL) a seznamy řízení systémového přístupu (system access control lists - SACL) řídí, kdo vykoná akci se souborem a zajistí její zaznamenání.

FAT používá pro pojmenování souborů 8-bitové ASCII kódování. V NTFS je použito 16-bitové kódování Unicode, což umožňuje pojmenovat soubor v libovolném jazyce.

FAT nemá žádné opatření proti chybám na disku. Při pádu systému se systémové struktury stát nekonzistentní, což může způsobit ztrátu dat. NTFS má zabudováno transakční zaznamenávání akcí, proto se může při pádu systému pokusit obnovit data při jejich minimální ztrátě.

Defaultní velikosti clusterů
Velikost svazku Velikost clusteru
512MB nebo méně 512 bajtů
513MB-1024MB 1KB
1025MB-2048MB 2KB
2049MB a více 4KB
Ve Windows NT jsou dva nástroje na vytváření NTFS partition - Správce Disků (windisk.exe) a utilita na formátování. Oba umožňují nastavit požadovanou velikost clusteru. Jestliže tuto velikost nenastavíte, nastaví defaultní hodnotu. Čím menší jsou clustery, tím lepší je využití diskového prostoru, ale je třeba více prostoru pro organizaci clusterů, protože jich je pak mnohem víc.

K uživatelským datům jsou přidružena tzv. metadata, ve kterých jsou informace o organizaci dat na disku. Jestliže inicializujete NTFS disk, NTFS vytvoří 11 souborů s metadaty. Tyto soubory nejsou normálně viditelné z nějakého souborového manažeru, ale můžete je zobrazit, když víte jak. Můžete je zobrazit napsáním do příkazového řádku:

dir /ah <jmenosouboru>
    
Například:
C:\>dir /ah $badclus

 Svazek v jednotce C nemá žádnou jmenovku.

 Sériové číslo svazku je BCF6-0C04

 

 Výpis adresáře C:\

 

29.03.99 11:38                       0 $BadClus

              1 souborů               0 bajtů

                                        964 798 464 bajtů volných

Metadata soubory v NTFS
MFT jméno Záznam Popis
$MFT 0 Master File Table — hlavní část NTFS
$MFTMIRR 1 Kopie prvních 16-ti záznamů MFT
$LOGFILE 2 Transakční logovací soubor
$VOLUME 3 Obsahuje sériové číslo svazku, čas vytvoření
$ATTRDEF 4 Definice atributů
. 5 Kořenový adresář disku
$BITMAP 6 Obsahuje mapu použití clusterů (použité vs. volné)
$BOOT 7 Boot record jednotky
$BADCLUS 8 Seznam špatných clusterů na disku
$QUOTA 9 Obsahuje informace o uživatelských kvótách — nepoužito před NT 5.0 NTFS
$UPCASE 10 Přidělení velkých znaků k malým
Aby se zabránilo ztrátě dat, NTFS chrání své datové struktury na disku podpisem. Když nastane chyba při čtení dat, NTFS označí clustery jako špatné, přemapuje umístnění dat jinam a aktualizuje $BADCLUS, aby příště nebyly chybné clustery použity znovu. Jestliže je v systému chybám odolný diskový driver, tak vrací do NTFS informaci, že použil svou schopnost na ochranu dat.

$BITMAP je velké pole bitů, kde každému bitu odpovídá cluster na disku. Když je bit 0, cluster je prázdný, jinak je použitý. NTFS udržuje tento soubor ke sledování volných clusterů na disku k jejich přidělení pro nová data.

Master File Table

Podobně jako v souborovém systému FAT je hlavní částí file allocation table, tak v NTFS je hlavní částí MFT, protože udržuje informace o rozložení všech souborů, adresářů i metadat na disku. MFT je rozdělena na jednotky, které se nazývají záznamy. V jednom nebo více MFT záznamech NTFS ukládá metadata, která popisují vlastnosti souboru nebo adresáře (bezpečnostní nastavení, atributy) a jeho umístění na disku. Protože MFT je také soubor, je i on zaznamenán v MFT. Uložení informací v těchto záznamech umožňuje, aby MFT mohla růst nebo zmenšovat se. NTFS vnitřně určuje soubory a adresáře podle pozice jejich záznamů v MFT, které označují začátek jejich metadat. Soubory metadat v tabulce 2 mají určené první záznamy v MFT. Velikost záznamu je obvykle 1kB, ale může být i větší.

$MFTMIRR je další opatření proti ztrátě dat. $MFTMIRR obsahuje kopii prvních 16 záznamů MFT a NTFS ukládá tento soubor uprostřed disku (MFT blízko začátku disku). Jestliže má NTFS problém při čtení disku, použije kopii. Bootovací záznam NTFS disku (512 bajtů na začátku disku) obsahuje pozici MFT i její kopie. Rychlost přístupu do MFT hraje rozhodující roli v celkovém výkonu NTFS, proto se NTFS snaží tento přístup maximálně zrychlit. Protože MFT je soubor, který může růst a zmenšovat se, může být fragmentovaný (rozdělený do více částí). Tato fragmentace vzniká, protože NTFS nemůže přidělit souvislý prostor pro MFT, protože velikost MFT nelze dopředu určit.

Přístup k souboru je nejrychlejší, jestliže celý soubor je v jednom souvislém bloku clusterů, ale fragmentovaná MFT může způsobit opakované čtení záznamu, což snižuje výkon. Aby se předcházelo fragmentaci, NTFS vytváří oblasti clusterů okolo MFT, ve kterých zabraňuje ukládání jiných souborů a adresářů. Tato oblast (MFT-Zóna) snižuje pravděpodobnost fragmentace MFT. NTFS uvolní tuto oblast pouze, jestliže je na disku málo volného prostoru. Bohužel NTFS nenechá defragmentovací nástroje defragmentovat MFT.

Záznamy v MFT

Záznam se obsahuje malou hlavičku, ve které jsou základní údaje o tomto záznamu. Za hlavičkou následuje jeden nebo více atributů, které popisují data nebo typ souboru či adresáře odpovídajícího záznamu. Hlavička obsahuje čísla, která NTFS používá pro ověření integrity, ukazatel na první atribut v záznamu, ukazatel na první volný bajt v záznamu a číslo prvního (hlavního) záznamu v MFT, jestliže záznam není první.

NTFS používá k ukládání všech informací o souborech a adresářích atributy. Ve Windows NT 4.0 je v NTFS 14 atributů. Na disku se atributy dělí do dvou částí: hlavička a data. V hlavičce je uloženo: typ, jméno a příznaky atributu, které určují umístění dat atributu. Pro lepší výkon NTFS jsou data atributů raději umístněna v MFT záznamu, je-li to možné, než v jiném clusteru. Jestliže jsou data atributu uložena v MFT záznamu je atribut "rezidentní" jinak je "nerezidentní". Atribut může být rezidentní pouze tehdy, jestliže data atributu mají takovou velikost, aby mohla být umístěna v MFT záznamu. Obvyklá velikost MFT záznamu je 1kB. Jméno souboru, standardní informace a bezpečnostní atributy jsou vždy rezidentní.

Typy atributů v NTFS
Typ atributu Popis
$VOLUME_VERSION Verze svazku
$VOLUME_NAME Jméno svazku disku
$VOLUME_INFORMATION NTFS verze a dirty příznak
$FILE_NAME Jméno souboru nebo adresáře
$STANDARD_INFORMATION Časová razítka souboru a příznaky - skrytý, systémový a pouze pro čtení
$SECURITY_DESCRIPTOR Bezpečnostní informace
$DATA Data souboru
$INDEX_ROOT Obsah adresáře
$INDEX_ALLOCATION Obsah adresáře
$BITMAP Mapování obsahu adresáře
$ATTRIBUTE_LIST Popisuje hlavičky "nerezidentních" atributů
$SYMBOLIC_LINK Nepoužitý
$EA_INFORMATION Atribut pro slučitelnost s OS/2
$EA Atribut pro slučitelnost s OS/2
Jestliže NTFS musí ukládat data atributu mimo MFT, hlavička atributu obsahuje informaci o umístění dat atributu na disku. Informace, kde jsou umístěna data mimo MFT, jsou ve virtuálním čísle clusteru (virtual cluster number - VCN), které označuje relativní pořadové číslo clusteru dat a v logickém čísle clusteru (logical cluster number - LCN), které označuje číslo clusteru na disku. Zvláštním případem jsou komprimované soubory. NTFS podporuje pouze proudovou (stream) kompresi a tu aplikuje na bloky po 16 clusterech. Jestliže soubor má příliš mnoho atributů, které se nevejdou do MFT záznamu, NTFS vyhradí přídavné záznamy a v hlavním záznamu uloží atribut "seznam atributů" (attribute-list). Tento seznam atributů ukazuje na umístnění atributů v přídavných záznamech.

Adresáře

V NTFS je adresář uložen v MFT jako atribut "index". NTFS používá tento atribut k uložení jmen souborů a kopií atributů standardních informací pro soubory v tomto adresáři. To zrychluje procházení adresářů, protože není potřeba číst MFT záznamy souborů v adresáři.

Jestliže se data pro adresář vejdou do MFT záznamu, jsou uložena atributu "index root". Jakmile velikost dat překročí možnosti MFT záznamu, NTFS použije atribut "index buffers" k uložení dalších dat. Tento atribut určuje umístnění bloku dat pro adresář. Na NT 4.0 mají tyto bloky velikost 4 kB.

Logování NTFS

Každá změna v souboru, adresáři nebo v metadatech je zapsána do souboru, ve které jsou zaznamenávány všechny změny na disku. Program CHKDSK používá tento soubor na minimalizaci ztrát dat na disku při pádu systému a k jeho udržení konzistence. V tomto souboru jsou dva druhy záznamů "redo" a "undo". V redo záznamech jsou uloženy informace o změnách, které musí být znovu udělány, jestliže system selže a změněná data nejsou na disku. Například redo operací se signalizuje, že smazání souboru musí být dokončeno, jestliže nastane selhání, ale pouze některé datové struktury byly aktualizované. NTFS používá undo operace k vrácení změn, které nebyly dokončeny kvůli pádu systému. Jestliže NTFS připojí data k souboru a systém selže, mezi tím kdy NTFS zvětší velikost souboru a tím kdy zapíše nová data, undo záznam určí, o kolik se má zkrátit délka souboru do původní velikosti.

Velikost logovacího souboru (obvykle 2 až 4 MB) je závislá na velikosti disku. Logovací soubor není naplněn, dokud NTFS nazajistí, že redo a undo záznamy, které se ukládají do logovacího souboru, nejsou požadovány pro obnovu. NTFS obnovuje logovací soubor periodicky každých 5 sekund.

NTFS ve Windows 2000 (dříve NT 5.0)

NTFS má v této verzi Windows další zlepšení. Jedním z nových rysů je vestavěná podpora pro šifrování, která zabrání programům jako NTFSDOS obcházet bezpečnostní nastavení a zobrazit data. NTFS nešifruje přímo, ale je v něm přidán driver, který to zajistí. Tato část komunikuje se systémem zabezpečení NT, aby bylo zajištěno, že se k zašifrovaným datům dostane pouze opravněný uživatel.

Přestože matadatový soubor $QUOTA existoval již ve verzi NT 3.5, kvóty byly implementovány až ve verzi NT 5.0. NTFS přiděluje kvóty na uživatelském základě a soubor $QUOTA v dalších metadatech ($Extend) ukládá specifikace kvót pro jednotlivé svazky. Kvóta určuje limit množství dat uživatele na svazku.