В этой статье мы поговорим о каталоге WinSxS в Windows, причинах его постоянного роста и способах очистки. Каталог C:\windows\WinSxS является хранилищем компонентов Windows. В этом каталоге хранятся dll библиотеки, бинарные и xml файлы, необходимые для установки и работы различных ролей и компонентов Windows. Каждый раз когда вы устанавливаете обновления Windows (это происходит ежемесячно), новая версия обновляемого компонента устанавливается в систему, а старая сохраняется в хранилище компонентов WinSxS (это необходимо для обеспечения совместимости и возможности “отката“ к старым версиям компонентов при удалении проблемного обновления).
Со временем размер каталога WinSxS постоянно увеличивается. Причем его размер ничем не ограничен (хотя на практике размер папки WinSxS в Windows 10 редко превышает 15-20 Гб.)
В этой статье мы рассмотрим наиболее безвредные способы очистки папки WinSxS в Windows 10 и Windows Server.
- Оптимизация хранилища компонентов и удаление старых версий компонентов, оставшихся после установки обновлений Windows;
- Технология Features on Demand (функции по требованию), позволяющая удалить неиспользуемые компоненты Windows с диска;
- Сжатие файлов в папке WinSxS – способ уменьшить размер каталога WinSxS за счет включения NTFS компрессии.
Как узнать реальный размер папки WinSxS в Windows 10?
Самый простой способ получить текущий размер каталога WinSxS в Windows, запустить проводник File Explorer и открыть свойства папки %windir%\WinSxS (или воспользоваться скриптом PowerShell). Но имейте в виду, что большинство файловых менеджеров (в том числе File Explorer) показывают несколько больший размер каталога WinSxS, чем он занимает на диске.
Дело в том, что в каталоге WinSxS есть большое количество hard links (жестких символических ссылок) на файлы в других системных каталогах. Файловые менеджеры при подсчете размера папки WinSxS учитывают объем файлов, на которые ссылаются жесткие ссылки, а это не корректно.
Чтобы реальный (без учета жестких ссылок) размер папки WinSxS, воспользуйтесь утилитой SysInternal du:
du -v c:\windows\winSXS

