Перш ніж говорити про безпечний спосіб очищення папки WinSxS в Windows Server 2012, спробуємо зрозуміти, що ж це за папка така, що в ній зберігається і чому з часом вона збільшується в розмірах.

Якщо ви пам’ятаєте, при встановленні додаткових компонентів в Windows Server 2003 майстер установки вимагав вставити в CD-Rom інсталяційний диск, або вказати шлях до каталогу з дистрибутивом Windows Server 2003. У Windows Server 2008 Microsoft вирішила змінити підхід до установки додаткових ролей і можливостей Windows. Тепер все бінарні файли, необхідні для розгортання будь-якої ролі, зберігаються в каталозі C: Windows WinSxS (WinSxS – Windows поруч). Це означає, що при установці будь-якої додаткової ролі тепер немає необхідності шукати і підключати до сервера диск з дистрибутивом. Природно, при такому підході для ОС вимагає набагато більшого місця на диску. Потрібно розуміти, що в каталозі WinSXS міститися ключові компоненти системи, тому видаляти з неї щось вручну ні в якому разі не можна. Чому ж розмір папки WinSXS постійно зростає? Відповідь проста – оновлення. При установці оновлень різних компонентів в каталозі WinSXS залишаються і стара і нова версія оновленого компонента. Завдяки такій архітектурі, ми в будь-який момент можемо безпечно видалити будь-який встановлений оновлення і відкотитися на стару версію компонента.

А що ж робити, якщо система запущена і працює, розгортати додаткові ролі не планується, а місця на диску не вистачає? Адже нелогічно, що на системному диску кілька гігабайт зайнято збірками, які ніколи не будуть потрібні! У Windows Server 2008, на жаль, видалити дані файли без шкоди системі досить складно. Однак, у новій серверної ОС – Windows Server 2012, Microsft вирішила виправити цей недолік і впровадила нову функцію під назвою Особливості на вимогу.

Функції на вимогу в Windows Server 2012

функція Features on Demand (функції на вимогу) дозволяє зменшити розмір, що займається системою на диску, надаючи можливість вилучень бінарних файлів невикористовуваних ролей з папки WinSxS. У тому випадку, якщо в подальшому виникне необхідність повернути раніше віддалену роль, то всі необхідні для роботи ролей файли можна витягти з образу дистрибутива Windows Server 2012, служби Windows Update або мережевого ресурсу з оригінальним вмістом WinSxS.

За допомогою наступної команди Powershell можна отримати інформацію про всі ролях системи:

Get-WindowsFeature

Виведення списку всіх ролей і функцій в Windows Server 2012

Як ви бачите, в колонці Встановити штат відображається стан кожної ролі. Можливі статуси:

  • Встановлено: Роль або функція встановлена ​​і зараз використовується системою
  • Доступні: Роль на сервері не встановлена, проте на диску присутні всі необхідні файли, що дозволяють в будь-який момент встановити / активувати цю роль.
  • Вилучено: – роль або функція на сервері не встановлена, файли, необхідні для її установки видалені з диска

Відповідно, при установці будь-якій ролі через GUI або Powershell (команда Install-WindowsFeature) її статус з Available змінюється на Installed, а при видаленні (команда Uninstall-WindowsFeature) навпаки.

Повністю видалити роль з диска (з папки WinSxS) можна тільки через Powershell. Для цього потрібно використовувати спеціальний аргумент команди Uninstall-WindowsFeatur – Видалити.

Наприклад, щоб видалити бінарні файли ролі DHCP-сервера, виконайте команду:

Uninstall-WindowsFeature –Name DHCP –Remove

А щоб видалити файли служби каталогів Active Directory Domain Services:

Uninstall-WindowsFeature AD-Domain-Services -Remove

Видалити з диска роль Active Directory

За допомогою конвеєрів Powershell можна написати більш складну команду, яка видалить з диска інсталяційні файли всіх невикористовуваних ролей і функцій Windows Server:

Get-WindowsFeature | Where-Object {$_.InstallState -Eq “Available”} | Uninstall-WindowsFeature -Remove

Очищаємо папку wisxs в windows server 2012 видаливши невикористовувані ролі

У нашому прикладі, за умови, що була встановлена ​​тільки роль файл-сервера, розмір папки WinSxS зменшився з 8 до 5.2 Гб. Непогано, правда? Тим більше, що для очищення папки WinSxS нам потрібна була всього одна команда.

Після очищення розмір папки winsxs зменшився на 3 Гб

Установка віддалених ролей і функцій в Windows Server 2012

Розглянемо ще один сценарій, який передбачає, що вам буде потрібно встановити якусь роль Windows Server 2012, дистрибутив якої був вилучений з каталогу WinSxS. Відновити роль можна кількома способами: за допомогою GUI Server Manager або за допомогою Powershell.

