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フォルダーのサイズを縮小します
Windows 10でWinSxSフォルダーの実際のサイズを確認する方法
WinSxSフォルダーの現在のサイズを確認する最も簡単な方法は、エクスプローラーで%windir%\WinSxSフォルダーのプロパティを開くことです(PowerShellスクリプトを使う方法もあります)。ただし、ほとんどのファイルマネージャー(エクスプローラー含む)は、実際のディスク使用量よりもやや大きなサイズを表示することに注意してください。
これは、WinSxSディレクトリ内に他のシステムフォルダーへのハードリンク(シンボリックリンク)が大量に含まれているためです。ファイルマネージャーはハードリンクが参照するファイルのサイズも合算して計算するため、実態より大きく表示されてしまいます。
Sysinternalsのduツールで実際のサイズを測定
Sysinternalsのduツールを使えば、ディスク上での実際のサイズを正確に把握できます。
du -v c:\windows\winSXSDISMコマンドでコンポーネントストアを分析
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 /RestoreHealthWindowsのコンポーネントストア(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操作が好みの場合は、「ディスククリーンアップ」ウィザードでも古い更新ファイルを削除できます。
- 管理者権限で
cleanmgrコマンドを実行します - ドライブを選択し、次の画面で「システムファイルのクリーンアップ」ボタンをクリックします
- 「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 InstallerサービスとWindows Module Installerサービスを停止・無効化します:
sc stop msiserver
sc stop TrustedInstaller
sc config msiserver start= disabled
sc config TrustedInstaller start= disabled - 内蔵のicaclsツールを使い、WinSxSディレクトリ内のファイル・フォルダーに設定されたアクセス制御リスト(ACL)をバックアップします。ACLのバックアップは、すべてのファイル・ディレクトリとそのNTFSアクセス許可を記録したプレーンテキストファイルです(後ほど元のACLを復元する際に必要になります):
icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS_NTFS.acl" /t - 自分自身をWinSxSフォルダーとすべてのサブフォルダーの所有者にします:
takeown /f "%WINDIR%\WinSxS" /r - WinSxSディレクトリに対するフルコントロール権限を自分のアカウントに付与します:
icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t - compactコマンドでWinSxSディレクトリ内のファイルを圧縮します。一部のファイルはWindowsが使用中のため、エラーで中断しないよう
/iオプションの指定が必要です(Windows 10ではより高効率なLZX圧縮も利用可能です):compact /s:"%WINDIR%\WinSxS" /c /a /i * - WinSxSディレクトリの所有者をTrustedInstallerに戻します:
icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t - 先ほど作成したACLバックアップファイルを使い、WinSxSフォルダー内の元のACLを復元します:
icacls "%WINDIR%" /restore "%WINDIR%\WinSxS_NTFS.acl" - 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であれば圧縮・展開処理はほぼ瞬時に完了するため、ユーザーが体感できるような性能への影響はないでしょう。
-
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のシステムファイルがすべて格納されており、場
-
【Windows 10/8/7】WinSxSフォルダーのサイズを縮小する3つのクリーンアップ方法
Windowsの「WinSxS」フォルダー(C:\Windows\WinSxS)は、「コンポーネント ストア」と呼ばれる重要なシステムフォルダーで、Windowsのカスタマイズや更新プログラムの管理に使用されます。そのため、このフォルダーを削除することはできません。 WinSxSフォルダーは、以下のような場面でWindowsによって利用されます。 Windows Updateをインストールするとき Windowsの機能を有効化・無効化するとき 問題のある更新プログラムをアンインストールするとき このフォルダーは時間の経過とともにサイズが大きくなっていきます。これは、新しいバージョンのコンポ