コンポーネント ストアの管理

「WinSxSが非常に大きいのはなぜですか。」 という質問が、多くの Windows ユーザーから寄せられています。 この質問についてはブログ記事でも考察されてきましたが、このトピックでは、コンポーネント ストア (具体的には WinSxS フォルダー) の背景にある概念についてもう少し踏み込んで説明すると共に、WinSxS フォルダーのサイズを適切に管理する方法を取り上げたトピックへのリンクを紹介しています。

簡単に言うと、WinSxSフォルダーのサイズは一見したところそれほど大きくありません。これは、サイズの計算に他の場所にあるWindowsバイナリを含めることができ、WinSxSフォルダーが実際よりも大きく見えるためです。

Windows コンポーネント ストアと WinSxS フォルダー

WinSxS フォルダーは Windows フォルダーにあります (c:\Windows\WinSxS など)。 これは、Windowsコンポーネントストアファイルの場所です。 Windows コンポーネント ストアは、Windows のカスタマイズと更新に必要な機能をサポートする目的で使用されます。 次に、Windows コンポーネント ストア ファイルがどのように使用されているかの例をいくつか紹介します。

  • Windows Update を使用して新しいバージョンのコンポーネントをインストールする。 そうすることでシステムのセキュリティが維持され、システムが最新の状態に保たれます。

  • Windows の機能を有効または無効にする。

  • サーバー マネージャーを使用してロールや機能を追加する。

  • 異なる Windows エディション間でシステムを移行する。

  • 破損や起動エラーからシステムを回復させる。

  • 問題のある更新プログラムをアンインストールする。

  • サイド バイ サイド アセンブリを使用してプログラムを実行する。

Windows コンポーネント ストアは、サイド バイ サイド アセンブリをサポートする目的で最初に Windows XP で導入されました。 Windows Vista 以降では、オペレーティング システムを構成するすべてのコンポーネントを追跡、保守するようにコンポーネント ストアが強化されています。 こうしたさまざまなオペレーティング システム コンポーネントによって、ファイル、ディレクトリ、レジストリ キー、サービスなどのオブジェクトが追跡されます。 さらに、コンポーネントの特定のバージョンが集まってパッケージになります。 パッケージは、Windows を更新する Windows Update や DISM によって使用されます。 Windows のインストールで使用されたコンポーネントとパッケージは、Windows コンポーネント ストアによって処理されます。 Windows によって使用されるファイルの多くは、"ハード リンク" というしくみを用いて Windows コンポーネント ストアの外にあるディレクトリから取得されるため、Windows コンポーネント ストアのサイズを調査することは容易ではありません。 そのような場合、特定のバージョンのコンポーネントを構成するファイルが、Windows コンポーネント ストアの内部と外部の両方に存在するように見えます。 Windows は、"ハード リンク" を使用することで見かけ上、同じファイルの複数のコピーを維持することができます。コピーが複数あっても、その分の領域が実際に消費されることはありません。

ハード リンクは、ディスク上の同じ場所を 2 つのファイルから参照できるようにするファイル システム オブジェクトです。 つまり、同じデータを複数のファイルから参照でき、そのうちの 1 つのファイルでデータに変更を加えると、他のファイルにもその変更が反映されます。 次の例を見るとわかるように、このことはディレクトリ サイズの概念が複雑化する要因となっています。

  1. ディレクトリ A には、1.txt、2.txt、3.txt の 3 つのファイルがあります。

  2. ディレクトリ B には、4.txt というファイルが 1 つあります。

  3. ファイル 1.txt とファイル 2.txt はハード リンクされており、1MB のデータを含んでいます。

  4. 同様に、ファイル 3.txt とファイル 4.txt はハード リンクされており、2MB のデータを含んでいます。

hard links example

この例を見ると、ハード リンクによって複数のファイルから同じデータ一式を参照できることがわかります。

では、ディレクトリ A のサイズはどのぐらいでしょうか。

その答えは、ディレクトリ A の扱い方によって異なります。

  1. ディレクトリ A のファイルを読み取った場合、読み取ったすべてのファイルのサイズは各ファイル サイズの合計となります。 この例では、4 MB になるでしょう。

  2. ディレクトリ A にあるすべてのファイルを別の場所にコピーした場合、その対象となるデータのサイズは、それらのファイルからハード リンクされたすべてのデータの合計となります。 この例では、3 MB になるでしょう。

  3. ディレクトリ A を削除することで領域を解放しようとした場合、サイズの削減幅は、ディレクトリ A からハード リンクされているファイルの分だけです。この例では、1 MB 分の節約にしかなりません。

Windows コンポーネント ストア、つまり WinSxS フォルダーによって使用される領域のサイズはどれぐらいか、という問いに戻りましょう。 別途使用される領域のサイズとして最も近いのは、ディレクトリ A の例の 3 つ目の回答です。 システム内の他の部分にハード リンクされているファイルは、システムの動作に必要なのでカウントすべきではありません。そして、コンポーネント ストア内の複数の場所にハード リンクされているファイルについては、ディスク上の格納サイズのみをカウントする必要があります。

Windows コンポーネント ストアを管理する

Windows コンポーネント ストアは、Windows 8.1 と Windows Server 2012 R2 の新機能を使用して管理できます。

WinSxS フォルダーの実際のサイズの特定

WinSxS フォルダーのクリーンアップ

オフラインの Windows イメージ内のコンポーネント ストアのサイズの削減

スペースはどこに移動しましたか? (ブログの投稿)

ハード リンクの詳細情報

NTFS メタファイルのブログ投稿