web-dev-qa-db-ja.com

/ winsxsフォルダが非常に大きくなり、小さくすることができるのはなぜですか?

私が使っているVistaの仮想マシンは10GBの仮想ハードディスクしか持っていません - そして時間がたつにつれて容量が足りなくなるのではないかと心配です。

私は TreeSize を使って原因をチェックしました。

enter image description here

そして主な原因は、/winsxsまたは "Windows Side-by-Side"フォルダです。

enter image description here

WindowsのSide By Sideフォルダとは何ですか?まあ、それは ここでかなりよく説明されています

オペレーティングシステムのすべてのコンポーネントはWinSxSフォルダにあります - 実際、この場所をコンポーネントストアと呼びます。各コンポーネントには、それが構築されたバージョン、言語、およびプロセッサアーキテクチャを含む固有の名前があります。 WinSxSフォルダは、コンポーネントがシステム上で見つかる唯一の場所です。システム上に表示されるファイルの他のすべてのインスタンスは、コンポーネントストアからのハードリンクによって「投影」されます。最後のポイントを繰り返しますが、OSには各ファイルの各バージョンのインスタンス(またはフルデータコピー)が1つだけあり、そのインスタンスはWinSxSフォルダーにあります。その観点から見ると、WinSxSフォルダは実際にはOS全体の全体であり、下位レベルのオペレーティングシステムでは「フラット」と呼ばれています。これは、システムファイルチェッカー(SFC)などの操作を実行するとき、または追加の機能や役割をインストールするときにメディアの入力を求められなくなる理由も説明しています。

これが、フォルダのサイズが大きくなった理由を説明していますが、時間の経過とともにフォルダが大きくなった理由ではありません。その質問に対する答えは、サービスを提供することです。以前のバージョンのWindowsでは、サービスの基本単位はファイルでしたが、Windows Vistaではそれがコンポーネントです。特定のバイナリを更新すると、コンポーネント全体の新しいバージョンがリリースされ、その新しいバージョンが元のバージョンと一緒にコンポーネントストアに格納されます。コンポーネントの上位バージョンはシステムに投影されますが、ストア内の古いバージョンは触れられません。その理由は、コンポーネントストアが非常に大きくなる理由の3番目の部分です。

/ winsxsフォルダのサイズについて不満を言う人もいます

同僚は、最近2年ごとに仕事用のラップトップをリフレッシュして、新しいラップトップをVistaにロードしている最中でした。どういうわけか、彼のハードドライブC:は25GBにしかパーティションされておらず、残りのスペースはもっと大きいドライブD:用に予約されていました。

とにかく、多くのWindows Updateをロードした後、彼はC:に残されたドライブスペースをほとんど残さなかった、そして何らかの理由で、WinSxSディレクトリは8GB以上に膨らんでいた。

WinSxS(Windows Side-by-Side)ディレクトリの目的はわかっていましたが、通常のオペレーティングシステムの更新でそのディレクトリのサイズが急増する理由はよくわかりませんでした。

安全のためにこれらすべての複製ファイルを用意することにはあまり関心がありませんが、Idoディスク容量不足によるVM爆発については気にしないでください。エラー。それで..はどうにかして/ winsxsを安全に削減することができますか?それがそうであるようには思えません ..

管理者は、何らかの理由で/ winsxsディレクトリを削除することは避けてください。これを行うと、後でWindows UpdateとMSIが正しく機能しなくなる可能性があります。ディレクトリから誤って削除されないようにするには、その子に継承する強力なセキュリティ記述子をディレクトリに配置します。

この/ winsxsフォルダがこれより大きくなると、この仮想マシンを再イメージングする必要があります。これは、I本当にしたくない場合に行ってください。

174
Jeff Atwood

のように見えます - やっとこれを行う方法があります Windows 8.1サービスパック1およびWindows Server 2012 R2 に。

部品ストア分析ツール

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

スキャンの終わりに、ユーザーはこのような結果(winsxsフォルダーの実際のサイズ)のレポートを受け取ります。

analyzecomponentstore results

コンポーネントストアのクリーンアップ