Но проще всего проанализировать размер хранилища компонентов в папке WinSxS с помощью команды DISM:
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
Разберемся, что возвращает данная команда:
Размер хранилища компонентов по данным проводника : 5.70 GB (это размер хранилища с учета жестких ссылок, который отображается в проводнике)
Фактический размер хранилища компонентов : 5.49 GB (реальный размер хранилища компонентов за исключением жестких ссылок)
Совместно с Windows : 3.12 GB (обязательные файлы системы, не могут быть удалены)
Резервные копии и отключенные компоненты : 2.12 GB (устаревшие файлы компонентов, которые нужны на случай проблем с установленными обновлениями)
Кэш и временные данные : 245.87 MB (файлы используются для ускорения работы системы обслуживания)
Дата последней очистки : 2018-07-31 12:45:23
Число освобождаемых пакетов : 10 (файлы, которые обновились после установки обновлений Windows, они будут удалены при очистке хранилища)
Рекомендуется очистка хранилища компонентов : Да
Как вы видите, в данном случае можно уменьшить размер каталога WinSxS на 2.1 Гб + 250 Мб.
DISM /Online /Cleanup-Image /RestoreHealth
Очистка хранилища компонентов WinSxS в Windows
Самый быстрый и простой способ освободить место в хранилище компонентов Windows (т.е. очистить папку WinSxS) – оптимизация хранилища командой:
Dism.exe /Online /Cleanup-Image /StartComponentCleanup
После окончания очистки проверьте текущий размер хранилища компонентов:
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
В моем примере это помогло уменьшить размер папки WinSxS на 2,5 Гб.
С помощью еще одного параметра /ResetBase вы можете удалить все предыдущие версии компонентов, оставшиеся после установки обновлений Windows. После этого вы не сможете удалить установленные обновления или Service Pack, а в панели обновлений
appwiz.cpl
у обновлений пропадет кнопка «Удалить»).
Чтобы очистить старые версии компонентов, выполните:
Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase
dism /online /Cleanup-Image /spsuperseded
Также вы можете удалить устаревшие обновления с помощью мастера очистки диска. Выполните команду cleanmgr c правами администратора.
В окне утилиты выберите диск и в следующем окне нажмите кнопку «Очистить системны файлы».
Далее выберите опцию “Файлы журнала обновления Windows» и нажмите ОK. Утилита очистки диска покажет сколько места вы можете освободить, удалив файлы журнала старых обновлений Windows. В моем примере это 427 Мб.
После окончания очистки хранилища с помощью DISM проверьте сколько освободилось места на диске.
В планировщике задания Windows 10 и Windows Server 2016 есть специальное задание автоматического обслуживания, которое регулярно выполняет оптимизацию и очистку каталога WinSxS (выполняется действия, аналогичные команде dism с ключом StartComponentCleanup). Это задание StartComponentCleanup находится в разделе \Microsoft\Windows\Servicing. Данное задание запускается в фоновом режиме и автоматически удаляет версии компонентов старше 30 дней, которое были заменены более новыми версиями.
Можно запустить это задание вручную так:
schtasks.exe /Run /TN "\Microsoft\Windows\Servicing\StartComponentCleanup"
Удаление неиспользуемых компонентов Windows (Windows Server)
В статье Безопасная очистка папки WinSxS в Windows Server 2016/2012 мы рассмотрели функцию Features on Demand (функции по требованию), предоставляющую возможность удаления с диска бинарных файлов неиспользуемых ролей и компонентов из каталога WinSxS. Для этого в Windows Server используется командлет PoweShell Uninstall-WindowsFeature.
В Windows 10 командлет Uninstall-WindowsFeature отсуствует, и для удаления компонентов Windows из образа нужно использовать DISM.
Полный список доступных функций в образе Windows 10 можно получить с помощью команды:
DISM.exe /Online /English /Get-Features /Format:Table
Чтобы удалить, например компонент TelnetClient с диска (из каталога WinSxS), выполните команду:
DISM.exe /Online /Disable-Feature /Featurename:TelnetClient /Remove
Если еще раз вывести список всех доступных функций по требованию в Windows, вы увидите, что статус компонента изменится на Disabled with Payload Removed.
Таким образом в Windows можно существенно уменьшить размер папки WinSxS, удалив с диска неиспользуемые компоненты. Единственный нюанс, это вариант очистки каталога WinSxS подойдет для достаточной продвинутых пользователей, которые разбираются в компонентах Windows 10 и их назначении.
Включаем NTFS сжатие на папке WinSxS в Windows
Еще один способ уменьшить размера каталога WinSxS в Windows 10 – сжать содержимое каталога на уровне файловой системы NTFS.
- Откройте командную строку с правами администратора;
- Остановите и отключите службы Windows Installer и Windows Module Installer:
sc stop msiserver sc stop TrustedInstaller sc config msiserver start= disabled sc config TrustedInstaller start= disabled
- Создайте резервную копию списков доступа (ACL) назначенных на файлы и папки в каталоге WinSxS с помощью утилиты icacls. Резервная копия ACL представляет собой обычной текстовый файл, в котором указаны все файлы и каталоги и назначенные на них NTFS разрешения (в дальнейшем этот файл понадобиться для восстановления оригинальных ACL):
icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS_NTFS.acl" /t
- Назначьте себя владельцем папки WinSxS и всех вложенных каталогов:
takeown /f "%WINDIR%\WinSxS" /r
- Предоставьте своей учетной записи полные права на каталог WinSxS:
icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t
- Теперь можно выполнить сжатие файлов в каталоге WinSxS с помощью команды compact. Т.к. часть файлов может использоваться Windows, нужно указать параметр /i. Иначе сжатие будет остановлено на первом же занятом файле (в Windows 10 можно использовать более прогрессивное LZX сжатие):
compact /s:"%WINDIR%\WinSxS" /c /a /i *
- Теперь нужно восстановить TrustedInstaller как владельца каталога WinSxS:
icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t
- И вернуть оригинальные NTFS разрешения на каталог WinSxS из резервной копии ACL:
icacls "%WINDIR%" /restore "%WINDIR%\WinSxS_NTFS.acl"
- Измените типа тип запуска служб Windows Installer и Windows Module Installer:
sc config msiserver start= demand sc config TrustedInstaller start= demand
Проверьте текущий размер каталога WinSxS.
Как вы видите, в нашем примере размер папки WinSxS за счет сжатия уменьшился с 9,36 Гб до 6,5 Гб (примерно на треть). Неплохо, особо для небольшого по размеру SSD-диска.
Указанные команды можно выполнять по отдельности (так проще контролировать успешность выполнения каждой из них), либо можно объединить все операции в один файл скрипт. Вы можете скачать готовый bat файл для сжатия WinSxS здесь compress_winsxs.bat
Данный скрипт нужно запускать периодически, т.к. в каталоге WinSxS будут появляться новые «несжатые» файлы после установки новых обновлений Windows и программ.
Отлично, работает!!!
Воспользовался bat-ником, и размер папки WinSxS уменьшился (на диске) с 9,7 до 6,5 Гб.! Для меня критично, т.к. системный раздел всего 30Гб, а прожорливой Win8х64 этого, как оказалось, маловато…
Думаю, раз в месяц запуска bat-ника будет достаточно, чтобы держать разрастающийся WinSxS «в узде».
СПАСИБО!
Пожалуйста!
Ненавижу винду, но к сожалению пока не могу перейти окончательно на линуху из за некоторого софта.
Ах да, о чем это я. Спасибо вам огромное за батник. +2,5 гига свободного места. на ssd 128 крайне важно. Еще раз благодарю
Ура!! Батник за счет сжатия папки WinSxS сэкономил мне целых 5 гигов. Автор красавчик!
Я добавил в конец скрипта еще строку del «%WINDIR%\WinSxS_NTFS.acl»у меня это получается еще 31Мб экономии 🙂
🙂 Вы правы, этот файл получается достаточно большим. Все таки, если нет бекап системе нет, рекомендую удалить этот файл только после того, как убедитесь, что система работает корректно.
На Windows Server 2008 R2 пойдет?
Сжатие? Да.
Добрый день, делаю для всех отключённых пакетов, место не освобождается,
Смотрим
PS C:\Windows\system32> DISM.exe /Online /English /Get-Features /Format:Table
AppServerClient | Disabled
Удаляем?ДА
PS C:\Windows\system32> DISM.exe /Online /Disable-Feature /featurename:AppServerClient /Remove
Cистема DISM Версия: 10.0.17134.1 Версия образа: 10.0.17134.523 Отключение функций
[==========================100.0%==========================]
Операция успешно завершена.
Смотрим
PS C:\Windows\system32> DISM.exe /Online /English /Get-Features /Format:Table
Deployment Image Servicing and Management tool Version: 10.0.17134.1 Image Version: 10.0.17134.523 Features listing for package : Microsoft-Windows-Foundation-Package~31bf3856ad364e35~amd64~~10.0.17134.1
AppServerClient | Disabled
на месте
Почему не подскажете?
Какая версия ОС? Подозреваю, что Windows 10.
Удивительно, но похоже опция /Remove в ней инорируется. Вероятно это нужно для нормальной работы функций Reset/Refresh.
Что делать, если выдает:
Для запуска DISM требуется более высокий уровень разрешений.
Для выполнения этих задач воспользуйтесь командной строкой с повышенными привилегиями.
У меня 10 винда, вводил команды: DISM /Online /Cleanup-Image /RestoreHealth и Dism.exe /Online /Cleanup-Image /StartComponentCleanup
командную строку нужно запускать от администратора.
bat — это сила!!!!
Автору статьи ОГРОМНОЕ СПАСИБО, за скрипт и статью! В инете много на эту тему шелупони……а нормального материала почти нет. Автору зачет и 5+
Вопрос к автору статьи:я не «достаточно продвинутый» и уткнулся в Отключение функций командой
DISM.exe /Online /Disable-Feature /Featurename:TelnetClient /Remove в PowerShell ,действуя по статье. Ожидал,что за выключением последует обещанная очистка,но всё закончилось «Операция прошла успешно»,т.е. функции отключены.Что теперь делать дальше мне неведомо,ведь начатое требует продолжения для достижения результата-очистки и освобождения места на диске,заполненного у меня по красный цвет индикатора.Уважаемый автор,подскажите выход из такой ситуации,ведь оставив всё незаконченным я мог напортить и система начнёт в ответ мстить.Спасибо,жду Вашего ответа-выручки, с почтением,Исаак.
Удаление фич из winsxs это только один из пунктов оптимизации.
Но имейте в виду тут все же инфа для досаточно продвинутых людей.
Если вы с компьютером на Вы, лучше поставить что-то типо WinDirStat и найти на диске файлы и папки где у вас скопился мусор и почистить его вручную.
Исаак. Воспользуйтесь программой dism ++
https://github.com/Chuyu-Team/Dism-Multi-language/releases
А как обратно расжать все те файлы при помощи «WINDIR%\WinSxS_NTFS.acl»?
Есть какой небуть код?
compact /s:"%WINDIR%\WinSxS" /u /a /i *
/u — расжать
/c — сжать
Это только эту команду вводить или вместе с теми же что я вводил для сжатия только заменить на /u?
Или какая-то команда тут уже лишняя будет?
sc stop msiserver
sc stop TrustedInstaller
sc config msiserver start= disabled
sc config TrustedInstaller start= disabled
icacls «%WINDIR%\WinSxS» /save «%WINDIR%\WinSxS_NTFS.acl» /t
takeown /f «%WINDIR%\WinSxS» /r
icacls «%WINDIR%\WinSxS» /grant «%USERDOMAIN%\%USERNAME%»:(F) /t
compact /s:»%WINDIR%\WinSxS» /u /a /i *
icacls «%WINDIR%\WinSxS» /setowner «NT SERVICE\TrustedInstaller» /t
icacls «%WINDIR%» /restore «%WINDIR%\WinSxS_NTFS.acl»
sc config msiserver start= demand
sc config TrustedInstaller start= demand
Верно, нужно выполнить все команды, заменить только команду с compact
День добрый. Сказано: «вернуть оригинальные NTFS разрешения на каталог WinSxS», но ведь в п.8 возвращаются разрешения только на %WINDIR%. Так и должно быть?
8. И вернуть оригинальные NTFS разрешения на каталог WinSxS из резервной копии ACL:
icacls «%WINDIR%» /restore «%WINDIR%\WinSxS_NTFS.acl»
При использовании *.bat возникают некоторые ошибки. Так у всех?
обработанный файл: C:\Windows\WinSxS\amd64_addinprocess32_b77a5c561934e089_4.0.14917.0_none_13a4abe5aa8f2be0\AddInProcess32.exe.config
обработанный файл: C:\Windows\WinSxS\amd64_addinprocess32_b77a5c561934e089_4.0.15744.161_none_efbbb66e6d175e31\AddInProcess32.exe
C:\Windows\WinSxS\amd64_addinprocess32_b77a5c561934e089_4.0.15744.161_none_efbbb66e6d175e31\AddInProcess32.exe.config: Отказано в доступе.
Успешно обработано 23143 файлов; не удалось обработать 1 файлов
c:\install>sc config msiserver start= demand
[SC] ChangeServiceConfig: ошибка: 5:
Отказано в доступе.
c:\install>sc config TrustedInstaller start= demand
[SC] ChangeServiceConfig: успех
c:\install>
Такая же ерунда: [SC] ChangeServiceConfig: ошибка: 5:
Отказано в доступе.
Как это исправить?
По идее это не критично, видимо в текущих билжах у пользователя нет права на эту службу.
спасибо. довольно редко можно встретить в русскоязычном сегменте столь хорошо разбирающихся авторов, как вы.
В чем может быть проблема? Вообще не нашел инфы об ошибка именно в StartComponent
d:\Programms for Install\Soft>DISM /Online /Cleanup-Image /StartComponentCleanup
Cистема DISM
Версия: 10.0.19041.3636
Версия образа: 10.0.19045.3803
[==========================100.0%==========================]
Ошибка: 5
Отказано в доступе.
Файл журнала DISM находится по адресу C:\WINDOWS\Logs\DISM\dism.log
Нужно открыть cmd с правами админа.
Ну, не настолько я и …. непонятливый.
Именно все с правами админа. И такая проблема ТОЛЬКО в этой строке .
Вот какой батник запускаю (с правами админа!!):
DISM /Online /Cleanup-Image /AnalyzeComponentStore
DISM /Online /Cleanup-Image /StartComponentCleanup
Dism /Online /Cleanup-Image /CheckHealth
Dism /Online /Cleanup-Image /RestoreHealth
И вот что получаю в ответ:
d:\Programms for Install\Soft>DISM /Online /Cleanup-Image /AnalyzeComponentStore
Cистема DISM
Версия: 10.0.19041.3636
Версия образа: 10.0.19045.3803
[==========================100.0%==========================]
Сведения хранилища компонентов (WinSxS):
Размер хранилища компонентов по данным проводника : 9.61 GB
Фактический размер хранилища компонентов : 9.46 GB
Совместно с Windows : 5.54 GB
Резервные копии и отключенные компоненты : 3.92 GB
Кэш и временные данные : 0 bytes
Дата последней очистки : 2023-10-21 17:48:34
Число освобождаемых пакетов : 0
Рекомендуется очистка хранилища компонентов : Да
Операция успешно завершена.
d:\Programms for Install\Soft>DISM /Online /Cleanup-Image /StartComponentCleanup
Cистема DISM
Версия: 10.0.19041.3636
Версия образа: 10.0.19045.3803
[============= 23.7% ]
Ошибка: 5
Отказано в доступе.
Файл журнала DISM находится по адресу C:\WINDOWS\Logs\DISM\dism.log
d:\Programms for Install\Soft>Dism /Online /Cleanup-Image /CheckHealth
Cистема DISM
Версия: 10.0.19041.3636
Версия образа: 10.0.19045.3803
Хранилище компонентов подлежит восстановлению.
Операция успешно завершена.
d:\Programms for Install\Soft>Dism /Online /Cleanup-Image /RestoreHealth
Cистема DISM
Версия: 10.0.19041.3636
Версия образа: 10.0.19045.3803
[==========================100.0%==========================]
Ошибка: 0x800f081f
Не удалось найти исходные файлы.
Укажите расположение файлов, необходимых для восстановления компонента, с помощью параметра "Источник". Дополнительные сведения об указании расположения источника см. на веб-странице https://go.microsoft.com/fwlink/?LinkId=243077.
Файл журнала DISM находится по адресу C:\WINDOWS\Logs\DISM\dism.log"
SFC вообще ошибок не находит.
Попытка восстановления с использованием WIM-файла из дистрибутива выдает ту же самую ошибку 0x800f081f.
Все что нашел по точно такой же проблеме — совет переустановить систему.
1) Посмотрите в C:\WINDOWS\Logs\DISM\dism.log. Может быть там явно будет какая-то ошибка, которая бросится в глаза.
2) Вот так указывали WIM файл? Версия образа WIndows в WIM файле совпадает с вашей:
Dism /Online /Cleanup-Image /RestoreHealth /Source:wim:E:\Sources\install.wim:2 /limitaccess
https://winitpro.ru/index.php/2019/07/08/dism-cleanup-image-restorehealth/
1. Да. Смотрел. Ничего явного, кроме как
2023-12-25 16:00:22, Info DISM DISM Package Manager: PID=4936 TID=9376 Error in operation: source for package or file not found, ResolveSource() unsuccessful. (CBS HRESULT=0x800f081f) — CCbsConUIHandler::Error
2023-12-25 16:00:22, Error DISM DISM Package Manager: PID=4936 TID=6784 Failed finalizing changes. — CDISMPackageManager::Internal_Finalize(hr:0x800f081f)
2023-12-25 16:00:22, Error DISM DISM Package Manager: PID=4936 TID=6784 The source files could not be found; their location must be specified using the /source option to restore the feature. — GetCbsErrorMsg
2023-12-25 16:00:22, Error DISM DISM Package Manager: PID=4936 TID=6784 Failed processing package changes with session option CbsSessionOptionRepairStoreCorruption — CDISMPackageManager::RestoreHealth(hr:0x800f081f)
2023-12-25 16:00:22, Error DISM DISM Package Manager: PID=4936 TID=6784 The source files could not be found; their location must be specified using the /source option to restore the feature. — GetCbsErrorMsg
Вот не пойму — неужели им так трудно в логах указывать конкретно что не нашел?.
2. Да. Именно так. Только в моем случае выпуск был 4-ый. Хотя ради проверки перебрал 3 выпуска (кроме домашней), поскольку у меня Pro for Workstation.
Еще проблема в том, что билд винды ,после последнего обновления не совпадает с билдом последнего доступного дистрибутива от МС.
Доброго времени! На виндоус 11 не работает батник, размер тот же что и до сжатия.
Ну ладно, всё равно немного места освободил с помощью вашей статьи, спасибо!
Винда стоящая на ssd стает дёрганой, звук при воспроизведение идёт рывками. Совет по поводу сжатия WinSxS через батник — очень вреден!
Очищать папку рекомендую только через командную строку командой ‘Dism.exe /online /cleanup-image /StartComponentCleanup’ — это самый безобидный и безопасный способ.
Подскажите, я так и не поняла как обойти ошибку 740 при попытке очистки папки C:\Windows\WinSxS ?
Пытаюсь освободить место на диске С
ввела win+X и в командной строке ввожу Dism.exe /online /cleanup-image /StartComponentCleanup
но запуск Dism не разрешается
Что делать? мне очень нужно освободить место, помогите пожалуйста
Прош уведомить меня по почте :[email protected]