コマンド「fsutil file createnew」は実際に何を実行しますか?

コマンド「fsutil file createnew」は実際に何を実行しますか?

Windows OS のコマンド ラインで、任意のサイズのファイルをすばやく作成する必要がある場合は、次のコマンドを使用します。

fsutil file createnew <filename> <size_in_bytes>

最近、このネイティブ ツールを使用して 100 GB のファイルを作成しましたが、ファイルの作成に 500 ミリ秒もかからなかったことに驚きました。このファイルは、以前にデータでいっぱいだったプラッタベースのハード ドライブ上に作成しました。

好奇心から、16 進エディタでファイルを開いたところ、完全に空のようでした (確かに、100 GB すべてを手動で検査したわけではありません)。500 ミリ秒で 100 GB のデータを書き込むことは不可能なので、ハード ドライブの以前の内容でいっぱいになっていると思っていました。

実際に何fsutil file createnewをするのでしょうか? また、実際に何を行うかにもよりますが、セキュリティの低い高速ワイプ手法 (シングル パス) として使用できますか?

答え1

ハードドライブの以前の内容がいっぱいになっていると思っていたのですが、

マルチユーザーオペレーティングシステムでは、通常、このようなことは許可されません。これは、OSレベルのファイル保護機能を不必要に簡単に回避できるためです。少なくともWindowsでは、これは明示的に許可されています。セキュリティ認証の一部

fsutil file createnew は実際に何を行っているのでしょうか?

少なくとも 2 つのオプションがあり、fsutil は最初のオプションを使用すると思われます (ただし確認していません)。これは、OS に依存して「データの終わり」を追跡します。

  • ファイルシステムは、「ファイルの終わり」と「有効なデータの終わり」という 2 つの別々のポインターを保持することがあります。これは、Windows での NTFS の動作を明確に表しています。

    電話をかけることができますファイルの終了を設定する()(Linuxに対応)ftruncate()) を使用すると、データのない大きなファイルが作成され、"有効なデータの終わり" と "ファイルの終わり" の間のスペースは、読み取り時にすべて 0x00 バイトを自動的に返します。

    (特権アカウントは、実際には SetFileValidData() 呼び出しを使用して、OS に既にディスク上にあるデータを返すように強制できますが、これは一般的に使用される操作ではありません。)

  • ファイルシステムがエクステントベースである場合、個々のディスククラスタではなく、ファイルを構成する連続した「開始-終了」範囲全体を追跡します。これにより、スパースファイル、一部のエクステントは単に物理的な割り当てがまったくない(つまり「穴」である)とマークされています。これらの場所は、読み取られると 0x00 を返します(もちろん、そこに何か他のものが書き込まれるまでは)。

    一般的に、単純に求めるファイルの終わりを超えて書き込みを続行すると、可能な場合は自動的にスパース ファイルが生成されます。

fsutil には、ファイルの「有効なデータ」ポインターとエクステント リストの両方を検査するサブコマンドがあります。

これらの技術をサポートしていないファイルシステム(FATなど)もあり、その場合はOS意思対応するディスク領域を明示的にゼロにする必要があります。

そして、実際に何をするかにもよりますが、低セキュリティの高速ワイプ技術 (シングルパス) として使用できますか?

いいえ、機械式ディスクではそうではありません。

関連情報