NT File System
NT File System (NTFS) とは、Windows NT系の標準ファイルシステムである。括弧内はそれぞれが実装されたWindows NT系のバージョン。NTFSのバージョンとして呼ばれることがある。
NTFS 1.2とNTFS 3.xとの間には互換性が無く、Windows NT 4.0上からNTFS 3.xにアクセスするには、Service Pack 4以上を適用する必要がある。また、Windows 2000以降で、自身が使用しているバージョンよりも前のバージョンのNTFSにアクセスすると、その時点で自身が使用しているバージョンに変換する。
PC/AT互換機のパーティションテーブルIDが、HPFSと同じであるため、登場当初はディスク ユーティリティが誤動作することがあった。
サーバ向けにマイクロソフトはWindows Server 2012においてNTFSの欠点を解消したReFSを導入している。HomeやProバージョンでは今後もNTFSが使われていく予定である。
Windows NT 3.51からサポートされたファイル圧縮をNTFSもサポートしている。LZNT1アルゴリズム（LZ77の変種）を使用したファイル単位での透過的な圧縮をサポートし、ディスクの空き領域を増加させることができる。ただし、4 KiBを超えるアロケーション ユニット サイズでは圧縮機能を利用できない。
加えて、もサポートする。ファイルの一部が0で埋められている場合、クラスタ単位で0で埋められている領域をスキップし、ディスク容量を節約する。これはデータベースのハッシュテーブル ファイルや仮想マシンの仮想ハードディスク ファイルなど大部分が0で埋められているファイルで効率よく働く。
NTFSには小さなファイルをファイルのメタデータと一緒にMFT内に収める機能がある。これはアロケーション ユニットを割り当てない事による若干の容量面のメリットとユーザーデータの読み取りにメタデータとは別のI/Oを必要としない速度面のメリットがある。
ファイル数は少ないが巨大なファイルを格納したいと思うなら、最大2048 KiB (Windows10)のアロケーション ユニット サイズを選択できる。これにより、断片化の問題、管理領域とデータ領域の比率など、ファイルシステム性能を左右する問題を解決する。
NTFS圧縮やスパースファイルの使用、極度の断片化によるエクステント リストを使い切ってしまう状況に対応するためのオプションが有り、これの使用によって規定では1 KiBのファイルレコードを4 KiBまで増加させることができる。副次的な効果としてMFT内に収められるユーザーデータも増加する。
なお、2010年時点でのNTFSの実装では、クラスタ数は2-1までとなっている。このため、16 TiBを超えるボリュームは、4 KiBを超えるアロケーション ユニット サイズを指定しなければならない。サポートされているアロケーション ユニット サイズは2048 KiB (Windows10)までである。したがって、NTFSボリュームは8 PiBまでの制限がある。また、OSのバージョンと容量によっては機能に制限がある。
仮想DOSマシン上で動作するソフトウェアに対して、ファイル システム上で一意なパス名であることを保証した8.3形式ファイル名を保存することができる。この機能は任意に有効・無効を設定することができるので、NTFSのファイルシステム最適化の代表的なものとされるが、非推奨とされていた。Windows 7では有効・無効をボリューム単位で設定できるようになりシステムボリュームでは有効、データボリュームでは無効といった運用が可能となった。Windows 8ではパフォーマンス上の理由により8.3形式のファイル名は非推奨となりシステムボリュームを除き既定で無効となった。
原則としてファイル名の大文字小文字は区別されるが、サブシステムがこの機能の有効無効を選択している。Win32サブシステムではファイル名の大文字小文字は区別されず、ファイル名の大文字小文字が異なるファイルを上書きした場合は、最後に使われたファイル名のファイルが保存される。POSIX・Interixサブシステム・Windows Subsystem for Linuxではファイル名の大文字小文字は区別され、ファイル名の大文字小文字が異なるファイルは上書きされず別のファイルとして保存される。
さらに高度な応用としてファイル システム フィルターを備え、ファイルシステム機能やファイルシステム上の名前空間を任意のソフトウェアでオーバーライド（継承）できる。この機能をもとに圧縮機能・暗号化機能・ファイル変更ジャーナル・スナップショット機能・クォータ機能をサブシステムを含むユーザー プロセスからは何ら変更の無いアクセスで利用できる透過的な実装が行われたほか、サードパーティによるファイル システムに対するフォレンジック監査の実装などに活用されている。
Windows NT系には、ファイルシステムの論理エラーまたは物理エラーの確認およびファイルシステムの修復コマンドとして、「chkdsk」コマンドが用意されている。実際にファイルシステムの修復を行うには、「chkdsk 〈対象ボリューム〉 /f」を、不良クラスタの修復を試みるには、「chkdsk 〈対象ボリューム〉 /r」を実行する。
ファイル数の増加に伴う chkdsk の実行時間の増加に対しWindows 8では従来のメタデータの走査とエラーの修復の両方をボリュームをオフラインにして行う方式からメタデータの走査とエラーの記録をオンラインで行いエラーの修復のみをオフラインで行う方式に変えた為、ボリュームのダウンタイムはデータ量には依存しなくなった。
また、NTFSはMFTの「$BadClus」ファイルに不良クラスタの情報を記録しているため、不良クラスタを含むパーティションをパーティションコピーツールなどで丸ごと他のハードディスクにコピーすると、「$BadClus」ファイルもそのままコピーされてしまい、新しいハードディスクには不良クラスタが存在しないにもかかわらず、chkdskでは不良クラスタが存在しているように見えることがある。これを修復してリセットするには、「chkdsk 〈対象ボリューム〉 /b」を実行する（ただし、Windows VistaまたはWindows Server 2008以降のみ）。
ファイルシステム上の不良クラスタとS.M.A.R.T.におけるバッドセクタは別物である。
なお、chkdskによるNTFSの修復により、ディスク エラーの状況が悪化する場合があるため、修復の前に重要なファイルはバックアップしておくことが推奨される。また、chkntfsコマンドを使用することで、Windows起動時に自動的にchkdskを実行したり、自動実行をキャンセルしたりすることができる。
これはNTFSの欠点ではなく、ファイルシステムという仕組みの性質であるが、データの削除やデータサイズの増減を許容するファイルシステムでは、それら操作時の必要に応じてコンパクションを行わない限り、いずれかの段階でフラグメンテーションが発生する。NTFSはFAT32と比較しフラグメンテーションしにくい。その根拠としてMFT機能が挙げられている。フラグメンテーションの量はアロケーション ユニット サイズに反比例し、最も小さなアロケーション ユニット サイズの512バイトで最も顕著になる。
FATよりは軽度とされたそのフラグメンテーションの実体は、Diskeeperのレポート機能などによって一般に知られるようになった。Windows 2000からNTFS対応のデフラグ ツールがWindowsに標準搭載された。基本的にはファイル名はUCS-2で格納される。ここでファイル名を非UNICODE文字種とUNICODEで参照した場合、名前の不一致が発生する。名前の不一致はコードページに依存し、名前空間の一貫性を損なってしまう。原則として厳密に名前空間を取り扱うのであれば、UNICODEでアクセスすべきで、ロケール依存コードページによってアクセスすべきではない。慣例的にコードページ依存文字を使うftpなどのプロトコルの取り扱いは注意を必要とする。
NTFSは従来のMS-DOSファイルシステムにはない、ファイル最終アクセス時刻を記録する。その為ファイルを読みだしただけでもディスクへの書き込みが生じる。このリード・モディファイ・ライトの特性が悪い方向に働くケースはいくつかある。一つは小さなたくさんのファイルへのアクセスでファイルシステムの性能を、。もう一つはフラッシュメモリを使ったデバイスにアクセスした時に頻繁にページのフラッシュを発生させ、やはりファイルシステムの性能を低下させてしまう。Vista以降最終アクセス時刻は既定で更新されない。
NTFSは元々、Windows NT系におけるサーバ用途を目的として開発されたファイルシステムであり、MS-DOSから使われてきたFATと互換性を持たない。そのため、クライアント向けのOSであるWindows 9x系からアクセスすることはできない。
Windows上では規模を拡大するNTFSだが、マイクロソフトの戦略やセキュリティにより、その仕様が一般には公開されていない。このため、他のOSからNTFSを「安全確実に」読み書きすることは事実上不可能である。しかし、現在では有志によって不完全ながらもNTFSにアクセスするための手段が用意されている。