У цій статті ми поговоримо про каталог WinSxS в Windows 10 і Windows 8.1, причини його постійного зростання і способи очищення. Каталог C: \ Windows\ WinSxS є сховищем компонентів Windows. В цьому каталозі зберігаються dll бібліотеки, бінарні і xml файли, необхідні для установки і роботи тієї чи іншої ролі ОС Windows. При установці оновлень Windows (це відбувається щомісяця), нова версія оновлюваного компонента встановлюється в систему, а стара зберігається в сховищі WinSxS (це необхідно для забезпечення сумісності і можливості "відкату" на старі версії компонентів при видаленні проблемного поновлення).
зміст:
- Як дізнатися реальний розмір папки WinSxX в Windows 10 / 8.1
- Очищення сховища компонентів (папки WinSxS) в Windows 10 / 8.1
- Функції на вимогу в Windows 10 і 8.1
- Включаємо NTFS стиснення на папці WinSxS в Windows 10 і 8.1
Як не важко здогадатися, каталог WinSxS згодом буде постійно збільшуватися, причому розмір його не обмежений нічим (хоча на практиці розмір папки WinSxS в Windows 10 / 8.1 рідко перевищує 15-20 Гб.)
Самим природний спосіб зменшити розмір папки WinSxS в Windows 10 і Windows 8 - видалити з системи старі версій компонентів, що залишилися після оновлення системи. Для цього використовується стандартний майстер очищення диска cleanmgr або спеціальні опції команди DISM (див. Нижче).
Порада. У Windows 7 SP 1 можливість видалення старих файлів оновлень для очищення диска доступна тільки після встановлення оновлення окремих програмного забезпечення - KB 2852386.Як дізнатися реальний розмір папки WinSxX в Windows 10 / 8.1
Ще однією особливістю папки WinSxS є наявність в ній великої кількості так званих hard links (Жорстких символьних посилань). Жорстка посилання являє собою повністю рівноправний оригінальному покажчик на файл. Тобто покажчик і вихідний файл можуть мати різні імена і перебувати в межах одного розділу в різних каталогах, але реально вказувати вони будуть на один і той же об'єкт. Саме через наявність жорстких посилань, які включаються до розрахунку загального розміру каталогу, файлові менеджери (і в тому числі Windows Explorer) показують кілька перебільшений розмір папки 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 Мб.
У багатьох користувачів виникає природне запитання чи можна вручну видалити файли з папки WinSxS. Відповідь на це питання - категоричне НІ! Такими діями з великою часткою ймовірності вийти порушити працездатність Windows. І хоча деякі спроби видалення файлів з папки WinSxS можуть бути вдалими, рекомендувати цей спосіб з точки зору потенційної небезпеки для системи не можна.
Зупинимося на найбільш нешкідливих з точки зору системи способах очищення папки WinSxS в Windows 10 і Windows 8.1. це:
- Видалення старих версій компонентів, що залишилися після установки оновлень;
- технологія Features on Demand (Функції на вимогу), що дозволяє видалити невикористовувані компоненти Windows з диска;
- Стиснення файлів в папці WinSxS - спосіб зменшити розмір каталогу WinSxS за рахунок NTFS компресії її вмісту.
Для досягнення максимального результату всі три способи можна використовувати спільно.
Очищення сховища компонентів (папки WinSxS) в Windows 10 / 8.1
На мій погляд найшвидший і простий спосіб очистити місце в сховище компонентів (тобто очистити папку WinSxS), видаливши старі версії компонентів - виконати команду:
Dism.exe / Online / Cleanup-Image / StartComponentCleanup
У параметра / StartComponentCleanup є додаткова опція / ResetBase, що дозволяє видалити всі попередні версії компонентів (після цього ви не зможете видалити встановлені оновлення або Service Pack, а в панелі оновлень appwiz.cpl у поновлення пропаде кнопка "Видалити"). Повністю команда виглядає так:
Dism.exe / Online / Cleanup-Image / StartComponentCleanup / ResetBase
Також ви можете видалити застарілими поновлення з майстра "очищення диска". Виконайте команду cleanmgr c правами адміністратора.
У вікні утиліти виберіть диск і в наступному вікні натисніть кнопку "Очистити системні файли".
Далі виберіть опцію "Файли журналу поновлення Windows" і натисніть Ок для початку очищення. Утиліта очищення диска покаже скільки місця ви можете звільнити, видаливши файли журналу старих оновлень Windows. У моєму прикладі це 427 Мб.
Після закінчення очищення сховища за допомогою DISM перевірте скільки звільнилося місця на диску.
Крім того, за розкладом Windows 10 є спеціальне завдання автоматичного обслуговування, яке виконує ту ж саму операцію, що і dism з ключем StartComponentCleanup, видаляючи всі застарілі поновлення старше 30 днів. Це завдання з ім'ям StartComponentCleanup знаходиться в розділі \ Microsoft \ Windows \ Servicing.
Функції на вимогу в Windows 10 і 8.1
У статті "Безпечне очищення папки WinSxS в Windows Server 2012" ми розглянули функцію Features on Demand (Функції на вимогу), яка надає можливість видалення бінарних файлів невикористовуваних ролей з каталогу WinSxS. Для видалення з диска невикористовуваних ролей існує спеціальний командлет Powershell - Uninstall-WindowsFeature. Однак у випадку з 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
Припустимо, наприклад, що компонент TelnetClient в подальшому нам не знадобиться. Видалимо цей компонент з диска (по суті з каталогу WinSxS) командою:DISM.exe / Online / Disable-Feature / Featurename: TelnetClient / Remove
Якщо ще раз вивести список всіх доступних функцій на вимогу в Windows, ви побачите, що статус компонента зміниться на Disabled with Payload Removed.
Таким чином в Windows можна істотно зменшити розмір папки WinSxS, видаливши з диска невикористовувані компоненти. Єдиний нюанс, це варіант очищення каталогу WinSxS підійде для достатньої просунутих користувачів, які розбираються в компонентах Windows 10 і їх призначення.
Включаємо NTFS стиснення на папці WinSxS в Windows 10 і 8.1
Ще один спосіб зменшення розміру каталогу WinSxS в Windows 10 / 8.1 - стиснути вміст каталогу на рівні файлової системи 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. Частина файлів може використовуватися системою, тому якщо запустити команду без параметра / i, стиснення буде зупинено на першому ж файлі, що використовується в даний момент системою. За допомогою Process Explorer можна знайти ім'я процесу, який відкрив цей файл (CTRL + F) і завершити його. Такий підхід до стиснення дуже трудомісткий. Ми лише обмежимося стисненням зайвих файлів (в Windows 10 можна використовувати більш прогресивне LZX стиснення):
compact / s: "% WINDIR% \ WinSxS" / c / a / i *
- Відновимо власника каталогу WinSxS, повернувши TrustedInstaller:
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 за рахунок стиснення зменшився з 5,8 Гб до 4 Гб (приблизно на третину). Непогано, особливо для невеликого за розміром SSD-диска, місце на якому стоїть досить дорого.
На що може вплинути стиснення каталогу WinSxS.
Windows працює із стисненими файлами в прозорому режимі, однак при обробці таких файлів, їй може знадобитися додатковий час на їх декомпресію / компресію, це означає деяке уповільнення процесів установки компонентів Windows або оновлень. Однак для сучасних процесорів (CPU) компресія / декомпресія файлів виконується практично миттєво, так що реального зменшення швидкості користувач може навіть не помітити. Мало того, якщо жорсткий диск повільний, а процесор досить швидкий - при стисненні можна помітити навіть збільшення швидкості роботи з диском! Відзначимо, що при включенні ntfs-стиснення всього вмісту папки WinSxS, за рахунок використання жорстких посилань виявляться стисненими ряд файлів в інших системних каталогах.
Зазначені команди можна виконувати окремо (так простіше контролювати успішність виконання кожної з них), або можна об'єднати всі операції в один файл сценарію, при запуску якого почне виконуватися процедура стиснення даних в папці WinSxS. Завантажити готовий командний файл можна тут: compress_winsxs.bat
Даний скрипт можна використовувати постійно в процесі експлуатації системи, тому що після установки нових оновлень і програм в каталозі WinSxS будуть з'являтися нові "стиснені" файли.
Примітка. У мережі гуляє ще один скрипт, що дозволяє зменшити розмір папки WinSxS - WinSxSLite (Від Christian Bering Boegh). Даний скрипт згідно з інформацією розробника шукає на диску найостанніші файли бібліотек і створює посилання на них з усіх попередніх версій і видаляє неактуальні версії. Вважаємо за необхідне відмовити наших читачів від використання скрипта WinSxSLite, тому що незважаючи на досить розумну ідею, результат його виконання є непередбачуваним, і, не дивлячись, на зменшення розміру каталогу WinSxS, частина функціоналу Windows перестає працювати.