Windowsの「C:\Windows\WinSxS」フォルダのサイズが気になってしょうがないユーザーは多いようです。特に「C:\Windows\WinSxS\Temp」は一時フォルダなんだから、何とかしてファイルを削除して中身を空っぽにしたいと考えている人がいるようです。でもそれ、絶対にダメですよ。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
本稿ではWindows Sysinternalsのユーティリティーを幾つか使用していますが、それらはhttps://docs.microsoft.com/ja-jp/sysinternals/から入手できる他、Windows 10やWindows 11の場合はMicrosoft Storeから「Sysinternals Suite」として導入することができます。
Windowsの「C:\Windows\WinSxS」ディレクトリは「コンポーネントストア」とも呼ばれ、Windowsのサービシング(Servicing、Windowsの機能や更新プログラムのインストール/アンインストールなど)に関係するファイルの格納場所となっています。
Windows Updateはコンポーネントストアに対して更新プログラムをインストールし、更新プログラムのアンインストールによるロールバック用に古いバージョンのコンポーネントをバックアップします(画面1)。
Windowsでオプションの機能を有効化(サーバの場合は「役割や機能」の有効化)する際には、コンポーネントストアに格納されているソースファイルが使用されます。これにより、インストールメディアを使用したり、MicrosoftのWebサイトからダウンロードしたりしなくても、機能(例えば、Hyper-VやIIS《インターネットインフォメーションサービス》)を有効化できるようになっています。ファイルの破損やブートエラーからシステムを復旧するためのバックアップも格納されています。
「エクスプローラー」を使用して「C:\Windows」の中のサブディレクトリのサイズを確認すると、「\WinSxS」が最もディスク領域を消費しているように見えるでしょう。しかし、それは見掛け上の話です。Windowsのシステムファイルの多くは、例えば「C:\Windows」や「C:\Windows\System32」にあるDLLファイルやEXEファイルは、実際にはそこに実体があるわけではなく、コンポーネントストアに格納されている最新のDLLファイルやEXEファイルにリンクされたハードリンクを見ているのです。
例えば、「Windows 10」の「メモ帳」の実行ファイル名は「C:\Windows\System32\notepad.exe」ですが、Windows Sysinternalsの「findlinks.exe」で調べてみると、「C:\Windows\notepad.exe」と「C:\Windows\WinSxS\……\notepad.exe」の2つの別のハードリンクが見つかります。
ハードリンクの概念からすれば、どのファイルが実体(本体)という区別はなく、全て同じものを参照するリンクにすぎません。ファイルに対するハードリンクの数が「0」になると、ファイルは削除されます。コンポーネントストアの概念からすると、「C:\Windows\WinSxS\……\notepad.exe」が実体ということもできます。「C:\Windows\WinSxS」の下を探してみると、古いバージョン(そのうち1つはオリジナルバージョン)の「notepad.exe」が幾つか見つかります(画面2)。これらは、更新プログラムのアンインストールした際に復元用にコンポーネントストアに残されているのです。
ここまでで、コンポーネントストア内のコンテンツに安易に触れてはいけないことが想像できると思います。「C:\Windows\WinSxS\Temp」や「C:\Windows\WinSxS\Temp\InFlight」も例外ではありません。「Temp」や「InFlight」という名称から、「一時的」や「フライト中(処理中)」と想像して、削除してもよいのではと考えるかもしれませんが、更新プログラムのインストールが完了し、再起動したとしても、依然としてそこにハードリンクを持つシステムファイルも実際に存在するのです(画面3)。
エクスプローラーで表示できる「C:\Windows\WinSxS」のディレクトリサイズは、ハードリンクを考慮しない(ハードリンクか、そうではないかに関係なく全てカウントする)見掛け上のサイズです。実際のサイズを確認する方法は、以下のドキュメントで説明されています。
Copyright © ITmedia, Inc. All Rights Reserved.