今日、コンポーネントストアのクリーンアップは、DISMを実行するか、ディスククリーンアップウィザードを使用して、エンドユーザーが手動で起動する必要があります。コンポーネントストアのクリーンアップを平均的なエ​​ンドユーザーにとってより便利にするために、メンテナンスタスクに追加され、エンドユーザーのためにディスクスペースを自動的に節約します。これを有効にするために、再起動を必要とせずに置き換えられた受信トレイドライバのアンインストールを許可するように変更が行われます(今日、CBSによって行われるすべてのドライバのインストール/アンインストールに再起動が必要です)。

  1. Dism.exe /online /Cleanup-Image /StartComponentCleanup

  2. ディスククリーンアップツール、システムファイルのクリーンアップボタン。

    disk cleanup tool

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

6
Jeff Atwood

Windows 7 SP1のインストール後にクリーンアップするNiceコマンドがあります(それによって約3 GB節約できました)。

DISM /online /cleanup-Image /spsuperseded

昇格したコマンドから実行する必要があります。プロンプト

101
GvS

TL、DR

winsxsは実際に ハードリンク を含みます。あなたが思うほど多くの追加のデータを取りません。

ハードリンクは、ディスク上のどこかにある実際のファイルへの「ショートカット」または「ポインタ」のようなものです。ハードリンクは、それ自体ではハードドライブのスペースを占有しません。それは単にリダイレクトとして機能します。

Winsxsはハードリンクで構成されているので、これらのリンクを削除してもスペースは解放されません。実際のファイルはディスクのさまざまな場所に残ります。


winsxsは問題ではありません

...それは解決策です! (まあ、ほとんど。)

要約、「MVP、モデレータのRonnie Vernonによる回答としてマークされた」 は、ここで述べています

うわー、ハードリンクとwinsxsについての長い議論。とにかくここで私はそれがすべてどのように機能するのかについて私が理解したことのいくつかの要約された点があります。

Andre.Zieglerによる上記の完璧な回答でOPの質問に答えることから始めるには、winsxsに触れないでください。たぶんいくつかのファイルはmp3やaviなどのようにトリムすることができますがシステムファイルの残りの部分はそのままにしておくべきです。私も上記のRonnie Vernonによって投稿されたLink Shell Extensionを使用しています。どちらがハードリンクされていて(赤い矢印)、どれが単純なファイルであるかを確認する簡単な方法です。

ここに着く前に私はvsp1clnのようなWindows 7のためのSP1をインストールした後にクリーンアップツールを求める人々が多くの場所で見ました。専用のツールはありません、それはすべてディスククリーンアップサービスに統合されました。 1つ注意しておきたいのは、ドライブをクリーンアップした後に数百MBを削除するというオプションが表示されても、サービスは約3 GBの余分なファイルを削除するため、システムによって異なるということです。おかしい、今私はSP1をインストールする前に持っていたよりもさらに多くのスペースがあります。いいですね、MS。

ハードリンクに関しては、私はそれらの周りに作成された混乱に面白がっていました。私はlinuxオタクではありません、そして通常私はソフトリンクのみを使用します...それらは私には十分ですが、人々はハードリンクがどのように機能するかそしてサイズがどう数えられるかを得られませんでした。

リンクの有無にかかわらず、選択したファイルのグループは常に合計として数えられます。つまり、10MBのファイルを取得して2つのハードリンクを作成した場合、3つすべてを選択すると30MBになり、これが正しいサイズになります。これは、ファイルの元のマスターファイルテーブルエントリに関連するソフトリンクとは異なります。 0バイト、ハードリンクはデータ自体に関連していますは、MFTで独自のエントリを持っていますが、同じデータアドレスを指していて、明らかに実際のデータのサイズと同じ時間、属性などを持ちます。に。なぜ、下。

ドライブの残量は?単純なもの:ドライブ自身のプロパティがレポートするものと同程度。 Cで隠されているものと隠されていないもののすべてのファイルを選択して比較したり、ツールを使うを実行してはいけません。実際のHDD使用量は表示されません。どうして?なぜなら

  1. その操作は、ハードリンクを含むすべての選択されたファイルのリストを別々のファイルとして作成し、それらのそれぞれを取得してサイズを合計し、ドライブのプロパティは実際の保存データをカウントします。
  2. すべてのファイルがカウントされるわけではなく、移動から保護されているフォルダや読み取りからファイルがカウントされることはなく、システムボリューム情報には通常、非常に大きなファイルが保護されています。
  3. ファイルやリンクなどをDVDやNASにコピーする必要がある場合は、その数はファイル転送の場合にのみ役立ちます。これらはNTFS固有の機能であるため使用できないため、保存されません。またはISO、UDF、NFS、その他のファイルシステムではさまざまな形式で利用可能ですが、それらは複製されます。

