У цій статті ми поговоримо про каталог WinSxS в Windows 10 і Windows 8.1, причини його постійного зростання і способи очищення. Каталог C.: windows WinSxS є сховищем компонентів Windows. В цьому каталозі зберігаються dll бібліотеки, бінарні і xml файли, необхідні для установки і роботи тієї чи іншої ролі ОС Windows. При установці оновлень Windows (це відбувається щомісяця), нова версія оновлюваного компонента встановлюється в систему, а стара зберігається в сховищі WinSxS (це необхідно для забезпечення сумісності і можливості «відкату» на старі версії компонентів при видаленні проблемного поновлення).

Як не важко здогадатися, каталог WinSxS згодом буде постійно збільшуватися, причому розмір його не обмежений нічим (хоча на практиці розмір папки WinSxS в Windows 10 / 8.1 рідко перевищує 15-20 Гб.)

каталог WinSxS в windows10

Самим природний спосіб зменшити розмір папки WinSxS в Windows 10 і Windows 8 – видалити з системи старі версій компонентів, що залишилися після оновлення системи. Для цього використовується стандартний майстер очищення диска cleanmgr або спеціальні опції команди DISM (див. Нижче).

Як дізнатися реальний розмір папки WinSxX в Windows 10 / 8.1

Ще однією особливістю папки WinSxS є наявність в ній великої кількості так званих важко посилання (Жорстких символьних посилань). Жорстка посилання являє собою повністю рівноправний оригінальному покажчик на файл. Тобто покажчик і вихідний файл можуть мати різні імена і перебувати в межах одного розділу в різних каталогах, але реально вказувати вони будуть на один і той же об’єкт. Саме через наявність жорстких посилань, які включаються до розрахунку загального розміру каталогу, файлові менеджери (і в тому числі Windows Explorer) показують кілька перебільшений розмір папки WinSxS. Дізнатися реальний (без урахування жорстких посилань) розмір папки WinSxS можна за допомогою утиліти SysInternal з:

 du -v c:windowswinSXS

Отримати реальний розмір папки winsxs

Так само ви можете проаналізувати розмір сховища компонентів (папку WinSxS) за допомогою команди DISM:

Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore

Dism.exe Очищення 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 Мб.

У багатьох користувачів виникає природне запитання чи можна вручну видалити файли з папки WinSxS. Відповідь на це питання – категоричне НІ! Такими діями з великою часткою ймовірності вийти порушити працездатність Windows. І хоча деякі спроби видалення файлів з папки WinSxS можуть бути вдалими, рекомендувати цей спосіб з точки зору потенційної небезпеки для системи не можна.

Зупинимося на найбільш нешкідливих з точки зору системи способах очищення папки WinSxS в Windows 10 і Windows 8.1. це:

  • Видалення старих версій компонентів, Що залишилися після установки оновлень;
  • технологія Features на Попит (Функції на вимогу), що дозволяє видалити невикористовувані компоненти Windows з диска;
  • Стиснення файлів в папці WinSxS – спосіб зменшити розмір каталогу WinSxS за рахунок NTFS компресії її вмісту.

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

Очищення сховища компонентів (папки WinSxS) в Windows 10 / 8.1

На мій погляд найшвидший і простий спосіб очистити місце в сховище компонентів (тобто очистити папку WinSxS), видаливши старі версії компонентів – виконати команду:

Dism.exe /Online /Cleanup-Image /StartComponentCleanup

Dism.exe Очищення зображення StartComponentCleanup
У параметра / StartComponentCleanup є додаткова опція / ResetBase, Що дозволяє видалити всі попередні версії компонентів (після цього ви не зможете видалити встановлені оновлення або Service Pack, а в панелі оновлень appwiz.cpl у поновлення пропаде кнопка «Видалити»). Повністю команда виглядає так:

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

Також ви можете видалити застарілими поновлення з майстра «очищення диска». Виконайте команду cleanmgr c правами адміністратора.

У вікні утиліти виберіть диск і в наступному вікні натисніть кнопку «Очистити системні файли».

