連載
» 2022年05月25日 05時00分 公開

「C:\Windows\WinSxS」(コンポーネントストア)は絶対に触れてはいけないWindowsの“聖域”山市良のうぃんどうず日記(232)

Windowsの「C:\Windows\WinSxS」フォルダのサイズが気になってしょうがないユーザーは多いようです。特に「C:\Windows\WinSxS\Temp」は一時フォルダなんだから、何とかしてファイルを削除して中身を空っぽにしたいと考えている人がいるようです。でもそれ、絶対にダメですよ。

[山市良,テクニカルライター]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「C:\Windows」の中で一番サイズが大きいのは「\WinSxS」?』

本稿では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)。

画面1 画面1 Windows Updateで更新プログラムをインストールすると、コンポーネントストアに対して大量の読み書きが行われる

 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)。これらは、更新プログラムのアンインストールした際に復元用にコンポーネントストアに残されているのです。

画面2 画面2 「C:\Windows\System32\notepad.exe」には他に2つのハードリンクが存在する。コンポーネントストアには、最新バージョンの「notepad.exe」が1つと、古いバージョン(この例では2バージョン)の「notepad.exe」が存在する

 ここまでで、コンポーネントストア内のコンテンツに安易に触れてはいけないことが想像できると思います。「C:\Windows\WinSxS\Temp」や「C:\Windows\WinSxS\Temp\InFlight」も例外ではありません。「Temp」や「InFlight」という名称から、「一時的」や「フライト中(処理中)」と想像して、削除してもよいのではと考えるかもしれませんが、更新プログラムのインストールが完了し、再起動したとしても、依然としてそこにハードリンクを持つシステムファイルも実際に存在するのです(画面3)。

画面3 画面3 パスに「Temp」や「InFlight」という名前が含まれているからといって、使用されていないわけではない

コンポーネントストアの実サイズの正しい調べ方

 エクスプローラーで表示できる「C:\Windows\WinSxS」のディレクトリサイズは、ハードリンクを考慮しない(ハードリンクか、そうではないかに関係なく全てカウントする)見掛け上のサイズです。実際のサイズを確認する方法は、以下のドキュメントで説明されています。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。