Перш, ніж приступити до відновлення файлів ролей, необхідно визначити індекс встановленої редакції Windows Server 2012. Нам знадобляться диск з дистрибутивом Windows Server 2012 (а точніше файл образу install.wim, що знаходиться в каталозі sources). Виконайте наступну Powershell команду:

Get-windowsimage –imagepath <путь к файлу wim>sourcesinstall.wim

windows2012 index різних версій

Знайдіть версію встановленого у вас Windows Server і запам’ятайте її індекс (значення в рядку Index). У нашому прикладі це Windows Server 2012 Datacenter з індексом 4. (Ми вже розглядали особливості роботи з різними редакціями Windows 2012 у одному дистрибутиві в статті «Інтеграція драйверів в інсталяційний диск Windows Server 2012»).

Ту ж саму операцію можна виконати за допомогою утиліти Dism:

dism.exe /get-imageinfo /imagefile:d:sourcesinstall.wim

Висновок версій win2012 допомогою dism

Встановлюємо віддалену роль за допомогою Server Manager

Відкрийте консоль Server Manager і запустіть майстер установки ролей (Add Roles and Features. Виберіть роль або функцію, яку необхідно встановити. Майстер попередить, що деякі файли, необхідні для установки даної ролі відсутні і потрібно вказати альтернативний шлях до цього дистрибутива. Натисніть кнопку Вкажіть альтернативний шлях до джерела.

specify alternative source path: відновлюємо роль

В поле Path вкажіть повний шлях до файлу intall.wim і індекс встановленої редакції ОС в такому форматі:

WIM:D:SourcesInstall.wim:4

Шлях до wim файлу

У разі необхідності, в цьому рядку можна вказати мережевий шлях до каталогу з файлом WIM або мережевий шлях до каталогу WinSxS. Крім того шлях до даного каталогу можна вказати відразу для групи серверів за допомогою групової політики ( Конфігурація комп’ютера -> Адміністративні шаблони -> Система -> Вкажіть параметри додаткової установки компонента та відновлення компонентів). Останній варіант зручний в разі великої кількості інсталяцій серверів з Windows Server 2012, адже сумарний ефект від очищення папки WinSxS може досягати сотень Гб.

windows 2012: задаємо шлях до сховища компонентів за допомогою групової політики

Після того, як буде натиснута кнопка OK, всі необхідні файли для встановлюваної ролі будуть скопійовані в каталог WinSxS.

Відновлення видаленої ролі Windows 2012 за допомогою Powershell

Ту ж саму операцію можна виконати за допомогою всього однієї команди Powershell. Припустимо, нам потрібно відновити вилучені файли ролі ADDS. Виконаємо наступну команду:

Install-WindowsFeature AD-Domain-Services -Source WIM: WIM:D:SourcesInstall.wim:4

Відновлення видаленої ролі за допомогою powershell

Отже, в цій статті ми розібралися з новою функцією Windows Server 2012 під назву Features on Demand, що дозволяє видалити дистрибутиви бінарних файлів невикористовуваних серверних ролей з каталогу WinSxS. У разі необхідності віддалену роль можна досить просто відновити: всі, що для цього знадобиться – дистрибутив Windows Server 2012.

У Windows 8 функція Feautere on Demand працює трохи по іншому, справа в тому, що використовуваний нами командлет Powershell просто напросто відсутність. Його аналогом (не таким зручним) є команда DISM з параметром / Disable-Feature. Крім того можна просто стиснути вміст каталогу Winsxs. Подробиці в статті Як зменшити розмір папки Winsxs в Windows 8

Автоматичне очищення WinSxS за допомогою Cleanmgr

Для автоматичного очищення файлів оновлень в WinSxs і тимчасових файлів можна використовувати стандартну утиліту Disk Cleanup (cleanmgr.exe). Використовуйте такий скрипт (thnks to Alex Kornev)

:: параметры очистки каталога winsxs
REG ADD "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerVolumeCachesUpdate Cleanup" /v StateFlags0088 /t REG_DWORD /d 2 /f
:: параметры очистки временных объектов
REG ADD "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerVolumeCachesTemporary Files" /v StateFlags0088 /t REG_DWORD /d 2 /f
:: создание запланированной задачи "CleanupWinSxS"
schtasks /Create /TN CleanupWinSxS /RL Highest /SC monthly /TR "cleanmgr /sagerun:88"

Даний скрипт створить в планувальнику завдання щомісячної очищення папки WinSxS за допомогою утиліти cleanmgr. Завдання буде виконуватися автоматично 1 раз на місяць 1-го числа без безпосередньої участі. Час запуску завдання буде відповідати часу створення завдання.

Щоб задати своє час запуску, додайте в останній рядок ключ:

/ST HH:mm
где
HH - часы в формате 24h
mm - минуты

Leave a Reply

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