NTFS

NTFS (New Technology File System) je v informatice označení pro souborový systém, který vyvinula firma Microsoft pro svoje operační systémy řady Windows NT. Souborový systém NTFS byl navržen na konci 80. let 20. století jako rozšiřitelný souborový systém, který je možné přizpůsobit novým požadavkům. Microsoft při vývoji NTFS využil poznatky z vývoje HPFS, na kterém spolupracoval s firmou IBM.

Historie 
V polovině roku 1980 vytvořily firmy Microsoft a IBM společný projekt k vytvoření nové generace grafického operačního systému. Výsledkem projektu bylo OS/2. Firmy Microsoft a IBM ale měly rozdílný pohled na mnoho důležitých otázek a nakonec se rozešly. Systém OS/2 zůstal projektem firmy IBM a Microsoft pracoval na systému Windows NT.

Souborový systém HPFS ze systému OS/2 obsahoval několik důležitých nových konceptů. Když Microsoft vytvořil svůj nový operační systém, převzal mnoho z těchto konceptů pro svůj souborový systém NTFS. Pravděpodobně v důsledku tohoto společného původu používá HPFS a NTFS stejné identifikační kódy diskových oddílů (07).

Použití stejného ID čísla oddílu bylo překvapivé, protože byly k dispozici desítky volných identifikačních kódů, a protože jinak mají všechny významné souborové systémy svůj vlastní kód. Například samotný souborový systém FAT má více než devět různých kódů (po jednom pro varianty FAT12, FAT16, FAT32 atd.). Algoritmy, identifikující souborový systém typu diskového oddílu 07, musí provést další testy, aby rozhodly, jaký souborový systém je na diskovém oddílu obsažen.

Vývojáři NTFS:
 Tom Miller
 Gary Kimura
 Brian Andrew
 David Goebel

Verze 
V současné době existuje pět verzí NTFS, přičemž každá verze přinesla nějaké novinky:

{| class=wikitable
! verze NTFS !! verze Windows NT !! Rok vydání !! Poznámka
|-
| v1.0 || Windows NT 3.1 || 1993
|-
| v1.1 || Windows NT 3.5 || 1994 || dlouhá jména na FAT
|-
| rowspan=2 | v1.2 || Windows NT 3.51 || 1995
|-
|                     Windows NT 4.0 || 1996 || též NTFS 4.0 podle verze OS, komprimované soubory, ACL atd.
|-
| v3.0 || Windows 2000 || 2000 || též NTFS 5.0, diskové kvóty, EFS, sparse files atd.
|-
| rowspan=4 | v3.1 || Windows XP || 2001 || též NTFS 5.1, 
|-
|                     Windows Server 2003 || 2003 || též NTFS 5.2
|-
|                     Windows Vista       || 2007 || též NTFS 6.0, transakce, symbolické linky
|-
|                     Windows Server 2008 || 2008 || též NTFS 6.0
|}

Poznámka: Pokud chcete používat NTFS v3.0 ve starším systému Windows NT 4.0, musí v něm být nainstalován Service Pack 4 (servisní balíček číslo 4), který obsahuje aktualizovanou verzi ovladače NTFS. Windows Vista přineslo spíše vylepšení jádra systému, než změny v NTFS, proto se verze NTFS nezměnila.

Vlastnosti 
NTFS byl navržen jako nativní souborový systém pro Windows NT a (zejména oproti zastaralému filesystému FAT) obsahoval spoustu novinek:

 žurnálování – všechny zápisy na disk se zároveň zaznamenávají do speciálního souboru, tzv. žurnálu. Pokud uprostřed zápisu systém havaruje, je následně možné podle záznamů všechny rozpracované operace dokončit nebo anulovat a tím systém souborů opět uvést do konzistentního stavu.
 access control list – podpora pro přidělování práv k souborům
 komprese na úrovni souborového systému
 šifrování (EFS – Encrypting File System) umožňuje chránit data uživatele na úrovni souborového systému a je transparentní.
 diskové kvóty umožňují nastavit maximálně využitelné místo na diskovém oddíle, pro konkrétního uživatele. Do diskové kvóty se nezapočítávají komprimované soubory, ale jejich reálná velikost.
 dlouhá jména souborů (ve FAT původně nebyla a ve Windows 95 je bylo třeba doplňovat značně komplikovaným způsobem)
 pevné a symbolické linky – odkazy na soubory na úrovni filesystémů, známé z operačních systému UNIX. Windows pro editaci tohoto typu odkazů nemají standardní uživatelské rozhraní, ale umí je interpretovat a také je používají (Distribuovaný systém souborů na Windows server 2003 apod.).

