Windows Server
 Computer >> コンピューター >  >> システム >> Windows Server

Windows 10 / Windows ServerのWinSxSフォルダーをクリーンアップ・圧縮してディスク容量を節約する方法

本記事では、WindowsにおけるWinSxSフォルダーの役割、サイズが増え続ける原因、そして安全にクリーンアップする方法を詳しく解説します。

C:\Windows\WinSxSディレクトリは、Windowsコンポーネントストア(Component Store)と呼ばれるリポジトリです。このフォルダーには、Windowsの各種ロールや機能のインストールと動作に必要なDLLファイル、バイナリファイル、XMLファイルなどが格納されています。Windows Updateを適用するたび(通常は毎月)、更新されたコンポーネントの新しいバージョンがシステムにインストールされ、古いバージョンはWinSxSフォルダー内に保持されます。これは互換性を維持し、アップデートをアンインストールした際に以前のバージョンのコンポーネントへロールバックできるようにするためです。

WinSxSフォルダーが肥大化する理由

WinSxSフォルダーは時間の経過とともにサイズが大きくなっていきます。そのサイズには理論上の上限はありません(実際には、Windows 10のWinSxSフォルダーが15〜20GBを超えることはまれですが)。更新プログラムを適用するたびに旧バージョンのコンポーネントが蓄積されるため、何もしないままではディスク容量を圧迫していきます。

WinSxSフォルダーを安全にクリーンアップする3つの方法

この記事では、Windows 10およびWindows Server 2016/2019のWinSxSフォルダーを安全にクリーンアップする以下の方法を紹介します。

  • コンポーネントストアの最適化 — Windows Update適用後に残った古いバージョンのコンポーネントファイルを削除します
  • Features on Demand(オンデマンド機能) — 使用していないWindowsコンポーネントをディスクから削除します
  • NTFS圧縮の有効化 — NTFSファイルシステムの組み込み圧縮機能を使ってWinSxSフォルダーのサイズを縮小します
注意:「WinSxSフォルダー内のファイルを手動で削除してもよいか?」という質問をよく受けます。答えは断固としてノーです。手動削除はWindowsイメージを破損させる恐れがあります。一部のファイル削除に成功したように見えても、この方法は決して推奨されません。

Windows 10でWinSxSフォルダーの実際のサイズを確認する方法

WinSxSフォルダーの現在のサイズを確認する最も簡単な方法は、エクスプローラーで%windir%\WinSxSフォルダーのプロパティを開くことです(PowerShellスクリプトを使う方法もあります)。ただし、ほとんどのファイルマネージャー(エクスプローラー含む)は、実際のディスク使用量よりもやや大きなサイズを表示することに注意してください。

これは、WinSxSディレクトリ内に他のシステムフォルダーへのハードリンク(シンボリックリンク)が大量に含まれているためです。ファイルマネージャーはハードリンクが参照するファイルのサイズも合算して計算するため、実態より大きく表示されてしまいます。

Sysinternalsのduツールで実際のサイズを測定

Sysinternalsのduツールを使えば、ディスク上での実際のサイズを正確に把握できます。

 du -v c:\windows\winSXS

DISMコマンドでコンポーネントストアを分析

DISMコマンドでもコンポーネントストア(WinSxSフォルダー)のサイズを分析できます。

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

実行結果の例:

Deployment Image Servicing and Management tool
[==========================100.0%==========================]
Component Store (WinSxS) information:
Windows Explorer Reported Size of Component Store : 8.44 GB
Actual Size of Component Store : 8.15 GB
Shared with Windows : 5.74 GB
Backups and Disabled Features : 1.97 GB
Cache and Temporary Data : 438.31 MB
Date of Last Cleanup : 2021-02-22 20:37:29
Number of Reclaimable Packages : 1
Component Store Cleanup Recommended : Yes
The operation completed successfully.

この例では、「Backups and Disabled Features(バックアップと無効化された機能)」と「Cache and Temporary Data(キャッシュと一時データ)」を合わせて約2.4GB削減できることがわかります。

なお、DISMコマンドはWindowsイメージのチェックと修復にも使えます。

DISM /Online /Cleanup-Image /RestoreHealth

