ReFSでSDeleteがPurging MFTで終わらない原因と対策|Sysinternals SDelete 2.02の互換性と安全な代替手段

Windows ServerでReFSを使っていると、Sysinternals SDelete 2.02 を実行しても「Purging MFT」から完了しないことがあります。この記事では、公式情報から分かるReFS互換性の扱いと、目的別に失敗しにくい代替策・運用手順を整理します。

目次

起きている症状と、混乱しやすいポイント

今回の論点はシンプルで、次の2つが同時に起きることで判断が難しくなっています。

  • ReFSボリュームに対して SDelete 2.02 を実行できてしまう(=動くように見える)
  • ところが最終盤のように見える「Purging MFT」フェーズで終わらない、もしくは進捗表示が異常になる

そして重要なのが、「動く」ことと「対応している(保証されている)」ことは別という点です。特にストレージ系のツールは、ファイルシステム仕様・OSバージョン・仮想化・アレイの実装差で挙動が変わりやすく、“たまたま動いている”状態が発生しがちです。

実際、Microsoft Q&A にある当該スレッド(SDelete 2.02 / ReFS / Purging MFTで終わらない)でも、受理回答は「ReFS互換です」と断言せず、専用窓口へ問い合わせる流れになっています。
SysInternals SDelete 2.02 – Is it compatible with ReFS ?(Microsoft Q&A)

結論としての整理

結論から言うと、SDeleteは公式ドキュメント上、ReFS対応を明言していません。そのため、ReFS上で動作したとしても、運用設計としては次の扱いが安全です。

  • 「ReFSでの互換性は未確認(少なくとも明文化された保証はない)」として扱う
  • 公式の回答が必要なら、Sysinternalsの窓口(Microsoft Q&A)に事例を添えて質問する

Sysinternalsの質問窓口は現在、Microsoft Q&A(Sysinternalsタグ)に集約されています。
Sysinternals Community(Microsoft Learn)
Sysinternals – Microsoft Q&A(タグ一覧)

また、SysinternalsツールはライセンスFAQ上も「as is」で、公式のMicrosoftサポートが付く性質のものではありません。困ったときの一次窓口はコミュニティになります。
Sysinternals Licensing FAQ(Is there technical support available?)

「Purging MFT」とは何をしているのか

「Purging MFT」が何かを理解すると、ReFSで違和感が出る理由が見えてきます。

SDelete公式ページ(現行ドキュメントは v2.05)では、空き領域の消去(clean/zero)を次の考え方で実現すると説明しています。

  • 空き領域に直接書き込むのではなく、巨大なファイルを作ってディスクを埋めることで、結果的に空き領域を上書きする
  • NTFSの場合はさらに、NTFSのMFT(Master File Table)の未使用領域も埋める必要がある

実際にドキュメントには、NTFSのMFT未使用領域を埋める工程が明記されています(MFTレコードは通常1KB、などの記述もあります)。
SDelete – Sysinternals(How SDelete Works / NTFS MFTの説明)

つまり、SDeleteの「Purging MFT」は、NTFSのMFTという前提に強く依存した工程です。ReFSはNTFSとは異なるメタデータ構造を持つため、SDeleteの説明通りに“意味のある”処理になっているかは、少なくともドキュメントだけでは判断できません。

フェーズ別に見ると何が起きているか

表示されるフェーズ公式説明上の目的代表的な挙動ReFSでの注意点
Cleaning free space未割り当て領域の上書き(安全消去/ゼロ化)巨大な一時ファイルを作り、ボリュームが一時的に満杯になることがあるこの工程自体は「大きいファイルを書いて消す」発想なので、ReFSでも動いて見えやすい
Purging MFTNTFSのMFT未使用領域を、MFT内に収まる小さなファイルで埋める小さな書き込みが大量に発生し、遅くなりやすい/進捗表示が変になりやすいReFSにはNTFSのMFTがないため、工程の意味づけが不明。長時間化・表示異常の原因になりやすい

「Purging MFTが終わらない」報告はReFS固有とは限らない

「Purging MFTが終わらない」「%が異常(100%を超える)」という現象は、ReFSに限らず散見されます。

例として、Microsoft Q&Aにある別スレッドでは、「Purging MFT files 2933% complete」のように表示が破綻しても、単に進捗表示が不正確なだけで、空き領域が大きければ長時間かかる旨が回答されています。
SDELETE Purging MFT files 2933% complete and still going(Microsoft Q&A)