Struktura NTFS 
NTFS používá 64bitové adresy clusterů, takže diskový oddíl může být větší než u FAT (která ve své poslední verzi používala efektivně 28bitové adresování) a to konkrétně až 16 EB (což odpovídá přibližně 17 × 10^6 TB). Celý systém je řešen jako obří databáze, jejíž jeden záznam odpovídá souboru.

Základ tvoří 11 systémových souborů, tzv. metadat, které vznikají bezprostředně po naformátování svazku.

 $Logfile je již výše zmíněné žurnálování;
 $MFT (Master File Table) je tabulka obsahující záznamy o všech souborech, adresářích a metadatech (jelikož $MFT je soubor, je i informace o něm v této tabulce); Nachází se hned za boot sektorem; jelikož se jedná o soubor, lze jej teoreticky fragmentovat (prakticky je tomu zamezeno), avšak aby se tomu předešlo, systém kolem něj udržuje zónu volného místa. 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 1 kB, ale může být i větší.
 $MFTMirr je soubor, zajišťující bezpečnost dat; nachází se uprostřed disku, obsahuje prvních 16 záznamů $MFT; pokud je $MFT z nějakého důvodu poškozená, použije se tato kopie. Bootovací záznam NTFS 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.
 $Badclus drží seznam známých vadných clusterů, které znovu nebudou použity; pokud nastane chyba při čtení dat, systém označí clustery za špatné a $Badclus se aktualizuje;
 $Bitmap je jednorozměrné pole bitů, které slouží ke sledování volného místa; když je bit 0, je volný a v opačném případě použitý;
 mezi další patří $Boot, $Volume, $AttrDef, $Quota, $Upcase a . (kořenový adresář disku);

NTFS je flexibilní – všechny jeho soubory (včetně speciálních, s výjimkou boot sektoru) se dají přesunout.

Zajímavé atributy souborů 
Soubory mohou mít mnoho atributů; jejich definice obsahuje soubor $AttrDef. V různých verzích se atributy liší, teoreticky je dokonce možné přidávat si vlastní.

Klasický soubor má mj. tyto atributy:
 $FILE_NAME – struktura pro jméno souboru. Kromě něj obsahuje i velikost, reference na nadřízený adresář a různé příznaky.
 $SECURITY_DESCRIPTOR – přístupová práva k souboru
 $DATA – vlastní obsah souboru

Z vlastností, které lze u souboru číst a měnit v operačním systému, patří datum a čas vytvoření, posledního zápisu a posledního čtení souboru. Základní atributy jsou „Skrytý“ a „Jen pro čtení“, mezi pokročilé patří možnost archivace, šifrování (per uživatel OS), komprimace, indexace obsahu.

Adresáře 
Adresáře jsou v NTFS pojaty jako speciální druh souborů; používají jiné druhy atributů. Na disk jsou vkládány jako B-stromy (což zrychluje vyhledávání) se jmény souborů a odkazy na jejich záznamy v MFT. 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.

Záznamy v MFT 
Záznam 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ímu 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í.