cleanmgr windows 10 Очистити системні файли

Далі виберіть опцію “Файли журналу оновлення Windows” і натисніть Ок для початку очищення. Утиліта очищення диска покаже скільки місця ви можете звільнити, видаливши файли журналу старих оновлень Windows. У моєму прикладі це 427 Мб.

видалити файли журналу оновлень windows

Після закінчення очищення сховища за допомогою DISM перевірте скільки звільнилося місця на диску.

Крім того, за розкладом Windows 10 є спеціальне завдання автоматичного обслуговування, яке виконує ту ж саму операцію, що і dism з ключем StartComponentCleanup, видаляючи всі застарілі поновлення старше 30 днів. Це завдання з ім’ям StartComponentCleanup знаходиться в розділі Microsoft Windows Servicing.

завдання планувальника StartComponentCleanup - очищення компонентів

Функції на вимогу в Windows 10 і 8.1

У статті «Безпечне очищення папки WinSxS в Windows Server 2012» ми розглянули функцію Особливості на Попит (Функції на вимогу), яка надає можливість видалення бінарних файлів невикористовуваних ролей з каталогу WinSxS. Для видалення з диска невикористовуваних ролей існує спеціальний командлет Powershell – Видаліть-Функція Windows. Однак у випадку з Windows 10 і 8.1 не все так просто. Справа в тому, що командлет Uninstall-WindowsFeature в цих версіях Windows відсутній. А технологія Features on Demand реалізується тільки за допомогою DISM або командлет DISM PowerShell. Крім того, важливо знати, що команда DISM, на відміну від командлет Uninstall-WindowsFeature, не аналізує залежності пакетів один від одного. Так що при видаленні пакета Windows за допомогою DISM буде видалений тільки вказаний в команді компонент, а всі залежні від нього пакети залишаться в системі. Саме з цієї причини для видалення ролей з диска в Windows Server 2012 не варто використовувати DISM, тому що є набагато більш зручне і функціональне засіб.

Повний список доступних функцій в образі Windows 10 /8.1 можна отримати за допомогою команди:
DISM.exe /Online /English /Get-Features /Format:Table
Отримати особливості DISM.exe

Припустимо, наприклад, що компонент TelnetClient в подальшому нам не знадобиться. Видалимо цей компонент з диска (по суті з каталогу WinSxS) командою:
DISM.exe /Online /Disable-Feature /Featurename:TelnetClient /Remove
DISM Disable-Feature Remove

Якщо ще раз вивести список всіх доступних функцій на вимогу в Windows, ви побачите, що статус компонента зміниться на Інваліди з Корисне навантаження Вилучено.

Таким чином в Windows можна істотно зменшити розмір папки WinSxS, видаливши з диска невикористовувані компоненти. Єдиний нюанс, це варіант очищення каталогу WinSxS підійде для достатньої просунутих користувачів, які розбираються в компонентах Windows 10 і їх призначення.

Включаємо NTFS стиснення на папці WinSxS в Windows 10 і 8.1

Ще один спосіб зменшення розміру каталогу WinSxS в Windows 10 / 8.1 – стиснути вміст каталогу на рівні файлової системи NTFS.

Примітка. Як і при будь-якому іншому нестандартному втручанні в конфігурацію системи, вкрай рекомендується виконати повний бекап системи.

  1. Відкрийте командний рядок з правами адміністратора;
  2. Зупиніть і вимкніть служби Windows Installer і Windows Module Installer:
    sc stop msiserver

sc stop TrustedInstaller

sc config msiserver start= disabled

