Windows (または NTFS) は、偽のサイズのプレースホルダー ファイルをサポートしていますか?

Windows (または NTFS) は、偽のサイズのプレースホルダー ファイルをサポートしていますか?

Photoshop を起動するたびに、キャッシュが保存されているハード ドライブに 2GB の一時ファイルがすぐに作成されます。プラッター ドライブなので、通常 2GB のデータを書き込むときに発生するハード ドライブのノイズはまったく聞こえません。後で実際にデータをキャッシュする必要がある場合に備えて、スペースを予約するために「偽の」サイズの空のプレースホルダー ファイルを作成することは可能ですか?

答え1

NTFS ボリュームでこれを実現するには 2 つの方法があります。

SetEndOfFile関数NTFSファイルシステムでは、ファイル用のディスクスペースを予約しますが、そのスペースに何かを入れることはありません。NTFSブックキーピングの更新により、ディスクアクティビティが少し発生する可能性があります。プログラムがファイルに書き込まれた最後のバイトを超えて何かを行うと、NTFSは最後に書き込まれた(最後の「有効な」)バイトと要求されたバイトの間の実行を上書きします(セキュリティ上の問題) を実行し、有効なデータ ポインターを更新します。

それからスパースファイルで拡張された通常のファイルとは異なりSetEndOfFile、NTFS は、有効なデータを含む最後のバイトがどれであるかだけではなく、どのセクターに実際のデータが含まれているかを追跡します。何も書き込まれていない長いゼロの連続は、物理ディスクに保存されません。

ファイルがスパースであるかどうかは、 にfsutil sparse queryflag続けてファイルへのパスを入力することで確認できます。スパースでない場合、プログラムは最初のアプローチを使用しています。

参考文献:シングルバイトの書き込みに時間がかかるのはなぜですか?

答え2

はい、これは「スパース ファイル」と呼ばれます。

NTFS と ReFS はサポートしていますが、FAT32 と ExFAT はサポートしていません。

プログラムは、ファイルのどのバイト範囲にディスク上のスペースを割り当てるかを OS に明示的に指示できます (デフォルトではすべて)。その他の割り当てられていない部分は、プログラムによって読み取られると、値 0 のバイトが大量に含まれているものとして扱われます。

ファイル プロパティ ダイアログには、「通常の」ファイル サイズ (これは「偽の」サイズです) と、ディスク上で使用されているサイズ (割り当てられた部分 (HDD ブロック全体を取得するためのバイト数を加えたもの)) が表示されます。

こちらもご覧くださいhttps://en.wikipedia.org/wiki/Sparse_file

答え3

組み込みツールfsutilを使用すると、ゼロでいっぱいの非スパース ファイルをすばやく作成できますfsutil file createNew <filename> <bytes>。ディスク上のスペースを占有しますが、ゼロ ブロックに書き込む必要はありません (NTFS または同様のものを使用している場合)。

以下は 10 GB のファイルを作成する例です。ハードディスクの空き容量は 10 GB 減少しますが、アクションは非常に速く実行されます。

C:\>fsutil file createNew dummy 10737418240
File C:\dummy is created

C:\>fsutil sparse queryFlag dummy
This file is NOT set as sparse

関連情報