WinSxS: зачем папка нужна, и как уменьшить её размер?

WinSxS: зачем папка нужна, и как уменьшить её размер?

24.06.2019 0 Автор GodKnowses

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

Директория C:\Windows\WinSxS является репозиторием компонентов ОС Windows. Она содержит в себе файлы DLL, бинарные файлы, файлы XML, необходимые для установки и операций любой функции Windows. Когда устанавливаются обновления Windows, в системе появляются новые версии компонентов Windows; при этом предыдущие версии перебираются в указанную папку. Это делается для того, чтобы у пользователя была возможность откатиться назад в случае появления с обновлением каких-то проблем или сохранялась возможность совместимости с предыдущими версиями.

содержимое папки winsxs windows 10

Даже не присматриваясь к этому краткому описанию назначения папки можно понять, что со временем увеличение объёмов папки неизбежно. Причём этот процесс ничем неограничен, хотя на своей памяти папок WinSxS размером более 20 Гб я не видел.

свойства папки winsxs

Самый простой способ сократить размер папки – просто убрать прежние версии оставшихся компонентов и устаревших обновлений (не вручную, естественно). Для этого можно воспользоваться встроенной в Windows 10 утилитой очистки системы cleanmgr.exe или особой опцией команды DISM (о чём ниже).

КСТАТИ

В Windows 7 одноимённое средство очистки старые обновления не затрагивает. По умолчанию. Чтобы удалять ненужные обновления в этой версии при помощи cleanmgr.exe, необходимо обновление KB 2852386.

Всё бы ничего, да не всё так просто. Кроме описанных функций, папка WinSxS настоящий склад жёстких символьных (символических) ссылок, которые являются указателями на файлы, принимая на себя все их функции. Это значит, что ссылка и сам файл могут иметь разные названия и располагаться в разных директориях одного тома, указывая при этом на один и тот же объект. А файловые менеджеры всех мастей отображают большой размер папки WinSxS именно с учётом таких жёстких ссылок, которые лежат в этой директории. Настоящий размер папки WinSxS можно узнать, например, с помощью небольшой программки DU (Disk Usage) от Sysinternals. Кроме того, проверить размер хранилища системных компонентов можно при помощи команды DISM:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

Нередко на форумах вопрос о ручной очистке папки повторяется. Поддержу тех, у кого хватает ума оградить пользователей от стирания содержимого WinSxS простым выделением и клавишей Delete. Часто такие действия заканчиваются повреждением системного образа, хотя иногда (даже редко) такое удаление и “прокатывает”. Но даже если так и произошло, такой метод высвобождения пространства крайне не рекомендуется. Основными способами очистки WinSxS можно назвать:

  • сжатие папки через NTFS-компрессию
  • удаление старых версий компонентов из их хранилища (оставшихся версий после установки обновлений)
  • удаление нетребуемых компонентов системы.

Применяя все три варианта сразу в порядке, описанном ниже, можно добиться неплохих результатов по высвобождению дискового пространства. И, если вы обладатель Windows 10, начните с команды в консоли от имени администратора:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

С этим справляется и cleanmgr.exe, также запущенная от имени администратора. Кстати говоря, в Планировщике задач Windows 10 предусмотрена операция, аналогичная DISM. Она затирает устаревшие обновления сроком старше 30 дней. Ищите задачу с именем StartComponentCleanup в разделе ~\Microsoft\Windows\Servicing.

Настройки по требованию или удаление компонентов

Такая “функция” появилась в новой версии Windows, позволяя удалять бинарные файлы неиспользуемых системных возможностей. И она доступна только из DISM или с помощью командлета DISM в PowerShell. Кроме того, нужно помнить, что команда DISM не способна анализировать пакеты зависимостей, как это происходило в предыдущей версии с похожей возможностью. Вобщем, после удаления пакета с использованием только DISM будет удалено только указанное. А остальные зависимые пакеты останутся. Полный список настроек и функций в образе Windows можно посмотреть запустив в консоли команду:

DISM.exe /Online /English /Get-Features /Format:Table

