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と同様に、スパース属性を割り当てて、解放された領域の範囲を設定できます。 さらに、私のプログラムは、特定の指定サイズよりも大きいファイル内の空の領域を検索し、それらを解放することができます。 オフセットを自分で計算する必要はありません。

参照:

Source: https://habr.com/ru/post/J78018/


All Articles