NTFS 圧縮はなぜ多くのスペースを占有するのでしょうか?

NTFS 圧縮はなぜ多くのスペースを占有するのでしょうか?

ディスク領域を節約するために、インストールした VMware vSphere Client を圧縮するのがよい考えかもしれないと考えました。これは、ほとんど使用しないからです。

空きディスク容量にはまったく逆の効果があることに驚きました。さらに調べてみると、フォルダーの圧縮に関連していることがわかりましたHelp。ディスク容量の減少はフォルダーのサイズには反映されません。

別のプログラムが偶然にディスク領域を占有しないように、圧縮/解凍サイクルを 3 回繰り返しました。フォルダーに多数の小さなファイル (≈ 30k) が含まれていることは注目に値します。

なぜそうなるのでしょうか?また、他のフォルダを見つけるにはどうしたらいいのでしょうか?減圧するディスク容量を節約するには?


圧縮なし:

圧縮なしのフォルダサイズ 圧縮なしの空き領域

圧縮あり:

圧縮時のフォルダサイズ 圧縮による空き領域

答え1

提供されたフォルダー サイズのスクリーンショットに関する背景知識を少し紹介します。

非圧縮

予想どおり、小さなファイルが多数あると、オーバーヘッドが大きくなります。ハード ディスクは、特定のブロック サイズ (NTFS の場合はデフォルトで 4 KB) でパーティション分割されます。

各ファイルは4KBの倍数を割り当てる必要があるため、1KBのファイルでも3.5KBのファイルでも、どちらも4KBのスペースを占有します。13KBのファイルの場合は、ドライブ上で16KBを使用します。「サイズ」と「ディスク上のサイズ」の違いは、ブロック内の未使用スペースによって生じるオーバーヘッドです。クラスターのヒント

圧縮

圧縮後、「サイズ」は、ネットデータ量はまったく変わっていないため、同じままです。ただし、圧縮により、合計サイズを約 130 MB 削減できました。実際には、ここでもオーバーヘッドが適用されるため、さらに大きくなります。したがって、圧縮によって実際にそのフォルダー内のスペースがいくらか節約され、それがフォルダー サイズにも表示されます。

さて、Cドライブの空きディスク容量が減った場合の動作についてですが、これには複数の理由が考えられます。理解しておくべきことの1つは、空きディスク容量は常に

<Disk size> - <total size of all files>

これは、スペースを消費するメタデータ (VSS スナップショット、システム復元ポイント、MFT など) が大量にあるためです。

単一ファイルの圧縮中、NTFS は圧縮が完了するまで元のファイルを一時的に保持します。これは、コンピュータがクラッシュした場合でも、有効なバージョンのファイルが残るようにするためです。ただし、これは一時的なものに過ぎません。しかし、すべては NTFS メタデータを指しているため、この状態になります。

結果をより正確に検証するには、次の操作を実行できます。

  • 圧縮されていないフォルダから始める
  • 各ボリュームのシステム保護を無効にする(コンピュータのプロパティ/システム保護)
  • 同じダイアログで各ボリュームの復元ポイントを削除します
  • 一時ファイルを削除するには、ボリュームCのプロパティで「ディスククリーンアップ」を使用します。
  • 空きディスク容量に注意してください
  • フォルダを圧縮する
  • コンピュータを再起動してください
  • ディスククリーンアップを再度使用する
  • ディスクの空き容量を確認してください

理論的には空き容量の増加が見られるはずです

答え2

最近、同様の問題を調査したところ、圧縮ファイルはファイルごとに少なくとも 4 キロバイトのスペースと、4 KB クラスター サイズの NTFS の 1 つの「圧縮ユニット」のサイズである 64 キロバイトの一時スペースを占有することがわかりました。blogs.msdn.com の記事また、ファイルが圧縮されると、ディスク領域が 1 つの完全な CU を保持するために割り当てられ、未定の時間に解放されることも言及されています。これが、一時的ではありますが、5 GB の損失が発生している理由です (再起動すると、間違いなくこの損失は修正されるはずです。他の手段でも修正されるはずですが、デフラグは試しましたが失敗しました)。割り当てられている容量は明らかにかなり大きいようです (64kb*(31048+582) = 2072903680 または 1.93 GB)。しかし、これは、NTFS には、生データにコミットするのに時間とプロセッサ ユニットを要するトランザクションがあり、そのプロセスが終了すると、圧縮によって解放された 5 GB と 150 MB の容量がすべて戻されるため、説明がつきます。

要約すると、大量のファイルを圧縮すると、一時的にスペースが失われるだけです。ただし、それらのファイルが頻繁に変更される場合、変更されたコンテンツが書き込みアクションの前にクラスターが占めていたスペースに収まるように圧縮できない場合に備えて、それらのファイルの非圧縮データを保持するためにディスク領域が割り当てられます。

答え3

私も同じ現象を経験しました:

サーバー移行で、古い Windows Server 2012R2 のドライブのデータ フォルダー (圧縮フォルダー 2 つを含む) を、同じサイズの新しい Windows Server 2016 Datacenter ドライブにコピーしました。このドライブでは、コピー プロセスの前にフォルダー構造を作成し、これらの 2 つのフォルダーに圧縮フラグを設定しました。コピー中にディスク領域が不足し、どこを見ても 20 GB のうち 3 GB しか使用されていませんでしたが、ドライブ自体には 19.x GB が使用されていると表示されています。同僚から圧縮フラグを削除するように言われ、奇跡的に失われた 17 GB が再び現れました。

その後、あなたの記事を読んで、フラグを再適用して再起動してみることにしましたが、おかしなことに、今回は使用済みディスク容量は増加しませんでした。

Windows Server 2016 では (おそらくずっと前から)、ファイルが圧縮フォルダーにコピーされたときに (既存のファイルに圧縮フラグが適用されたときではなく) 内部で生成された一時ファイルが適切にクリーンアップされないという問題があると思います。

答え4

補足: 上記の説明に加えて、アプリケーション フォルダーには、圧縮がうまくいかないファイル (すでに大幅にデータ削減されたメディア形式 (jpeg 画像、ビデオ ファイル、mp3 オーディオなど)、すでに圧縮されたファイル (最近の多くのデータ形式は ZIP アーカイブとして構築されています)、実際にランダム データまたはランダム データに似たデータを含むファイル、暗号化されたファイルなど) が含まれる場合があります。これにより、圧縮によって節約されたデータよりも、圧縮された内容の記録に使用されるデータが多くなる可能性があります...

関連情報