Windowsのコンポーネントストア(WinSxSフォルダー)をクリーンアップする方法

WinSxSフォルダーをクリーンアップする最も手軽な方法は、次のコマンドでコンポーネントストアを最適化することです。

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

/StartComponentCleanupオプションは、Windows 8およびWindows Server 2012以降のすべてのバージョンでサポートされています。クリーンアップ完了後、再度分析コマンドを実行してサイズを確認しましょう。筆者の環境では約2.4GB削減できました。

/ResetBaseオプションでさらに削減

/StartComponentCleanupには追加の/ResetBaseオプションがあり、これを指定するとWindows Update適用後に残ったすべての旧バージョンのコンポーネントを削除できます。ただし、この操作を行うとインストール済みの更新プログラムやService Packをアンインストールできなくなり、「更新プログラムのアンインストール」画面から「アンインストール」ボタンが消えます。それでも問題ない場合は、次のコマンドを実行してください。

Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

なお、Windows 7およびWindows Server 2008 R2では、Service Pack適用後に残った旧バージョンのコンポーネントを掃除するために、専用のDISMオプションが使われていました。

DISM /online /Cleanup-Image /spsuperseded

ディスククリーンアップウィザードを使う方法

GUI操作が好みの場合は、「ディスククリーンアップ」ウィザードでも古い更新ファイルを削除できます。

  1. 管理者権限でcleanmgrコマンドを実行します
  2. ドライブを選択し、次の画面で「システムファイルのクリーンアップ」ボタンをクリックします
  3. Windows Update のクリーンアップ」にチェックを入れます。削除によって解放できる容量が表示されます(例:324MB)。「OK」をクリックしてクリーンアップを開始します

タスクスケジューラによる自動メンテナンス

Windows 10 / Windows Server 2016のタスクスケジューラには、WinSxSフォルダーを定期的に自動最適化するメンテナンスタスクが用意されています(DISMのStartComponentCleanupパラメーターと同じ処理)。このStartComponentCleanupタスクはtaskschd.mscの「\Microsoft\Windows\Servicing」セクションにあり、バックグラウンドで動作し、新しいファイルに置き換えられて30日以上経過した古いコンポーネントを自動的に削除します。

このタスクは次のコマンドで手動実行することも可能です。

schtasks.exe /Run /TN "\Microsoft\Windows\Servicing\StartComponentCleanup"

Windows 10 / Windows Serverから未使用のロールと機能を削除する

Features on Demand(オンデマンド機能)の仕組みを利用すると、未使用のロールのバイナリファイルをWinSxSフォルダーから削除できます。Windows Serverでは、PowerShellのUninstall-WindowsFeatureコマンドレットを使用してロールや機能のバイナリを削除できます。

一方、Windows 10にはUninstall-WindowsFeatureコマンドレットがないため、DISM.exeを使ってWindowsイメージから機能を削除する必要があります。なお、DISMはUninstall-WindowsFeatureコマンドレットと異なり、依存関係にある機能は削除しない点に注意してください。

Windows 10イメージで利用可能な機能の一覧は、次のコマンドで取得できます。

DISM.exe /Online /English /Get-Features /Format:Table

例として、TelnetClient機能をWindowsイメージ(WinSxSフォルダー)から削除するには、次のコマンドを実行します。

DISM.exe /Online /Disable-Feature /Featurename:TelnetClient /Remove

実行後に機能一覧を再表示すると、該当コンポーネントの状態が「Disabled with Payload Removed(ペイロード削除済みで無効)」に変わっていることを確認できます。

この方法により、未使用コンポーネントをディスクから取り除いてWinSxSフォルダーのサイズを大幅に縮小できます。ただし、Windows 10の各機能とその用途を理解している上級者向けの方法である点には留意してください。

Windows 10でWinSxSフォルダーにNTFS圧縮を適用する方法

WinSxSフォルダーのサイズを縮小するもうひとつの方法が、NTFSファイルシステムレベルでのフォルダー内容の圧縮です。

