Windows10の使用しないコンポーネントをクリーンアップしてストレージを開放する

 SSD128GBのPCを使っていると、簡単にストレージの容量が枯渇します。その都度不要なファイルを削除したり、使用頻度の低いファイルを外部DISKに退避したりして手動で空き容量の確保を試みます。
 その作業過程で、システム周りの不要ファイルを削除するために、Windows標準機能の「ディスククリーンアップ」・「システムファイルのクリーンアップ」を使用する人も多いと思いますが、この機能では削除できないけれど他にも削除可能なものに「コンポーネントストア」があります。

 以下に、コンポーネントストアをクリーンアップする作業手順を記載します。

 なお、各コマンドは管理者権限で実行する必要があります。
<警告> 操作を誤るとシステムが正常に機能しなくなる可能性が有ります。同じ操作をした場合も、システムの正常性を保証するものではありません。実行される場合は自己責任でどうぞ。
 

DISM

 WindowsCUIツールの中に、dismコマンドがあります。これは「展開イメージのサービスと管理ツール」と呼ばれるもので、Windows 10 ProでもHomeでも使用可能です。
 このツールは多様な機能を持っているのですが、今回使用するのはCleanup-Imageオプションに属する機能になります。

 以降、具体的なコマンドを記載していきますが、何をやっているのか理解せずにコマンドをコピペするのは危険すぎます。その前に各オプションの意味を理解しておきましょう。

> dism /online /Cleanup-Image /?

展開イメージのサービスと管理ツール
バージョン: 10.0.17134.1

イメージのバージョン: 10.0.17134.441


/Cleanup-Image /RevertPendingActions

  警告! /RevertPendingActions オプションを使用できるのは、ブートしなかった Windows イメージに対してシステム回復操作を実行する場合のみです。

    例:
      DISM.exe /Image:C:\test\offline /Cleanup-Image /RevertPendingActions

/Cleanup-Image /spsuperseded [/hidesp]
  /SPSuperseded: Service Pack のインストール中に作成されたバックアップ ファイルを削除します。
  /HideSP: オペレーティング システムの [インストールされた更新プログラム] の一覧に Service Pack が表示されないようにします。

  警告! /SPSuperseded 操作が完了した後は Service Pack をアンインストールできません。

    例:
      DISM.exe /Image:C:\test\offline /Cleanup-Image /spsuperseded /hidesp

/Cleanup-Image {/CheckHealth | /ScanHealth | /RestoreHealth}
  /CheckHealth: 失敗したプロセスが原因でイメージが破損しているかどうか、またその破損を修復できるかどうかをチェックします。
  /ScanHealth: イメージをスキャンしてコンポーネント ストアの破損の有無を確認します。
  /RestoreHealth: イメージをスキャンしてコンポーネント ストアの破損の有無を確認し、修復操作を自動的に実行します。
  /Source と /RestoreHealth: 正常であることがわかっているファイルを使用して修復する場合に、それらのファイルの場所を指定します。修復ソースの場所の指定について詳しくは、 https://go.microsoft.com/fwlink/?LinkId=243077 を参照してください。
  /LimitAccess: DISM が WU/WSUS にアクセスできないようにします。

    例:
      DISM.exe /Online /Cleanup-Image /ScanHealth

      DISM.exe /Image:c:\offline /Cleanup-Image /RestoreHealth
      /Source:c:\test\mount

/Cleanup-Image /StartComponentCleanup [/ResetBase [/Defer]]
  /StartComponentCleanup: 使用しないコンポーネントをクリーンアップしてコンポーネント ストアのサイズを小さくします。
  /ResetBase: 使用しないコンポーネントのベースをリセットして、コンポーネント ストアのサイズをさらに小さくします。
  /Defer と /ResetBase: 長時間実行中のクリーンアップ操作を次回の動メンテナンス時まで延期します。

  警告!  /ResetBase を指定して /StartComponentCleanup 操作を実行した後は、インストールした Windows 更新プログラムをアンインストールできません。

    例:
      DISM.exe /Image:C:\test\offline /Cleanup-Image /StartComponentCleanup

/Cleanup-Image /AnalyzeComponentStore
  /AnalyzeComponentStore: WinSxS コンポーネント ストアのレポートを作成します。WinSxS レポートの詳細、およびこのレポートに表示される情報の使用方法については、 https://go.microsoft.com/fwlink/?LinkId=293367 を参照してください。

    例:
      DISM.exe /Image:C:\test\offline /Cleanup-Image /AnalyzeComponentStore

 

CheckHealth

 クリーンアップを実行する前に、念のため現状の展開イメージが損傷していないかチェックします。
 このオプションは「失敗したプロセスが原因でイメージが破損しているかどうか、またその破損を修復できるかどうかをチェックします。」と説明されているものです。