さらに、SysinternalsドキュメントのGitHub側Issueでは、exFAT(MFTが存在しないファイルシステム)でも“purging MFT”と表示されるという指摘が出ています。これは「表示名やロジックがNTFS前提のまま残っている」「ファイルシステム判定が荒い」など、SDelete側の実装・表示品質の問題が絡む可能性を示唆します。
sdelete “purges MFT” on exFAT disks(GitHub Issue #847)

したがって、ReFSで「Purging MFTが終わらない」現象を見ても、即座に「ReFSが悪い」「ディスクが壊れた」と決めつけるのは危険です。“SDeleteのPurging MFT工程が、環境次第で極端に時間がかかる/表示が破綻しやすい”という前提で切り分けるのが現実的です。

ReFSでSDeleteを使う前に押さえるべき前提

ReFSは主にWindows Server向けのシナリオで、可用性・拡張性・整合性を重視したファイルシステムです。用途として「バックアップターゲット」「仮想化」「大容量」が想定されます。
Resilient File System (ReFS) overview(Microsoft Learn)

この前提がSDeleteと衝突しやすい理由は次のとおりです。

  • ReFSはバックアップ/仮想化で使われやすく、ボリュームが巨大になりがち
  • ストレージがSANや仮想ディスク(VHDX/VMDK)で、実体のI/O性能や最適化が複雑になりがち
  • 薄いプロビジョニングやTRIM/UNMAPの要件は、構成によってはNTFSが求められる(特にSAN)

つまり、SDeleteの「大量書き込み」「小さな書き込みを大量に発生させるPurging工程」は、ReFSを採用しやすい環境ほど“重くなりやすい”構造です。

目的別に選ぶべき現実解

SDeleteを使う動機は大きく2系統に分かれます。ここを取り違えると、不要なリスクを背負います。

目的よくある背景ReFSでSDeleteを使うリスク推奨アプローチ
完全消去(復元不能)廃棄・返却、監査、機密データ対策ReFS対応が明言されず、結果を“保証”できない暗号化(BitLocker等)+鍵破棄、媒体/アレイのSecure Erase、再構築を優先
空き領域のゼロ埋めVHDX圧縮、Thin Provisioningの回収、ストレージアレイのゼロ検知Purging MFTで時間が読めない/表示が壊れるSDeleteの“ゼロ化”機能を限定的に使う(テスト&手順化)+代替策も用意

完全消去が目的なら「SDeleteで上書き」を主軸にしない

完全消去が要件に入る場合、ReFSでSDeleteが“動いた”ことを根拠に設計しないのが安全です。理由は単純で、公式にReFS対応が明文化されていないからです。

企業運用として堅い選択肢は、次のいずれか(または組み合わせ)です。

  • BitLocker等で暗号化しておき、廃棄時に回復キーを確実に破棄(論理的な“消去”を鍵で達成)
  • ストレージのSecure Erase / Sanitize(SSD/NVMeやアレイの機能を使用)
  • 再フォーマット+再暗号化、あるいは用途に応じて媒体そのものを入れ替え

なお、Windows標準ツールのcipher.exeにも「削除済み領域の上書き(/w)」機能がありますが、Microsoftの説明はNTFSを前提にしています。ReFSで同様の保証を期待するのは避けたほうが安全です。
Use Cipher.exe to overwrite deleted data – Windows Server(Microsoft Learn)

空き領域のゼロ埋めが目的なら「ゼロ化に限定して」「期待値を合わせる」

VHDX/VMDKの圧縮や、アレイ側のゼロ検知で容量を回収したい場合、SDeleteが現場で使われることがあります。Veeamフォーラムでも、ReFSボリュームに対して sdelete64 -z が動作したという体験談が複数あります(ただし公式保証ではありません)。
ReFS – reclaim space on array?(Veeam Forums)

ここで大事なのは、SDeleteの公式説明上も -z は「仮想ディスク最適化に良い」 と明記されている点です。目的が「ゼロ化」なら、オプション選択を誤らないことが最初の防波堤になります。
SDelete – Sysinternals(-z Zero free space の説明)

ただし、ゼロ化が目的でも最後に「Purging MFT」が出て長引くことがあります。この工程はNTFSのMFTに基づく説明しかないため、ReFSでは“長くても驚かない”こと、そして“完了時間を読んで運用に組み込む”のが重要です。

実務向け:切り分けと再現確認のチェックリスト

「ReFSだからダメ」と決める前に、最低限この情報を揃えると、原因が急に絞れます。Sysinternalsに質問するときのテンプレとしても有効です。

環境情報の採取

  1. OS:Windows Serverのバージョン(2016/2019/2022/2025)と最新パッチ状況
  2. ReFSの配置:ローカルディスク / Storage Spaces / S2D / SAN / 仮想ディスク(VHDX/VMDK)
  3. ボリューム規模:容量、空き容量、割り当て単位(4K/64K)
  4. SDeleteのバージョン:2.02か、最新(現行ドキュメント上はv2.05)か

コマンド例:

fsutil fsinfo volumeinfo X:
Get-Volume -DriveLetter X

コントロールテスト

  • 同じマシンで、NTFSの別ボリュームに対して同様の操作を実施し、Purging MFTの所要時間や進捗表示の癖を比較する
  • 対象が仮想ディスクなら、裏側ストレージのスループット/レイテンシが出ているかをリソースモニターやPerfMonで確認する

「止まっている」のか「遅い」のかを見分ける

Purging MFTが長いとき、体感では“固まった”ように見えます。判断のポイントは次のとおりです。

観測解釈次のアクション
ディスクI/Oが継続している処理は進んでいる可能性が高い(表示が壊れているだけの場合も)メンテナンス枠を確保して継続。必要ならQ&Aに事例投稿
I/OがほぼゼロでCPUも低い待機/リトライ/ブロックの可能性イベントログ、ストレージ側ログ、AV/バックアップ/スナップショット干渉を確認
空き容量が急減し続ける一時ファイルで埋めている最中の可能性想定内。ただし業務影響が出ない枠で実施

進捗表示が破綻する例自体は、Microsoft Q&Aでも「表示がおかしいだけで問題とは限らない」とされています。
SDELETE Purging MFT files 2933% complete and still going(Microsoft Q&A)

よくある落とし穴

「ReFSで実行できた=ReFS対応」と誤解する

SDeleteは論理ディスクに対して実行できてしまうため、ReFSでも“開始できる”ことがあります。しかし、公式ドキュメントがNTFSのMFTを前提に工程を説明している以上、動作保証まで推定する根拠にはなりません。
SDelete – Sysinternals(How SDelete Works)

「Purging MFT=ファイル名も含めて完全に痕跡ゼロ」と思い込む

SDeleteの公式説明には、空き領域の処理ではファイル名は消せない旨が明記されています(ディレクトリ構造の未使用領域は他ファイルに割り当てできず、上書きできないため)。
SDelete – Sysinternals(file names located in free disk space の記述)

つまり、規制・監査・フォレンジック耐性まで含めて「痕跡を消す」が要件なら、SDeleteだけで設計を完結させるのは危険です。暗号化や媒体消去と組み合わせるのが現実的です。

薄いプロビジョニング回収を「OS側のTRIM/UNMAP」でやろうとして詰まる

ReFSのTRIM/UNMAPやThin Provisioningの扱いは、構成依存です。MicrosoftのReFS概要では、SANでは薄いプロビジョニング/TRIM/UNMAP/ODXが必要ならNTFSを使うべき、と明記されています(少なくともバックアップターゲットの文脈)。
ReFS overview(Backup target / SANの注意書き)

そのため、SANや仮想基盤上では「TRIMが効かない→ゼロ化で回収を狙う」という流れになりやすく、SDeleteが選択肢に上がってきます。ただしこれはあくまで“運用上の回避策”なので、手順化・検証・ロールバックまでセットで用意しておくのが安全です。

Sysinternalsに質問するなら、こう書くと話が早い

ReFS互換性を公式に確認したい場合、Microsoft Q&AのSysinternalsタグへ投稿するのが現行の窓口です。旧SysinternalsフォーラムはMicrosoft Q&Aへ移行しています。
Sysinternals Community(窓口案内)
Sysinternals Forums移行案内(Microsoft Q&Aへ)

投稿に含めるとよい情報:

  • SDeleteのバージョン(例:2.02 / 2.05)
  • OSバージョン(Server 2016/2019/2022/2025)
  • 対象ボリュームのファイルシステム(ReFSバージョン、クラスタサイズ)
  • 実行コマンド(-c / -z、対象ドライブ)
  • 「Purging MFT」で止まるスクリーンショット、またはログ
  • 裏側ストレージ構成(物理ディスク、SAN、仮想ディスク、Thin provisioningの有無)

こうした情報が揃うと、単なる一般論ではなく「ReFSは非対応です」「このケースは不具合です」「この条件だと時間がかかります」といった、判断に使える回答が得られやすくなります。

まとめ

  • Microsoft Q&Aの当該スレッドでは、SDelete 2.02のReFS互換性は断言されず、専用窓口へ誘導されている
  • SDelete公式ドキュメントはNTFSのMFTを前提に「Purging MFT」の工程を説明しており、ReFS対応を明言していない
  • Purging MFTの進捗表示が壊れる・長引く事例はReFS固有とは限らず、SDelete側の工程や表示品質が絡む可能性がある
  • 完全消去が目的なら、暗号化+鍵破棄や媒体消去など、保証しやすい手段を主軸にするのが安全
  • ゼロ埋めが目的なら、SDeleteを“限定的に”使い、検証・手順化・運用枠の確保まで含めて設計する

参考リンク

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次