NTFSのスパースファイル

NTFSはスパースファイルをサポートしています。 これらは、自身のサイズよりも少ないディスク容量を占有するファイルです。 このテクノロジーは、NTFSに組み込まれたファイル圧縮のサポートとは関係ありません。スパースファイルのディスクスペースの節約は、異なる原則に基づいているためです。 データ圧縮は実行されません。 代わりに、ゼロのみ(0x00)で占められている領域がファイル内で解放されます。 スパースファイルを読み取り、ゼロのある領域に到達するアプリケーションは、ゼロを読み取りますが、実際にはディスクから読み取りません。



この方法では、ゼロで構成される巨大なファイルを作成できますが、ディスク上では数キロバイトしか占有できません。 0x00の代わりに他のデータが書き込まれると、実ディスク領域が割り当てられます。 スパース性は、非常に大きな空き領域があるファイルでのみディスクスペースを節約するのに役立ちます。



コマンドラインでfsutilシステムユーティリティを使用してスパースファイルを操作する方法を示します。



ユーティリティを使用して、空の大きなファイルを作成します。

fsutil file createnew test.nul 10000000000







ファイル属性「スパース」を設定します。

fsutil sparse setflag test.nul







属性自体はまだディスク容量を節約しません。 また、ファイル内の解放される領域をマークする必要があります。 ファイル全体が空なので、領域をファイルサイズに設定できます。

fsutil sparse setrange test.nul 0 10000000000







できた 結果を見ます。

画像



2006年に作成した小さなユーティリティのソースコードのAPI関数を使用して、プログラムでこれらの操作を行う方法を確認できます。 また、コンソールでもあり、fsutilと同様に、スパース属性を割り当てて、解放された領域の範囲を設定できます。 さらに、私のプログラムは、特定の指定サイズよりも大きいファイル内の空の領域を検索し、それらを解放することができます。 オフセットを自分で計算する必要はありません。



参照:




All Articles