> dism /online /Cleanup-Image /CheckHealth

展開イメージのサービスと管理ツール
バージョン: 10.0.17134.1

イメージのバージョン: 10.0.17134.441

コンポーネント ストアが壊れていることは検出されませんでした。
操作は正常に完了しました。

 特に問題が無い場合は上記のような出力が得られます(完了まで結構長時間待たされます)。
 

ScanHealth

 引き続きクリーンアップを実行する前に、念のため現状のコンポーネントストアが損傷していないかチェックします。
 このオプションは「イメージをスキャンしてコンポーネント ストアの破損の有無を確認します。」と説明されているものです。先のCheckHealthとは検査している対象が違うようです。

> dism /online /Cleanup-Image /ScanHealth

展開イメージのサービスと管理ツール
バージョン: 10.0.17134.1

イメージのバージョン: 10.0.17134.441

[==========================100.0%==========================] コンポーネント ストアは修復できます。
操作は正常に完了しました。

 長い時間が掛かった後、「コンポーネント ストアは修復できます。」と出力されたので、どうやらコンポーネントストアが破損しているようです。
 

RestoreHealth

 ScanHealthで「コンポーネント ストアは修復できます。」と出力されたため、修復を試みます。
 このオプションは「イメージをスキャンしてコンポーネント ストアの破損の有無を確認し、修復操作を自動的に実行します。」と説明されていますので、ScanHealthを実行せずにRestoreHealthを直接叩いても良さそうです。

> dism /online /Cleanup-Image /RestoreHealth

展開イメージのサービスと管理ツール
バージョン: 10.0.17134.1

イメージのバージョン: 10.0.17134.441

[==========================100.0%==========================] 復元操作は正常に完了しました。
操作は正常に完了しました。

 時間は掛かりましたが、特に問題無く修復できたようです。
 

 これで、コンポーネントストアが正常な状態になっていますので、クリーンアップ作業に入ります。

StartComponentCleanup

 このオプションは「使用しないコンポーネントをクリーンアップしてコンポーネント ストアのサイズを小さくします。」と説明されています。
 以下の例ではDISMコマンドの実行前後でどれだけ小さくなったか確認するために、DISKの空き容量も確認しています。

> wsl df /mnt/c
Filesystem     1K-blocks      Used Available Use% Mounted on
C:             117902412 116570304   1332108  99% /mnt/c

> dism /online /Cleanup-Image /StartComponentCleanup

展開イメージのサービスと管理ツール
バージョン: 10.0.17134.1

イメージのバージョン: 10.0.17134.441

[==========================100.0%==========================]
操作は正常に完了しました。

>wsl df /mnt/c
Filesystem     1K-blocks      Used Available Use% Mounted on
C:             117902412 115633504   2268908  99% /mnt/c

 かなり長時間かかりました。ですが、今回は約914MBもディスクの空き容量が増加したことが確認できます。
 

ResetBase

 先のStartComponentCleanupと組み合わせて指定するオプションです。「使用しないコンポーネントのベースをリセットして、コンポーネント ストアのサイズをさらに小さくします。」と説明されています。
 また、このオプションを指定して実行した場合「インストールした Windows 更新プログラムをアンインストールできません。」と警告表示がありますので、それが嫌ならResetBaseオプションを付与して実行してはいけません。

> dism /online /Cleanup-Image /StartComponentCleanup /ResetBase

展開イメージのサービスと管理ツール
バージョン: 10.0.17134.1

イメージのバージョン: 10.0.17134.441

[==========================100.0%==========================]
操作は正常に完了しました。

> wsl df /mnt/c
Filesystem     1K-blocks      Used Available Use% Mounted on
C:             117902412 115611360   2291052  99% /mnt/c

 ResetBaseオプション未指定時のStartComponentCleanup実行後と比較して、約21MB程追加で空き容量が増加したことが確認できます。
 

 これらのコマンドはかなり長時間かかるので、忙しいときに実行するのはお勧めできません。
 なお、dismコマンドを実行すると、TiWorker.exe*1がシングルスレッドでCPUを使い切ります(例えば2コア4スレッド機なら、タスクマネージャなどで確認するとTiWorker.exeのCPU使用率が25%で張り付く)。故にマルチコア性能が高いマシンでもこの遅さはどうにもならないはずです。と、同時にコンポーネントストアの実体が存在するDISK(通常Cドライブ)へも激しめにアクセスします(アクティブ時間が常時100%に張り付くことはありませんでしたが、かなり高い状態)。
 故にCPU使用率が一見低く見えるからと、他の作業を並行して行うと、DISKが足を引っ張りレスポンス悪くイライラすることになると思います。
 



以上。

*1:Windows Updateがなかなか終わらない時にもこのプロセスはよく見かけますが、Windows Modules Installer Workerという機能のようです。