Очистка хранилища компонент Windows в каталоге WinSxS

WinSxS Dism.exe Windows Component CleanupТолько что установленная Windows Server 2012 R2 Standard EN после установки всех обновлений, доступных в службе Windows Update занимает почти 22GB. В случае, если система готовится в качестве шаблона, с которого в дальнейшем планируется выполнять клонирование серверов, или же мы стали испытывать нехватку свободного места на системном диске уже функционирующего сервера, нам потребуется найти пути оптимизации используемого дискового пространства. Одним из возможных вариантов штатной оптимизации, заложенной в Windows Server, является операция обслуживания так называемого хранилища компонент в каталоге %windir%\WinSxS.

Перед нами показатель заполненности системного диска на только что установленном и обновлённом виртуальном сервере с ОС Windows Server 2012 R2 Standard.

Fresh installed Windows Server 2012 R2 System Disk

Анализ текущего состояния хранилища компонент Windows и его последующую очистку мы можем провести с помощью утилиты, входящей в состав ОС – Dism.exe (сокращение от Deployment Image Servicing and Management).

Запускается анализ следующей командой (требуются права Администратора):

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

WinSxS Dism.exe Windows Component Analyze

По окончании выполнения команды, изучим её вывод и обратим внимание на показатель "Number of Reclaimable Packages", который определяет число пакетов, заменённых в процессе обновления системы через Windows Update. То есть, это те пакеты, которые могут быть безболезненно вычищены из хранилища.

Значение "Yes" в строке "Component Store Cleanup Recommended" говорит о том, что, по данным проведённого анализа, очистка возможна и рекомендуема.

Прежде, чем запускать нижеуказанную команду, нужно иметь ввиду, что в ходе её выполнения длительное время может быть ощутимо нагружен процессор. Поэтому планировать такую процедуру для уже работающих систем Windows лучше на время, когда не требуется продуктивная работа с системой.

Запуск процедуры очистки хранилища компонент Windows выполняется командой:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

В нашем примере на только что установленной Windows Server 2012 R2 (с выполненной последующей доустановкой ~200 обновлений) время выполнения процедуры очистки заняло более двух часов.

WinSxS Dism.exe Windows Component Cleanup

Дождавшись успешного завершения, посмотрим, как изменилась ситуация на диске.

Fresh installed Windows Server 2012 R2 System Disk after Dism.exe Windows Component Cleanup

Как видим, вместо ранее имеющейся величины свободного места в 7,43 GB, теперь мы имеем 16,6 GB, то есть операция очистки высвободила в нашем случае 9,17 GB. Результат очень даже ощутимый.

Однако в системе по-прежнему остаются файлы, которые могут использоваться для отката установленных обновлений, поддерживающих процедуру деинсталляции. Это хорошо видно, если в оснастке управления установки/удаления программ appwiz.cpl перейти в режим отображения информации об обновлениях. Здесь на большинстве обновлений мы увидим возможность удаления, то есть фактического отката заменяемых обновлениями файлов на их ранние версии.

Uninstall Windows Update

Если мы считаем, что система работает стабильно и имеем уверенность в том, что нам не потребуется выполнять удаление каких-либо обновлений, то мы можем выполнить дополнительную процедуру удаления предыдущих версий для всех компонент, которые были изменены установленными обновлениями. Нужно понимать, что тем самым мы лишим себя возможности отката установленных обновлений. В таком случае, ранее используемую команду выполняем с дополнительной опцией /ResetBase:

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

Dism Online Cleanup-Image Start Component Cleanup ResetBase

Снова посмотрим, как изменилась ситуация на диске.

Fresh installed Windows Server 2012 R2 System Disk after Dism.exe Windows Component Cleanup and ResetBase

Как видим, на этот раз мы смогли высвободить ещё 1 GB ёмкости дискового тома.

И теперь, если мы снова заглянем в оснастку управления установки/удаления программ appwiz.cpl в режиме отображения информации об обновлениях, то увидим, что при выборе любого из обновлений кнопка Uninstall более нам недоступна.

Unable to uninstall Windows Updates after Dism.exe Windows Component Cleanup and ResetBase

Таким образом, если мы решили прибегнуть к описанной выше процедуре очистки хранилища компонент Windows в каталоге WinSxS, то сначала лучше использовать более щадящую команду очистки, то есть без ключа /ResetBase, так как результат такой очистки в большинстве случаев даёт нам вполне удовлетворительный размер освобождаемого места, оставляя при этом больше «шансов для манёвра» в случае проблем с уже установленными обновлениями. То есть команду очистки с ключом /ResetBase предлагается использовать только в крайних исключительных случаях.

Дополнительные источники информации:

Всего комментариев: 4 Комментировать

  1. Сергей /

    Классная статья, спасибо. Как считаете, поможет такое на Windows Server 2008R2?

    1. Алексей Максимов / Автор записи

      Здравствуйте, Сергей. Посмотрите эту статью: Как грамотно уменьшить размер папки WinSxS в Windows 7 SP1. Там достаточно подробно расписан метод, которым можно воспользоваться для Windows 7 (и Windows Server 2008 R2).
      Как я понял, Вам, как минимум потребуется установка обновления KB2852386

  2. razbornovd /

    Общий привет. Могу добавить адский хинт в порядок создания образов. Как показывают комментарии, народ ни про блог Вадима не знает, ни про папку winxs. Ну да это все поправимо. Итак,
    1. Берем Win 2012R2
    2. Интегрируем в него апдейты
    3. Прогоняем Resetbase
    4. Экспортируем в другой wim
    5. Устанавливаем в виртуалку и делаем из него темплейт.

    Результат после пункта 4 получится еще более ощутимый, при наличии SCCM 1 и 2 пункты делаются ощутимо легче.

    1. Sting /

      Ну взять с помощью SCCM это и правда ощутимо легче )
      лучше расскажи что подразумеваешь по другим wim? чем экспортировать?

Добавить комментарий