テストを行います。10MBのファイルa.exeを別のドライブからコピーし、空き容量が10MB減少することを確認します。ハードリンクを作成します(mklink/H b.exe a.exe)。これで、選択された2つのファイルは選択プロパティで20MBを使用しますが、実際はドライブのプロパティでは10MBしか検証されていません _となります。ファイルのコピーどちらか一方を削除すると、空き容量は変わりません。最後のものを削除すると、スペースが10MB増えます。害はありましたか?いいえ。

winsxとは何ですか?はるかに良いdllcacheです。 XPのdllcacheには、クローン作成後にサイズの使用に実際に追加されたファイルのコピーがありました。 (ウイルスに対する)完全な保護。不正なアンインストーラがSystem32からいくつかのランタイムライブラリを削除する必要があると判断した場合、リンクは削除され、データは削除されず、データスペースの使用量を最小限に抑えながら再作成されます。元のファイルの横にあるタクシー。また、winsxはシリアライゼーションをもたらし、同じ名前で異なるバージョンのファイルをコンパートメント化します。これは開発者のためです。これは良いこと/悪いことです。正しくコーディングするのを怠惰にします。

私がやったのと同じ理由で、ここに着陸する誰かを助けるために私はこれをしました... SP1以降のwinsxsによる過剰な "スペースの使用"。そしてそれが役に立ったことを願っています。

44
Mateen Ulhaq

ディスクスペースが限られている場合、これらの複製とバックアップは非常に面倒です。

その場所にいて、私がOSの安定性を危うくしないとわかった唯一の方法は、 「ディスク容量を節約するために内容を圧縮する」 設定を惜しみなく使うことでした。

これらすべてのバックアップディレクトリをWindowsディレクトリの下に圧縮することで、ディレクトリサイズを6.5 GBから5 GBに減らすことができました。副作用はほとんどありませんでした。 Windowディレクトリ以外の場所でこれを使用すると、10 GBがさらに拡張されます。

33
eran

Vistaがあり、SP2がインストールされている場合は、新しいService Packクリーンアップツールを使用して古いシステムファイルをクリーンアップできます。

  1. 「スタート」>「すべてのプログラム」>「アクセサリ」>「コマンドプロンプト」をクリックするか、または「スタート」>「ファイル名を指定して実行」をクリックしてcmdと入力してコマンドプロンプトウィンドウを開きます
  2. “ Compcln.exe”コマンドを実行してください。パスは“ c:\ Windows\System32\compcln.exe”です。
  3. Vista SP2をシステムに永続的に保持するかどうかをユーザーに質問します。
  4. 「Y」と入力してEnterキーを押すと、システムはWindowsコンポーネントのクリーンな実行を開始します。
27
Tomas Andrle

Windows 8では、 Windowsの機能の削除 によって、WinSxSフォルダのサイズを小さくすることができます。

DISM.exe /Online /Disable-Feature /Featurename:<name> /Remove

重要なことは、/ Removeパラメータで、これはWindows 8に新しく追加されたものです。

WinSxSの大部分のスペースは、あなたが時間をかけてインストールするWindowsUpdatesを使います。 Windows 8/Windows 10では、 を使用して、新しいアップデート に置き換えられるアップデートを検出および削除できます(新しい累積IE更新)このコマンドを実行している:

dism.exe /online /cleanup-image /startcomponentcleanup

または、ディスククリーンアップウィザードを実行して "Windows Update Cleanup"を選択します。

enter image description here

enter image description here

enter image description here

また、サービススタックのアップデート http://support.Microsoft.com/kb/2821895 をインストールしたことを確認してください。

