サーバーOSでディスク容量確保のため、データ重複除去を利用されている状況下でも容量逼迫する場面もあるかと思いますが、急遽データを削除しても全然容量が解放されないといったケースがありませんでしょうか?
はじめに解放されない原因を説明するために、データ重複除去の「チャンク」と「ポインタ」でデータ重複除去がどのようにディスク容量を節約しているか、簡単に説明いたします。
まず、分割とハッシュ化: ファイルを小さなデータのかたまり(チャンク)に分割し、それぞれのチャンクからハッシュ値を計算します。
重複チェック: 同じハッシュ値を持つチャンクがあれば、「あ、これ同じデータ」と判断します。
格納と参照: 重複したチャンクは、実体を1つだけ「チャンクストア」という特別な場所に保存します。
そして、元のファイルは、そのチャンクへのポインタ(参照)に置き換えられます。
これにより、同じデータが複数あっても、ディスク上では1つ分の容量しか消費しない、というわけです。
それでは、削除したのにデータ容量が増えないのは、どうしてでしょうか。
理由は、他のデータと参照データが重複していて、利用されている可能性があるためです。
例えば、file_A.pptx と file_B.pptx という2つのファイルが、共通のチャンク(Chunk_XYZ)を参照していたとします。
ここで、file_A.pptx を削除したとしましょう。
しかし、Chunk_XYZ はまだ file_B.pptx から参照されています。
もしここで Chunk_XYZ の実体を削除してしまうと、file_B.pptx が壊れてしまいますよね?
そのため、システムは Chunk_XYZ を削除せず、そのままチャンクストアに残しておきます。
やがて、file_B.pptx も削除されたとします。
すると、Chunk_XYZ はどのファイルからも参照されなくなり、宙に浮いた存在になります。
これが、データ重複除去における『ガベージ(ゴミ)』の正体です。
このガベージチャンクは、ただディスク容量を無駄に占有しているだけの、まさしく「ゴミ」なのです。
ここで「ガベージコレクション」が登場します。
この溜まったゴミを掃除してくれるのが、『ガベージコレクション(GC)』です。
ガベージコレクションジョブは、以下のような手順でゴミ掃除を行います。
スキャン: チャンクストア内にある全てのチャンクをスキャンします。
参照チェック: 各チャンクが、現在ボリューム上に存在するいずれかのファイルから参照されているかどうかを徹底的にチェックします。
クリーンアップ: どこからも参照されていないことが確認できたチャンク(=ガベージ)を、チャンクストアから安全に削除します。
このGCが実行されて初めて、削除されたファイルが使っていたチャンクが物理的に解放され、ディスクの空き容量として反映されるのです。
それでは、GCはいつ動くのでしょう?
GCは、ディスクI/Oに比較的高い負荷をかける処理です。
そのため、デフォルトではユーザーのアクセスが少ない時間帯に実行されるよう、タスクスケジューラに登録されています。
確認場所: タスク スケジューラ → Microsoft → Windows → Deduplication
デフォルトのタスク名: WeeklyGarbageCollection
名前の通り、デフォルトでは週に1回しか実行されません。
そのため、「ファイルを大量に消したのに、すぐに空き容量が増えない!」という現象は、このスケジュールが原因であることが多いのです。
なお、早急に解放したい際は、PowerShellの画面で下記のコマンドを実行することで手動で実行も可能です。
Start-DedupJob D: -Type GarbageCollection -full
※ 記載例はDドライブのGCを実行するコマンド内容で、『D:』は対象のドライブの指定箇所となります。
状況によって、タスクスケジュール変更や手動実行して運用にお役立ていただけますと幸いです。

