Папка WinSxS не дает покоя пользователям со времен Windows Vista. И действительно, если вы зайдете в директорию Windows на системном диске и посмотрите размер папки WinSxS, то можете сильно удивиться. Что же находится в этой папке, почему она такая большая и можно ли уменьшить ее размер? Попробуем это выяснить.
Для начала напомню, что из себя представляет папка WinSxS.
Все более-менее современные операционные системы Microsoft (начиная с Windows Vista) состоят из компонентов. Компонент в Windows представляет из себя один или несколько бинарных файлов, файл-каталог и XML-файл с описанием настроек (ключи реестра, настройки безопасности и т.п.). Компоненты группируются в логические блоки, из которых собираются различные редакции Windows.
Все компоненты ОС находятся в папке WinSxS, которая является хранилищем компонентов. Каждый компонент в хранилище имеет свое уникальное имя, включающее в себя номер версии, язык локализации и архитектуру процессора, для которой он был собран. В операционной системе есть только один экземпляр каждой версии каждого файла, и экземпляр этот находится в папке WinSxS, а все остальные экземпляры представляют из себя жесткие ссылки (hard links) на файлы, находящиеся в хранилище.
По сути, в папке WinSxS содержится практически вся операционная система, включая и неустановленные компоненты. Кстати, именно поэтому при установке дополнительных компонентов система не запрашивает установочный диск.
Размер папки WinSxS изначально большой, но со временем он еще увеличивается. Происходит это из за обновления компонентов. Поскольку единицей обновления в Windows является не файл, а компонент, то при обновлении одного единственного бинарного файла выпускается новая версия всего компонента. Новая версия устанавливается в систему, при этом предыдущая не удаляется, а остается в хранилище. Такой подход дает возможность в любой момент отменить обновление и откатиться к предыдущей версии компонента.
Таким образом, размер папки WinSxS напрямую зависит от возраста системы и количества установленных обновлений — чем старше система, тем больше размер. Впрочем не все так плохо и на практике средний размер папки составляет не больше 10-15 Гб. Кроме того не забываем, что большинство системных файлов из папки Windows проецируются в нее с помощью жестких ссылок из папки WinSxS, так что на самом деле размер WinSxS гораздо меньше.
Именно из за наличия жестких ссылок файловые менеджеры могут показывать несколько преувеличенный размер папки WinSxS. Более точные данные о размере папки в Windows 8 можно узнать с помощью утилиты Disk Usage от Sysinternals. Достаточно просто распаковать утилиту и выполнить команду:
du C:\Windows\WinSxS
Как видите, утилита показывает немного меньший размер папки, чем Проводник.
Если у вас на системном диске не хватает места, то размер хранилища можно уменьшить, удалив неиспользуемые компоненты. Сразу предупрежу, что лишние файлы нельзя просто взять и удалить, это может привести к частичной или даже полной неработоспособности системы. В Windows 8 есть три безопасных способа очистить папку WinSxS.
Утилита «Очистка диска»
Для очистки хранилища можно воспользоваться графической утилитой «Очистка диска», запущенной с правами администратора. Для этого надо зайти в папку C:\Windows\System32, найти файл cleanmgr.exe и выбрать запуск от имени администратора.
Для уменьшения размера папки WinSxS надо отметить пункт «Очистка обновлений Windows» и нажать ОК. Кстати, утилита не совсем точно определяет объем высвобождаемого пространства, реально он может отличаться на пару сотен мегабайт в меньшую сторону.
Утилита DISM
С помощью консольной утилиты DISM также можно очистить хранилище компонентов. Для этого в командной строке, запущенной с правами администратора, надо выполнить команду:
Dism /Online /Cleanup-Image /StartComponentCleanup
Также с помощью DISM можно очистить хранилище после установки сервис-пака (SP):
Dism /Online /Cleanup-Image /SPSuperseded /HideSP
Ключ /SPSuperseded удаляет архивные файлы, созданные при установке SP, а /HideSP убирает его из списка установленных обновлений. Но поскольку вместо сервис-пака для восьмерки вышла Windows 8.1, то использовать эти ключи не получится, по крайней мере пока. Впрочем, этот способ можно использовать и в Windows 7 с установленным SP1.
Планировщик заданий
В библиотеке планировщика заданий, в разделе Microsoft\Windows\Servicing есть задание StartComponentCleanup. Это задание запускается системой автоматически, в рамках автоматического обслуживания системы, но при желании можно запустить его вручную. Эффект от запуска этого задания практически такой же, как и при использовании предыдущих способов, за исключением того, что игнорируются обновления, установленные за последние 30 дней.
Новое в Windows 8.1
В Windows 8.1 в утилите DISM добавилось несколько новых параметров, предназначенных для очистки хранилища. Теперь мы можем посмотреть реальный размер хранилища и проанализировать его содержимое командой:
Dism /Online /Cleanup-Image /AnalyzeComponentStore
И самое интересное, появилась возможность не только очистить хранилище, но и удалить все предыдущие версии компонентов:
Dism /Online /Cleanup-Image /StartComponentCleanup /ResetBase
Ключ /ResetBase не используется при плановой очистке и очистке из графической оснастки. Его использование поможет высвободить еще некоторое количество дискового пространства, но будьте осторожны. Удаление предыдущих версий лишает вас возможности удалить установленные обновления и делает невозможным откат изменений в случае каких либо проблем.
Вот так просто, одной командой или несколькими кликами мышкой можно освободить несколько дополнительных гигабайт на диске. Впрочем, на сегодняшний день объемы жестких дисков позволяет не задумываться о недостатке места, да и SSD объемом 128-256 Гб вполне доступны по цене. Поэтому, на мой взгляд, проблема с большим размером папки WinSxS актуальна в основном для владельцев планшетов с Windows 8.
Очень полезная и познавательная статья, а главное, что написана доступно для понимания. Кстати она применима и для Windows 7 Максимальной. Недавно в корне папки WinSXS у меня появился файл pogexec.log, Вы не знаете что он может означать?