NTFS でマスタ ファイル テーブル (MFT) 用の領域を予約する方法


概要


NTFSファイルシステムには、コアファイル、マスターファイルテーブル(MFT)というファイルが格納されています。 MFT自体を含む、NTFSボリューム上のすべてのファイルに対してMFTに少なくとも1つのエントリがあります。

NTFS ボリュームを最適化するユーティリティでは MFT エントリを移動することはできません。また、MFT の断片化が過度に進むと、パフォーマンスに影響を及ぼします。このため、NTFS では、MFT のサイズが大きくなっても可能な限り連続した領域を使用するように、MFT 用の領域が予約されています。

Windows XPおよびWindows Server 2003での変更点

Windows XP および Windows Server 2003 では、デフラグ ユーティリティが MFT をデフラグします。

MFT のデフラグ操作では、MFT ファイルが 1 つにまとめられ、ディスク上で順番に並んでいない複数の場所に格納されなくなります。 このクラスの操作では、MFT ファイルはよりシーケンシャルです。 ただし、MFT ファイルは、デフラグ操作の前のサイズと同一になります。

大量のファイルが削除されたときに使用されるボリュームが大きすぎる場合は、MFTが大きすぎる可能性があります。 削除されたファイルは、MFT に内部ホールを発生させます。 これらのホールは、ファイルによって使用されていない領域です。 このスペースを再利用することは不可能です。 これは、少なくとも、ライブ NTFS ボリューム上では正確です。

詳細情報


NTFSでは、MFTエントリを使用して、そのファイルが対応するファイルを定義します。 ファイルのサイズ、時刻と日付のスタンプ、アクセス許可、データの内容など、ファイルに関するすべての情報は、MFTエントリまたはMFT外部のスペースに格納されますが、MFTエントリによって記述されます。

(ディレクトリのエントリ、MFTの外部情報には、ファイルに関する冗長な情報も含まれます。 しかし、NTFSのすべての構造に関する詳細な説明はこの記事の範囲を超えています。)

ファイルが NTFS ボリュームに追加されると、エントリは MFT に追加されるため、MFT のサイズが大きくなります。 ファイルが NTFS ボリュームから削除されると、エントリは無料でマークされ、再利用できますが、MFT は圧縮されません。 したがって、これらのエントリで使用されるスペースはディスクからの影響を受けません。

NTFSに対するMFTの重要性と、このファイルが非常に細分化された場合のパフォーマンスへの影響の可能性があるため、NTFSはこのファイルを連続した状態に保つために特別な努力をします。 NTFSは、ボリュームの残りの部分が完全に使い果たされるまで、そのボリュームの12.5%をMFT専用に予約します。 したがって、ファイルおよびディレクトリのスペースは、他のすべてのスペースが最初に割り当てられるまで、この MFT ゾーンからは割り当てられません。

Windows NT 4.0 Service Pack 4 では、NtfsMFTZoneReservation レジストリ キーを変更して、ボリュームを増やすことができます。

MFT の詳細については、以下の Microsoft Technet Web サイトの「ディスク最適化プロセスの重要な要素」を参照してください。 平均的なファイル サイズやその他の変数に応じて、ディスク上の予約された MFT ゾーンまたは予約されていない領域のどちらか一方が最大容量に達するまで、その領域が使用されます。

多数の比較的大きなファイルを持つボリュームがあるボリュームは、最初に大量のファイルを消費しています。また、大量のファイルがある場合は、最初に MFT ゾーン空間を使用します。 どちらの場合も、1つの領域または他の領域がいっぱいになると、MFTの断片化が開始されます。 予約されていないスペースがいっぱいになると、ユーザーファイルおよびディレクトリ用のスペースが、割り当て用のMFTと競合するMFTゾーンから割り当てられ始めます。 MFT ゾーンがいっぱいになると、新しいエントリの容量がディスクの残りの部分から割り当てられ、他のファイルと競合します。


