Как уменьшить размер папки WinSxS в Windows 8 | Windows для системных администраторов

Как уменьшить размер папки WinSxS в Windows 8

В этой статье мы поговорим о каталоге WinSxS и Windows 8, причинах его постоянного роста и способах очистки. Каталог C:\windows\WinSxS является хранилищем компонентов Windows. В этом каталоге  содержатся dll библиотеки, бинарные и xml файлы, необходимые для установки и работы той или иной роли ОС Windows. При установке обновлений ОС, новая версия обновляемого компонента устанавливается в систему, а старая сохраняется в хранилище WinSxS (по словам Microsoft это необходимо для обеспечения совместимости и возможности «отката» на старые версии компонентов).

Как не трудно догадаться, каталог WinSxS со временем будет постоянно увеличиваться, причем размер его не ограничен ничем. Ситуация усугубляется тем, что какой либо возможности управлять или влиять на этот процесс не предусмотрено.

Самым естественным способ уменьшить размер папки  WinSxS в Windows 8 могла бы быть возможность удаления из системы старых версий компонентов, однако инструмента для этих целей Microsoft пока не предоставила.

Совет. Благодаря обновлению KB 2852386 в Windows 7 SP 1 можно уменьшить размер папки WinSxS за счет удаления устаревших обновления.

Как уменьшить размер папки winsxs в windows 8

Еще одной основной особенностью папки WinSxS является наличие в ней большого количества так называемых  hard links (жестких символьных ссылок). Жесткая ссылка представляет собой полностью равноправный оригинальному указатель на файл. Т.е. указатель и исходный файл могут иметь разные имена и находиться в пределах одного раздела в разных каталогах, но реально указывать они будут на один и тот же объект. Именно из-за наличия жестких ссылок, которые включаются в расчет общего размера каталога,  файловые менеджеры (и в том числе Windows Explorer) показывают несколько преувеличенный размер папки WinSxS. Узнать реальный (без учета жестких ссылок) размер папки WinSxS можно с помощью утилиты SysInternal  du:

 du -v c:\windows\winSXS

Получить реальный размер папки winsxs

У многих пользователей возникает естественный вопрос можно ли вручную удалить файлы из папки WinSxS. Ответ на этот вопрос – категоричное НЕТ! Такими действиями с большой долей вероятности получиться нарушить работоспособность Windows 8. И хотя некоторые попытки удаления файлов из папки WinSxS могут быть удачными, рекомендовать этот способ с точки зрения потенциальной опасности для системы нельзя.

Остановимся на наиболее безвредных с точки зрения системы способах очистки папки WinSxS в Windows 8. Это:

  • Технология Features on Demand,  позволяющая удалить неиспользуемые компоненты Windows 8 с диска
  • Сжатие файлов в папке WinSxS – способ уменьшить размер каталога  WinSxS  за счет NTFS компрессии ее содержимого

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

Features on Demand в Windows 8


В статье «Безопасная очистка папки WinSxS в Windows Server 2012» мы рассмотрели новую функцию Features on Demand, предоставляющую возможность удаления бинарных файлов неиспользуемых ролей из каталога WinSxS. Для удаления с диска неиспользуемых ролей существует специальный командлет Powershell — Uninstall-WindowsFeature. Однако в случае с Windows 8 не все так просто. Дело в том, что командлет Uninstall-WindowsFeature в Windows 8 отсутствует. А технология Features on Demand реализуется только с помощью DISM или командлета DISM PowerShell. Кроме того, важно знать, что команда DISM в отличии от командлета Uninstall-WindowsFeature не анализирует зависимости пакетов друг от друга.  Так что при удалении пакета Windows с помощью DISM будет удален только указанный в команде компонент, а все зависимые от него пакеты останутся в системе. Именно по этой причине для удаления ролей с диска в Windows Server 2012 не стоит использовать DISM, т.к. есть гораздо более удобное и функциональное средство.

Полный список доступных функций в Windows 8  можно получить с помощью команды:

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

windows 8 получить список компонентов на диске в каталоге WINSXS

Предположим, например, что служба TelnetServer в дальнейшем нам не понадобится. Удалим ее полностью с диска (по сути из каталога WinSxS) командой:

DISM.exe /Online /Disable-Feature /Featurename:TelnetServer /Remove

Удалям с диска компоненты windows 8

Если еще раз вывести список всех доступных функций Windows 8, вы увидите, что статус компонента изменится на Disabled with Payload Removed.

Таким образом в Windows 8 можно существенно уменьшить размер папки WinSxS, удалив с диска неиспользуемые компоненты.  Единственный нюанс, это вариант очистки каталога WinSxS  подойдет для достаточной продвинутых пользователей, которые разбираются в компонентах и их назначении Windows 8.