Limity NTFS 
 Názvy adresářů a souborů Maximální délka je 255 znaků v kódování Unicode (UTF-16). V Posixovém namespace lze použít jakýkoliv UTF-16 znak (case sensitive) kromě znaku NULL a lomítko (/). Ve Win32 namespace lze použít jakýkoliv UTF-16 znak (case insensitive) kromě znaku NULL, lomítko (/), zpětné lomítko (\), dvojtečka (:), hvězdička (*), otazník (?), uvozovky ("), menší než (<) větší než (>) a  svislá čára (|). Nelze použít jména, která se používají pro jména speciálních souborů na každém svazku: $MFT, $MFTMirr, $LogFile, $Volume, $AttrDef, . (tečka), $Bitmap, $Boot, $BadClus, $Secure, $Upcase, a $Extend (tečka a $Extend jsou adresáře, zbytek soubory).

 Maximální velikost svazku Teoreticky je maximální velikost NTFS svazku 264-1 alokačních jednotek, avšak podle implementace ve Windows XP je to jen 232-1 alokačních jednotek. Při použití 64 KiB je to 256 TiB minus 64 KiB, při použití implicitní velikost 4 KiB to je 16 TiB minus 4 KiB. Protože je velikost klasického oddílu (MBR) limitována velikostí 2 TiB, musí být pro větší oddíly použit dynamický disk nebo GPT.

 Maximální velikost souboru Teoreticky: 16 EiB minus 1 KiB ( bajtů). Implementováno je 16 TiB minus 64 KiB ( bajtů)

 Maximální délka cesty Absolutní délka cesty až 32767 znaků; relativní délka cesty je limitována na 255 znaků.

 Rozlišení času NTFS používá pro rozlišení času stejnou metodu, jako Windows NT, tj. 64bitové číslo s rozsahem od 1. ledna 1601 do 26. května 60056 s rozlišením 10 miliónů tiků na sekundu (10−7, tj. desetina mikrosekundy).

 Alternativní datové proudy Systémová volání Windows mohou, avšak nemusí podporovat datové proudy v závislosti na operačním systému, nástrojích a vzdáleném systému souborů. Přenos souboru může tiše přerušit datový proud, proto je bezpečný způsob pro kopírování a přesun souborů pouze použití systémových volání BackupRead a BackupWrite, které umožňují sledovat datový proud a zjistit tak, zda přenos do cíle proběhl v pořádku a eventuálně přeskočit přerušené proudy.

Problémy 
 FragmentaceSouborový systém NTFS již od svého počátku velice trpí svou nepříjemnou vlastností – s oblibou fragmentuje soubory. Čtení takto fragmentovaných souborů je pak zbytečně pomalé a čím více je takovýto soubor fragmentován, tím je čtení pomalejší. Proto je ve Windows 7 implicitně nastavena defragmentace automaticky jednou týdně.

Linux a NTFS 
Nejlepší podporu NTFS v Linuxu v současné době poskytuje ovladač NTFS-3G, který běží v uživatelském prostoru (využívá modul FUSE). Přímo v jádře se nachází ovladač, který podporuje čtení a omezeně i zápis (tzv. Linux-NTFS). K dispozici jsou však i ovladače poskytující plnou podporu čtení i zápisu.

Stále je samozřejmě možné spustit v emulátoru Captive-NTFS ovladače z originální instalace MS Windows (jde o dva soubory, které se dají získat buď ze systému Windows XP SP1, nebo přímo z instalačního balíčku SP1 pro Windows XP). Tento způsob je však výrazně pomalejší.

Interoperabilita 
Zatímco různé verze NTFS jsou z větší části zpětně kompatibilní, existují technické důvody pro připojení novějších NTFS ve starších verzích systému Microsoft Windows. To ovlivňuje duální zavádění a externí přenosné pevné disky. Například při pokusu použít NTFS s vlastností „Volume Shadow Copy“ na starším operačním systému, který jej nepodporuje, povede ke ztrátě obsahu. V Microsoft Windows je k dispozici příkaz convert.exe, který umožňuje převést některé podporované souborové systémy na NTFS, včetně HPFS (pouze v systému Windows NT 3.1, 3.5 a 3.51), FAT16 a FAT32 (ve Windows 2000 a novější). 

Mac OS X 10.3 a vyšší zahrnují podporu pouze pro čtení pro oddíly formátované systémem NTFS. Nástroj NTFS-3G, který je šířen pod licencí GPL funguje v systémech OS X a Linux pomocí FUSE („Filesystem in Userspace“) a umožňuje čtení i zápis na NTFS oddíly. Od vývojářů NTFS-3G je k dispozici i výkonnější komerční verze s názvem Tuxera „NTFS for Mac“. Firma Paragon Software Group prodává ovladač pro čtení i zápis s názvem NTFS pro OS X, který je také součástí některých modelů pevných disků Seagate. Nativní podpora zápisu na NTFS je k dispozici v systému OS X 10.6 a novějších a i když není ve výchozím nastavení aktivována, je možné tuto funkci povolit. Avšak zkušenosti uživatelů nasvědčují tomu, že podpora není stabilní a má tendenci způsobit pád jádra systému, což jsou pravděpodobně důvody, proč nebyla podpora zápisu ve výchozím nastavení povolena.

Linuxová verze jádra 2.2.0 a novější zahrnují schopnost číst oddíly NTFS; verze jádra 2.6.0 a novější obsahují ovladač od Antona Altaparmakova (University of Cambridge) a Richarda Russona, který podporuje čtení souborů, přepis a změnu jeho velikosti. Existují tři uživatelské prostory ovladače pro podporu NTFS – NTFSMount, NTFS-3G a Captive NTFS, "obalující" ovladač, který používá vlastní ovladač systému Windows ntfs.sys. Jsou postaveny na souborovém systému v uživatelském prostoru (FUSE), modul Linux jádra, jehož úkolem je přemostění uživatelského prostoru a kernel kódu k uložení a získání dat. Všechny tři jsou licencovány na základě podmínek uvedených v licenci GNU General Public License (GPL). Vzhledem ke složitosti vnitřních struktur NTFS zakazují vestavěný ovladač jádra 2.6.14 i ovladače FUSE změny v objemu, které jsou považovány za nebezpečné, aby nedošlo k poškození. Existují také dvě proprietární řešení:

 Tuxera NTFS – Vysoce výkonný čtecí / zapisovací komerční kernel ovladač, cílený hlavně pro vestavěné zařízení od Tuxera, který také vyvíjí NTFS-3G;
 NTFS pro Linux – Komerční ovladač s plnou podporou čtení / zápisu z Paragon Software Group.

eComStation a FreeBSD nabízí jen pro čtení podporu NTFS (je tam beta ovladač NTFS, který umožňuje psát / vymazat pro eComStation, ale je obecně považován za nebezpečný). Bezplatný nástroj třetí strany pro BeOS, který byl založen na NTFS-3G, umožňuje plné NTFS čtení a zápis. NTFS-3G pracuje také na Mac OS X, FreeBSD, NetBSD, Solaris, QNX a Haiku, a také přes FUSE v Linuxu. Také existuje ovladač ke čtení / zápis pro osobní použití pro MS-DOS s názvem "NTFS4DOS". Ahead Software vyvinula ovladač "NTFSREAD" (verze 1.200) pro DR-DOS 7.0x mezi lety 2002 a 2004. Byla to část jejich Nero Burning ROM software. OpenBSD nabízí nativní podporu pouze pro čtení NTFS ve výchozím nastavení na i386 a amd64 platformy od verze 4.9, která byla vypuštěna 1. května 2011. Je možná podpora pro čtení / zápis prostřednictvím NTFS-3G v OpenBSD – aktuálně od 1. listopadu 2013 (první vydání je OpenBSD 5.5 na 1. května 2014). OpenBSD má nyní svou vlastní implementaci FUSE; NTFS-3G je k dispozici z portů.

Reference

Související články 
 ReFS – nový nástupce NTFS představený ve Windows Server 2012
 WinFS – již ukončený pokus o nástupce NTFS

Externí odkazy 
 http://www.linux-ntfs.org – projekt Linux-NTFS, vyvíjející ovladače pro NTFS pro operační systém Linux. Stránky obsahují mnoho informací o struktuře NTFS.
 http://www.ntfs-3g.org – NTFS-3G, bezpečný zápis i čtení NTFS z Linuxu
 https://web.archive.org/web/20070329233747/http://www.milannemec.com/ntfs.html – podrobný český popis NTFS
 http://www.osnews.com/story/24076/NTFS_A_File_System_with_Integrity_and_Complexity – popis vlastností NTFS, vývoj (anglicky)

Komponenty Windows
Souborové systémy