Windows NT 4.0 用の Service Pack 4では、NTFS がマスタファイルテーブル用に予約するボリュームの割合を増やすことができる新しいレジストリ パラメータが導入されました。 NtfsMftZoneReservationは、1 から 4 の間の値を取ることができる REG_DWORD 値です。ここで、1 は最小 MFT ゾーンサイズに対応し、4 は最大 MFT ゾーン サイズに対応します。 パラメーターが指定されていないか、無効な値が指定されている場合、NTFSでは、このパラメーターに既定値1が使用されます。 各設定に対応する正確な比率は標準化されておらず、将来のリリースで変更される可能性があるため、文書化されていません。 環境に最適な設定を把握するために、異なる値を使用することが必要になる場合があります。

Windows NTベースのコンピュータでMFTの現在のサイズを確認するには、NTFSボリュームでdir /a $mftコマンドを入力します。

Microsoft Windows 2000 ベースのコンピュータで、現在の MFT サイズを確認するには、ディスク デフラグ ツールを使用して NTFS ドライブを分析し、[レポートの表示] をクリックします。現在の MFT サイズや断片の数など、ドライブの統計情報が表示されます。

Windows 2000 のディスクデフラグツールでは、 「システムファイル」と呼ばれるものに対して「緑色」が表示され、NTFS フォーマットのボリュームでは、MFTとpagefile.sys(このボリューム上に存在する場合)および「MFT ゾーン」または「MFT 拡張」用の予約済みスペースとなります。 デフラグ レポートでは、ページ ファイルおよび MFT に関する情報のみが表示されます。これは、ディスク使用率や容量に影響を与えないため、MFT領域には適用されません。

MFT ゾーンは、ユーザー データ ファイル用に使用可能な(空き)ドライブ スペースから差し引かれるのではなく、最後に使用されたスペースのみとなります。 たとえば、MFTのサイズを大きくする必要があり、新しいファイルやディレクトリを作成した場合、最初にMFTゾーンから取得されるため、MFTの断片化が減少し、MFTのパフォーマンスが最適化されます。

既定のMFTゾーンは、ボリュームをマウントするときに計算され、Ntfs.sysによって予約され、ボリュームサイズに基づきます。 以下に記載されているレジストリ エントリを使用して MFT ゾーンを増やすことはできますが、デフォルトの MFT ゾーンを Ntfs.sys で計算されたものより小さくすることはできません。 MFTゾーンを大きくしても、データファイル用にユーザーが使用できるディスク容量は減少しません。

dir コマンドで返される結果は、最新の値ではない場合があります。 dir コマンドで報告されるサイズは、正常なシャットダウンの後にシステムが起動された時点のMFTのサイズを反映したキャッシュデータを反映している可能性があります。


重要: このセクション、方法、またはタスクには、レジストリの変更方法が記載されています。 レジストリを誤って変更すると、深刻な問題が発生することがあります。 レジストリを変更する際には十分に注意してください。 万一に備えて、編集の前にレジストリをバックアップしてください。 問題が発生した場合でも、レジストリを復元できます。 レジストリのバックアップ方法および復元方法の詳細を参照するには、以下のサポート技術情報番号をクリックしてください。
322756 Windows でレジストリをバックアップおよび復元する方法


この値を追加するには、次の手順を実行します。
  1. レジストリ エディタ (Regedt32.exe) を実行し、次のサブキーに移動します。
    HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\FileSystem
  2. [編集] メニューの [値の追加]をクリックします。
  3. ダイアログ ボックスに、次の情報を入力します。
    値の名前: NtfsMftZoneReservation
    データの種類: REG_DWORD
    データ : (有効範囲は 1 ~ 4)
  4. レジストリ エディタを終了し、コンピュータを再起動します。
これは実行時パラメータであり、ボリュームの実際のフォーマットには影響しません。 むしろ、NTFSが特定のシステム上のすべてのボリュームにスペースを割り当てる方法に影響します。 したがって、完全に効果的であるためには、パラメータはボリュームのフォーマット時に、ボリュームの耐用年数全体に設定する必要があります。 レジストリ パラメータを下方に調整するか削除すると、それに応じて MFT ゾーンが縮小されますが、これはすでに割り当てられて使用されている MFT 空間には影響しません。