Сжимаем содержимое папки WinSxS в Windows 8


Еще один способ уменьшения размера каталога WinSxS в Windows 8 – сжать содержимое каталога на уровне файловой системы 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 (в дальнейшем этот бэкап понадобиться для восстановления оригинальных 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 и все его содержимое с помощью команды compact. Часть файлов может использоваться системой, поэтому если запустить команду без параметра /i, сжатие будет остановлено на первом же файле, используемом в настоящий момент системой. С помощью Process Explorer можно найти имя процесса, открывшего данный файл (CTRL+F) и завершить его. Тем самым можно добиться максимальной степени сжатия. Мы лишь ограничимся сжатием неиспользуемых файлов.
    compact /s:"%WINDIR%\WinSxS" /c /a /i *

    Сжимаем содержимое каталога winsxs

  7. Восстановим владельца каталога WinSxS на TrustedInstaller
    icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t
  8. Восстановим оригинальные списки доступа ACL на каталог WinSxS
    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 8 работает со сжатыми файлами в прозрачном режиме, однако при обработке таких файлов, ей может понадобиться дополнительное время на их декомпрессию/компрессию, это означает некоторое замедление  процессов установки компонентов Windows или обновлений. Однако для современного CPU эти процессы выполняются практически мгновенно, так что реального уменьшения скорости пользователь может даже не заметить. Мало того, если жесткий диск медленный, а процессор достаточно быстрый – при сжатии можно заметить даже увеличение скорости работы! Отметим, что при включении ntfs-сжатия всего содержимого папки WinSxS, за счет использования жестких ссылок  окажутся сжатыми ряд файлов в других системных каталогах.

Указанные команды можно выполнять по отдельности (так проще контролировать успешность выполнения каждой из них), либо можно объединить все операции в один файл сценария, запустив который запуститься описанный процедура сжатия данных в папке WinSxS. Скачать готовый командный файл можно тут: compress_winsxs.bat

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

Примечание. На просторах сети гуляет еще один скрипт, позволяющий уменьшить размер папки WinSxS —   WinSxSLite (от Christian Bering Boegh ). Данный скрипт согласно информации разработчика ищет на диске самые последние файлы библиотек и создает ссылки на них со всех предыдущих версий и удаляет неактуальные версии. Считаем необходимым отговорить наших читателей от использования скрипта WinSxSLite, т.к. несмотря на довольно толковую идею, результат его  выполнения является непредсказуемым, и, несмотря, на уменьшение размера каталога WinSxS, часть функционала Windows 8 перестает работать.
Еще записи по теме: Windows 8
Понравилась статья? Скажи спасибо и расскажи друзьям!
Назад:
Вперед:

Комментариев: 6

Оставить комментарий
  1. Роман | 13.08.2013

    Отлично, работает!!!
    Воспользовался bat-ником, и размер папки WinSxS уменьшился (на диске) с 9,7 до 6,5 Гб.! Для меня критично, т.к. системный раздел всего 30Гб, а прожорливой Win8х64 этого, как оказалось, маловато…
    Думаю, раз в месяц запуска bat-ника будет достаточно, чтобы держать разрастающийся WinSxS «в узде».
    СПАСИБО!

    Ответить
    • itpro | 19.08.2013

      Пожалуйста!

      Ответить
  2. MonoStas | 20.08.2013

    Ненавижу винду, но к сожалению пока не могу перейти окончательно на линуху из за некоторого софта.
    Ах да, о чем это я. Спасибо вам огромное за батник. +2,5 гига свободного места. на ssd 128 крайне важно. Еще раз благодарю
     
     

    Ответить
  3. MantGus | 21.08.2013

    Ура!! Батник за счет сжатия папки WinSxS сэкономил мне целых 5 гигов. Автор красавчик!

    Ответить
  4. Дмитрий | 31.08.2013

    Я добавил в конец скрипта еще строку del «%WINDIR%\WinSxS_NTFS.acl»у меня это получается еще 31Мб экономии :)

    Ответить
    • itpro | 02.09.2013

      :) Вы правы, этот файл получается достаточно большим. Все таки, если нет бекап системе нет, рекомендую удалить этот файл только после того, как убедитесь, что система работает корректно.

      Ответить
Полные правила комментирования на сайте winitpro.ru. Вопросы, не связанные с содержимым статьи или ее обсуждением удаляются.

Сказать Спасибо! можно на этой странице или (еще лучше) поделиться с друзями ссылкой на понравившуюся статью в любимой социальной сети(специально для этого на сайте присуствуют кнопки популярных соц. сетей).

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не робот( Обязательно отметьте)



MAXCACHE: 0.26MB/0.00128 sec