sc config TrustedInstaller start= disabled
  3. Створіть резервну копію списків доступу (ACL) призначених на файли і папки в каталозі WinSxS за допомогою утиліти icacls. Резервна копія ACL являє собою звичайної текстовий файл, в якому вказані всі файли і каталоги і призначені на них NTFS дозволу (надалі цей бекап знадобитися для відновлення оригінальних ACL):
    icacls "%WINDIR%WinSxS" /save "%WINDIR%WinSxS_NTFS.acl" /t

    Копіюємо права доступу ntfs на папку winsxs

  4. Призначимо себе власником папки WinSxS і всіх вкладених каталогів:
    takeown /f "%WINDIR%WinSxS" /r
  5. Надамо свого облікового запису повні права на каталог WinSxS:
    icacls "%WINDIR%WinSxS" /grant "%USERDOMAIN%%USERNAME%":(F) /t
  6. Виконаємо стиснення каталог WinSxS і всього його вмісту за допомогою команди компактний. Частина файлів може використовуватися системою, тому якщо запустити команду без параметра / i, стиснення буде зупинено на першому ж файлі, що використовується в даний момент системою. За допомогою Process Explorer можна знайти ім’я процесу, який відкрив цей файл (CTRL + F) і завершити його. Такий підхід до стиснення дуже трудомісткий. Ми лише обмежимося стисненням зайвих файлів (в Windows 10 можна використовувати більш прогресивне LZX стиснення):
    compact /s:"%WINDIR%WinSxS" /c /a /i *

    Стискаємо вміст каталогу winsxs

  7. Відновимо власника каталогу WinSxS, повернувши TrustedInstaller:
    icacls "%WINDIR%WinSxS" /setowner "NT SERVICETrustedInstaller" /t
  8. Відновимо оригінальні NTFS дозволу на каталог WinSxS з резервної копії ACL: icacls "%WINDIR%" /restore "%WINDIR%WinSxS_NTFS.acl"Відновлюємо власника каталогу winsxs
  9. Відновимо тип запуску служб Windows Installer і Windows Module Installer:
    sc config msiserver start= demand

sc config TrustedInstaller start= demand

Перевіримо поточний розмір каталогу WinSxS:

Розмір папки winsxs в windows 8 зменшився за рахунок стиснення

Як ви бачите, в нашому приклад розмір папки WinSxS за рахунок стиснення зменшився з 5,8 Гб до 4 Гб (приблизно на третину). Непогано, особливо для невеликого за розміром SSD-диска, місце на якому стоїть досить дорого.

На що може вплинути стиснення каталогу WinSxS.

Windows працює із стисненими файлами в прозорому режимі, однак при обробці таких файлів, їй може знадобитися додатковий час на їх декомпресію / компресію, це означає деяке уповільнення процесів установки компонентів Windows або оновлень. Однак для сучасних процесорів (CPU) компресія / декомпресія файлів виконується практично миттєво, так що реального зменшення швидкості користувач може навіть не помітити. Мало того, якщо жорсткий диск повільний, а процесор досить швидкий – при стисненні можна помітити навіть збільшення швидкості роботи з диском! Відзначимо, що при включенні ntfs-стиснення всього вмісту папки WinSxS, за рахунок використання жорстких посилань виявляться стисненими ряд файлів в інших системних каталогах.

Зазначені команди можна виконувати окремо (так простіше контролювати успішність виконання кожної з них), або можна об’єднати всі операції в один файл сценарію, при запуску якого почне виконуватися процедура стиснення даних в папці WinSxS. Завантажити готовий командний файл можна тут: compress_winsxs.bat

Даний скрипт можна використовувати постійно в процесі експлуатації системи, тому що після установки нових оновлень і програм в каталозі WinSxS будуть з’являтися нові «стиснені» файли.

Примітка. У мережі гуляє ще один скрипт, що дозволяє зменшити розмір папки WinSxS – WinSxSLite (Від Christian Bering Boegh). Даний скрипт згідно з інформацією розробника шукає на диску найостанніші файли бібліотек і створює посилання на них з усіх попередніх версій і видаляє неактуальні версії. Вважаємо за необхідне відмовити наших читачів від використання скрипта WinSxSLite, тому що незважаючи на досить розумну ідею, результат його виконання є непередбачуваним, і, не дивлячись, на зменшення розміру каталогу WinSxS, частина функціоналу Windows перестає працювати.

Leave a Reply

Your email address will not be published. Required fields are marked *