全てをファイルとして扱う点が特徴です。パーティション内では先頭部分がブートセクタで残りはデータ用セクタと考えて差し支えありません。
MFTというテーブルが基本となります。このテーブル内のエントリは1KBサイズで42byteのヘッダと任意の属性情報、未使用領域で構成されます。MFTの第1エントリは$MFTで各エントリの位置情報が記載されています。MFTの開始位置はブートセクタに記載されています。
MFTのサイズは可変であり、最初はスモールスタートの方針で小さなサイズですが、必要なエントリ数に応じて増大します。エントリの最初のフィールドにシグネチャがあり、通常はASCIIで「FILE」、エラーがあれば「BAAD」となっています。また、エントリには使用中かディレクトリ用かを示すフラグがあります。
エントリのアドレスは48bitで、割当回数を示す16bitの番号も保持しており、これらをつなげた64bitがファイル参照アドレスとして使用されます。エントリの属性情報はヘッダとコンテンツで構成されます。ヘッダは属性タイプ、サイズ、名前および圧縮、暗号フラグなどです。サイズの大きいファイルを扱うための仕組みとして、属性情報にresidentとnon-residentの2種類があります。residentはMFTエントリ内にヘッダと一緒にコンテンツが含まれ、non-residentは別のクラスタに書き込まれます。クラスタのアドレス情報はcluster runsと呼ばれるリストで開始アドレスと長さが保持されます。
ファイルシステムレベルでの暗号化機能がEFSですが、暗号化時にEFS0.TMPという名前で平文の一時ファイルを作ります。この一時ファイルが不要になると、削除はされますがワイプはされないため、EFS0.TMPというファイル名で検索する価値はあります。
MFTの主要なエントリは以下の通りです。
$MFT file - エントリ0
$MFTMirr file - エントリ1
$BOOT file - エントリ7
$VOLUME file - エントリ3
$ATTRDEF file - エントリ4
$BITMAP file - エントリ6
$BADCLUS file - エントリ8
$SECURE file - セキュリティ設定(デスクリプタ)が記述されるファイル。MFTエントリ9。2つのインデックス$SDH、$SIIと1つの$DATA attributeの$SDSをもつ。
主要な属性は以下の通りです。
$STANDARD_INFORMATION attribute(16) - フラグ、Security ID、MACtime、オーナ
全てのファイル/ディレクトリに存在する。コアとなるメタデータ。2000, XPでは72byte。
attribute IDが小さいためソート時に常に先頭にくる。MAC timeの種類と内容は以下のとおり。
Creation Time ファイルが作成された時刻。WIndowsではファイル移動でもこの時間は変わらない
Modified Time コンテンツの$DATAや$INDEX属性($INDEX_ROOT, $INDEX_ALLOCATION)が最後に更新された時間
MFT Modified Time ファイルのメタデータが最後に更新された時間。ボリューム間のファイル移動では時間は保存される
Accessed Time ファイルのコンテンツに最後にアクセスされた時間。反映は即時ではなく1時間ほど後に更新される。
フラグはread only、システム、アーカイブなどがある。
$FILE_NAME attribute(48) - フラグ、ファイル名、親MFTエントリ、MACtime
全てのファイルとディレクトリはこの属性を1つ以上もつ。サイズはファイル名に依存し66byte+ファイル名長。
UTF-16でエンコードされたファイル名が格納され、親ディレクトリのファイル参照を含む。
$STANDAR_INFORMATIONが格納する値のコピーを多く持つが、例えばMACtimeはこちらで保持する値はΩf 通常アップデートされないため、ファイル作成、移動、リネームした時間に一致する。
フラグはディレクトリ、read only、システムファイル、圧縮、暗号化などがある。
$DATA attribute(128) - 決められたフォーマットはなく任意のデータ、サイズをもつことができる。ファイルのサマリ情報に使われたり、バックアップソフトウェアなどが個別に書き込む領域として使われる。追加の$DATA属性はデータを隠す為に使われる。例えばディレクトリのコンテンツをリスティングする時に追加の$DATA属性は表示されない。これはAlternate Data Stream(ADS)とも呼ばれる。
コマンドプロンプトでファイル名の後ろにコロンを挿入して属性名を入れればADSのデータを保存することができる。
$ATTRIBUTE_LIST attribute(32) - 自身を除くファイルのすべての属性を格納するために使われる。
属性のタイプ、配置されているMFTエントリのアドレスを含む。
$SECURITY_DESCRIPTOR attribute(80) - Windows NTで使われる。それ以降では一つのファイルに記述する形式となっており、互換性維持のために使われている。
ディレクトリインデックスはファイル参照アドレスと$FILE_NAME attributeをもつ。
ルートディレクトリのMFTエントリは5