注意:システム構成への非標準的な変更を行う場合は、事前に必ずWindows 10イメージの完全バックアップを作成することを強くお勧めします。
  1. コマンドプロンプトを管理者権限で開きます
  2. Windows InstallerサービスとWindows Module Installerサービスを停止・無効化します:
    sc stop msiserver
    sc stop TrustedInstaller
    sc config msiserver start= disabled
    sc config TrustedInstaller start= disabled
  3. 内蔵のicaclsツールを使い、WinSxSディレクトリ内のファイル・フォルダーに設定されたアクセス制御リスト(ACL)をバックアップします。ACLのバックアップは、すべてのファイル・ディレクトリとそのNTFSアクセス許可を記録したプレーンテキストファイルです(後ほど元のACLを復元する際に必要になります):
    icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS_NTFS.acl" /t
  4. 自分自身をWinSxSフォルダーとすべてのサブフォルダーの所有者にします:
    takeown /f "%WINDIR%\WinSxS" /r
  5. WinSxSディレクトリに対するフルコントロール権限を自分のアカウントに付与します:
    icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t
  6. compactコマンドでWinSxSディレクトリ内のファイルを圧縮します。一部のファイルはWindowsが使用中のため、エラーで中断しないよう/iオプションの指定が必要です(Windows 10ではより高効率なLZX圧縮も利用可能です):
    compact /s:"%WINDIR%\WinSxS" /c /a /i *
  7. WinSxSディレクトリの所有者をTrustedInstallerに戻します:
    icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t
  8. 先ほど作成したACLバックアップファイルを使い、WinSxSフォルダー内の元のACLを復元します:
    icacls "%WINDIR%" /restore "%WINDIR%\WinSxS_NTFS.acl"
  9. Windows InstallerとWindows Module Installerサービスの起動の種類を既定値に戻します:
    sc config msiserver start= demand
    sc config TrustedInstaller start= demand

圧縮後、WinSxSフォルダーのサイズを確認してみましょう。筆者の環境では、圧縮によりフォルダーサイズが9.4GBから6.5GBへ、およそ3分の1削減されました。容量の小さいSSDドライブを使っている場合には特に効果的です。

これらのコマンドは個別に実行してもよいですし(その方が各ステップの結果を追跡しやすい)、1つのスクリプトファイルにまとめて実行することもできます。定期的に実行すれば、Windows Updateやアプリケーションの新規インストール後にWinSxSフォルダーへ追加された非圧縮ファイルも随時圧縮できます。

NTFS圧縮による影響について

Windowsは圧縮ファイルを透過的に扱うため、通常の使用において問題は発生しません。ただし、圧縮ファイルを処理する際には展開・再圧縮にCPU時間が余分にかかる場合があります。そのため、Windowsコンポーネントや更新プログラムのインストール時にわずかな速度低下が生じる可能性があります。とはいえ、近年のCPUであれば圧縮・展開処理はほぼ瞬時に完了するため、ユーザーが体感できるような性能への影響はないでしょう。

  1. Windows.oldフォルダとは?安全に削除する方法をわかりやすく解説

    Windows.oldフォルダとは? Windows.oldフォルダは、Windowsを旧バージョンから新しいバージョンへアップグレードした際(例:Windows 7からWindows 8.1へのアップグレード、Windows 7/8.1からWindows 10へのアップグレードなど)、またはWindows 10を新しいビルドへ更新した際(例:「Creators Update(V1703)」や「Fall Creators Update(V1709)」など)に自動的に作成されるフォルダです。 「C:\Windows.old」フォルダには、Windowsのシステムファイルがすべて格納されており、場

  2. 【Windows 10/8/7】WinSxSフォルダーのサイズを縮小する3つのクリーンアップ方法

    Windowsの「WinSxS」フォルダー(C:\Windows\WinSxS)は、「コンポーネント ストア」と呼ばれる重要なシステムフォルダーで、Windowsのカスタマイズや更新プログラムの管理に使用されます。そのため、このフォルダーを削除することはできません。 WinSxSフォルダーは、以下のような場面でWindowsによって利用されます。 Windows Updateをインストールするとき Windowsの機能を有効化・無効化するとき 問題のある更新プログラムをアンインストールするとき このフォルダーは時間の経過とともにサイズが大きくなっていきます。これは、新しいバージョンのコンポ