このアップデートは、WinSxSの徹底的なクリーンアップを実行し、現在使用されていないWinSxSからのすべてのDLL/Exeファイルを、より小さなデルタファイルに圧縮します。

enter image description here

さまざまなファイルサイズを見てください。

Windows 8.1新しいDISMコマンド が追加されました。 /startcomponentcleanupは新しいパラメータ/ResetBaseを取得します。これはあなたの最後のUpdateを永続的なものにし、より多くのスペースを節約するためにすべての古いファイルを削除します。

WinSxSフォルダを分析するために新しいコマンドdism /online /cleanup-image /analyzecomponentstoreを実行することもできます。

enter image description here

スペースを節約するためにいつクリーンアップを実行する必要があるかがわかります。

21
magicandre1981

このページ によると、SP1を恒久的なものにするために VSP1CLN.EXE を使用することができます。

20
Ben Lings

良い知らせです。 Windows 7 SP1用に、Microsoftからの 公式に認可された方法 が、 WinSXSフォルダを整理する .

  1. HotFix 2852386をインストールする - 手動でダウンロードするか、またはWindows Updateが実行されるのを待つことができます。
  2. これにより、ディスククリーンアップWizard(システムファイルのクリーンアップ)に新しいオプションが追加され、 "Windows Updateのクリーンアップ"を有効にできます。このオプションをチェックしてください。
  3. OKをクリック

警告:WinSxSフォルダのクリーンアップを実行した後、特定のWindowsアップデートをアンインストールできない場合があります。

9
Mark Henderson

Dism ++はあなたが探しているものです( https://www.chuyu.me/en/index.html )。

ギガバイトのスペースを節約します...

「置き換えられたWinSxSアセンブリ」を選択する必要があります。これを行うと、これらのインストール済みアップデートをアンインストールできないという警告が表示されます。 [OK]をクリックしてからスキャンします

enter image description here

どのくらいのスペースを節約できるかがわかります。クリーンアップを打ちなさい、そしてそれはそのスペースを一掃するべきである。

2
user425154

そうでなければJeff Atwoodの偉大な答えが/ResetBaseスイッチを逃しているのでそれが1つの簡単なonelinerを持つことが役に立つことを願っています。

注意:このスイッチはWinSxSフォルダのサイズを減らすのに非常に役立ちますが、しかし以前のバージョンのコンポーネントを完全に削除するため、以前にインストールされたアップデートをロールバックすることはできません。しかし、あなたのシステムがうまく動作するなら、あなたは安全であるべきです(あなたが本番環境にいない場合は特に)

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

これはWindows 8.1以降で動作します

1
maoizm

前述の解決策のほかに、かなりのスペースを確保する1つの方法は、フォルダーの内容全体を圧縮することです。ただし、少なくともWindows 7以降では、エクスプローラを使用してこれを行うことはできません(適切な権限が必要です)。

これらの指示 は、これを実現する方法を示しています。

sc query msiserver 
sc query TrustedInstaller

sc stop msiserver
sc stop TrustedInstaller

sc config msiserver start= disabled
sc config TrustedInstaller start= disabled

icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS.acl" /t

takeown /f "%WINDIR%\WinSxS" /r

icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t

compact /s:"%WINDIR%\WinSxS" /c /a /i *

icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t

icacls "%WINDIR%" /restore "%WINDIR%\WinSxS.acl"
del "%WINDIR%\WinSxS.acl"

sc config msiserver start= demand
sc config TrustedInstaller start= demand

sc start msiserver
sc start TrustedInstaller

メモ/ヒント:

  1. 手動で行う場合、グループ化はこれらのコマンドを実行するための推奨される方法を示します。通常、問題はありません(使用されているため、スキップされたファイルを除く)が、各グループの結果を確認する必要があります。

  2. 私は自宅や職場でのさまざまなオペレーティングシステムのインストールでこれらのステップを実行しました:Win7x64、Win10x64、Windows Server 2008 R2およびWindows Server 2012、私は今のところ問題を見ませんでした。

  3. いくつかのステップ、特に圧縮時間はかなりの時間がかかります。ほとんどの手順は処理されたファイルを繰り返し表示します。コマンドプロンプトウィンドウを最小化すると、速度が上がる可能性があります。

0
Alexei