список настроек и функций в образе Windowsудалить ненужные компоненты windows dism
К примеру, мы не собираемся использовать неизменно появляющийся во всех версиях Windows давно почти бесполезный Internet Explorer. Его можно убрать из списка функций и возможностей, т.е. из именно из папки WinSxS, с помощью вот этой команды:

DISM.exe /Online /Disable-Feature /Featurename:Internet-Explorer-Optional-amd64 /Remove

Теперь в списке доступных функций системы статус этой службы изменится на Отключён (Disabled). Однако это именно тот случай, когда пользователь должен быть уверен в своих действиях. Напропалую отключать все Enabled-функции не следует по понятным причинам.

отключение компонентов windows

NTFS сжатие для WinSxS

Следующим вариантом уменьшить размер папки WinSxS – применить к директории сжатие на уровне NTFS. В этом случае настоятельно рекомендуется подстраховаться созданием полноценной резервной копии системы. После её создания запускаем консоль и останавливаем пару служб:

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

Запасёмся резервной копией списков доступа, закреплённых за папками и файлами (ACL-ки) в нашей директории с помощью утилиты icacls. Резервная копия ACL представляет собой простой тестовый файл, в котором прописываются файлы и папки, а также разрешения к ним.

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

Станем владельцем самой папки WinSxS и включённых в неё папок:

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

Присвоим своей учётке полные права на эту директорию:

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

Сожмём содержимое папки командой из терминала. Некоторые из файлов сжатию не поддадутся (они могут просто использоваться прямо сейчас системой), так что, запусти вы команду без флага /I, она, наткнувшись на заблокированный файл, процесс остановит. Можно обнаружить название процесса, который работает над этим файлом (Ctrl + F) и остановить его. Однако стоит сосредоточиться именно на сжатии тех файлов, которые системой не используются:

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

После того, как закончим, дополученные на WinSxS права лучше делегировать обратно TrustedInstaller:

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

Восстанавливаем оригинальные ACL в папку WinSxS из ранее созданного резервного файла:

icacls "%WINDIR%" /restore "%WINDIR%\WinSxS_NTFS.acl"

А теперь восстанавливаем автозапуск служб Windows Installer and Windows Module Installer:

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

Можете проверить размер папки WinSxS:

winsxs после сжатия

В моём случае с помощью компрессии мне удалось снизить размер папки почти на 4 Гб . Не бог весть что, однако… На одной из машин у меня небольшой по размерам SSD – для него и такой объём пространства серьёзен. И, если такой вариант развития событий вам по душе, могу предложить замену командам в этом абзаце вот этим батником:

Сжатие папки winsxs

сжатие папки с помощью батника

Перед запуском закройте проводник Windows. Перед запуском распакуйте файл из архива, разблокируйте в свойствах и запустите от имени администратора. Времени потребуется немало.

Как сжатие повлияет на работу папки WinSxS и системы в целом?

Windows работает со сжатыми файлами в так называемом прозрачном режиме (режиме передачи данных). Но на сжатие/декомпрессию данных всегда требуется время. А это пользователь иногда замечает: далеко не у всех из нас под капотом прицеплен “модерновый камень”. Но, кстати, в случае с функцией сжатия иметь мощный процессор гораздо более эффективнее, чем быстрый жёсткий диск – в некоторых случая я лично отмечал даже прирост скорости в работе именно со сжатыми файлами. Так что пользователи нестарых моделей компьютеров замедление работы не ощутят, а вот обладателям “старичков” функцию сжатия следует использовать осторожно по отношению к любым сжатым файлам и папкам.

Удаление старых версий: cleanmgr.exe

Ещё один надёжный способ освободить место на диске (в том числе и в папке WinSxS) это утилита очистки cleanmgr.exe. В Windows 10 она умеет немного больше, чем предыдущие в Vista/7. Запускаем:

очистка диска в windows 10

Далее вам следует лишь выбрать диск для очистки и выставить галочку у пункта Файлы журнала обновления Windows:

удаление старых файлов обновлений

очистка диска

очистка папки winsxs windows 7

Успехов.