Андрей Смирнов
Время чтения: ~14 мин.
Просмотров: 0

Папка WinSxS: какие функции выполняет и как ее почистить

diskcleanup-96.pngКазалось бы, двебольшие статьи об оптимизации папки WinSxS в Windows 8 должны были исчерпать тему. Но Microsoft внезапно решила порадовать и владельцев Windows 7, для которых я публикую этот рассказ.

Несмотря на многочисленные предостережения, обладатели Windows 7 с маленьким сами знаете чем не оставляют попыток почистить папку WinSxS кривыми способами. Вот вам свеженький пример убийства Windows 7 участником конференции OSZone под ником… xaker 7. Надеюсь, после выхода этой записи таких ужасов будет на порядок меньше.

[+]Сегодня в программе

8 октября 2013 года вышло рекомендуемое обновление KB2852386 только для всех изданий Windows 7 SP1, прошедших проверку подлинности. Оно добавляет долгожданную функцию в утилиту «Очистка диска».

Я думаю, что вы захотите узнать, сколько места сэкономила очистка. Поэтому сейчас откройте свойства диска (а не папки winsxs) и запишите объем свободного пространства (в байтах) или просто сделайте скриншот.

Они предельно просты:

  1. Установите обновление KB2852386 посредством Windows Update (рекомендую) или скачайте в IE пакет из статьи базы знаний.
  2. Выполните cleanmgr в командной строке, запущенной от имени администратора (так будет быстрее).
  3. Найдите в списке опцию «Очистка обновлений Windows».winsxs-cleanup.pngПримечание. Пункт очистки обновлений доступен только в том случае, когда есть файлы, которые можно удалить.
  4. Нажмите ОК и наберитесь терпения, потому что операция займет некоторое время.
  5. По окончании очистки перезагрузитесь и посмотрите в свойствах диска, сколько места освободилось.

Я оченьподробно разбирал весь процесс применительно к Windows 8 и 8.1, поэтому не буду повторяться, а лишь отмечу несколько моментов.

Реализация

Обновление KB2852386 заменяет всего один файл — Scavengeui.dll, в котором реализована вся работа по очистке. Фактически, в утилиту «Очистка диска» добавили вызов функции DISM, доступной в более новых ОС при использовании в утилите DISM.exe параметра /StartComponentCleanup (но не дополнительного ключа /ResetBase).

reduce-winsxs-size-windows7-03_mini_oszone.pngУвеличить рисунок

Так, при каждом запуске утилиты «Очистка диска» в папку %LocalAppData%Temp{GUID} зачем-то копируется содержимое папки %WinDir%System32DISM (причем временная папка не удаляется после завершения операции). После чего с помощью обновленной DLL осуществляется программный вызов функции глубокой очистки непосредственно из утилиты. Впрочем, копирование папки DISM наблюдалось еще до выхода KB2852386.

reduce-winsxs-size-windows7-02_mini_oszone.pngУвеличить рисунок

Неясности

Есть основания полагать, что алгоритм очистки в Windows 7 не совсем такой же, как в Windows 8 и выше с ключом /StartComponentCleanup. В частности, у меня и у читателей пока не выявилосьсжатия файлов, несмотря на идентичность текстового описания в утилите cleanmgr. Проверьте у себя и напишите в комментариях!

Еще один непонятный нюанс — это загадочная фраза в статье базы знаний (перевод – мой):

И нигде не объясняется, от чего зависит эта возможность 🙂 В моем эксперименте у всех обновлений возможность удаления сохранилась, как и должно быть при использовании ключа /StartComponentCleanup в Windows 8 и новее. Возможно, со временем конкретика и появится…

Наконец, не совсем понятно, что мешало реализовать это раньше, и почему обновление появилось именно сейчас. Кстати, перенос очистки в утилиту DISM.exe Windows 7 пока не планируется, что не позволяет обрабатывать автономные образы. Возможно, такой перенос вскрывает целый пласт вопросов поддержки, связанных с обслуживанием образов.

В Windows 8 очистка возложена на отдельное запланированное задание, а в крайнем случае можно воспользоваться утилитой командной строки DISM.exe. В Windows 7 единственный доступный пока способ заключается в создании настроенной конфигурации утилиты «Очистка диска» и добавления полученной команды в планировщик.

В командной строке, от имени администратора, выполните:

:: настройка очистки папки winsxs  REG ADD "HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionExplorerVolumeCachesUpdate Cleanup" /v StateFlags0088 /t REG_DWORD /d 2 /f  :: (необязательно) настройка очистки временных файлов (в частности зачищает временную папку dism)  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"

Запланированное задание «CleanupWinSxS» будет выполняться 1го числа каждого месяца, удаляя файлы, замененные обновлением, вышедшим во второй вторник предыдущего месяца. Число и время запуска вы можете изменить в библиотеке планировщика заданий (taskschd.msc). Для успешного выполнения задания необходимо наличие у пользователя прав администратора.

question-96.jpgПервый день обсуждения очертил круг вопросов. Ответы на большинство из них можно узнать, изучив предыдущие статьи о папке WinSxS, на которые я активно ссылался. Но материал требует внимания и определенного уровня технической подготовки. Поэтому я постараюсь максимально просто разобрать их здесь.

Качать с помощью Windows Update, как я сразу советую в статье. Обновление будет в списке рекомендуемых.

Если вы пытаетесь скачать в браузере и получаете ошибку «Эта версия средства проверки Windows Geniune Advantage более не поддерживается…», убедитесь что:

  1. Для закачки используется Internet Explorer
  2. В Internet Explorer разрешена установка дополнений / элементов ActiveX

При соблюдении этих двух условий средство проверки подлинности не скачивается на ПК, а устанавливается в качестве надстройки браузера и выполняет валидацию.

Это — все официальные способы получения обновления, и другие здесь рассматриваться и обсуждаться не будут.

Нет, но число подпапок и файлов в ней уменьшится, а следовательно и ее объем.

Неиспользуемые файлы обновлений. Эти файлы не участвуют в работе системы, потому что вместо них уже используются файлы из более свежих обновлений.

Объем удаленных файлов зависит от сочетания трех факторов:

  1. Дата установки SP 1 или Windows 7 с SP1, от которого в любом случае ведется учет установленных обновлений. Чем дольше установлена система, тем больше количество и объем предыдущих версий файлов в WinSxS.
  2. Частота обновления компонента. Например, волны ошибки 0xc0000005 связаны с тем, что файлы ядра обновлялись три месяца подряд. При этом после каждого обновления в WinSxS сохранялась предыдущие версии файлов.
  3. Регулярность установки обновлений. Продолжая пример, если автоматическое обновление только что включили после трехмесячного перерыва, в winsxs осядет только один набор файлов, а не три.

Я попробую объяснить на пальцах, максимально упростив технические подробности и сделав некоторые допущения. Представьте, что Microsoft выпускает раз в два месяца обновление файла asdf.dll. Рассмотрим трех пользователей:

  • Михаил установил Windows 7 с SP1 (сразу после его выхода) в феврале 2011 года и включил автоматическую установку обновлений. К октябрю 2013 года вышло 15 обновлений, заменяющих файл asdf.dll. Очистка диска удалила 14 ненужных файлов и оставила один из предыдущего обновления, сохраняя возможность отката.
  • Андрей установил в один день с Михаилом, но сразу отключил автоматическую установку обновлений. Он их ставил вручную, руководствуясь гороскопом, и к октябрю 2013 года сделал это лишь 4 раза. Очистка диска удалила 3 ненужных предыдущих версии файла.
  • Алексей регулярно переустанавливает систему, и последний раз он это сделал в августе 2013 года. К октябрю того же года успело выйти только одно обновление для файла asdf.dll. Очистка диска не удалила ничего, потому что нет предыдущего обновления, к которому можно откатиться.

Все трое в один день выполнили оптимизацию папки WinSxS. Очевидно, у Михаила она была самой большой, а очистка позволила высвободить самый значительный объем дискового пространства.

Так понятно? 🙂

Судя по вопросам и некоторым скриншотам утилиты TreeSize, примеров анализа оказалось недостаточно. Все очень просто: в меню Scan – Select Directory и выберите C:WindowsWinSxS.

how-winsxs-optimization-works05_mini_oszone.pngУвеличить рисунок

Папки со сжатыми файлами помечены синим. Пока что я не видел ни одного факта сжатия в Windows 7.

Почему не работает команда DISM /Online /Cleanup-Image /StartComponentCleanup?

Потому что она для Windows 8 и новее. В Windows 7 используйте очистку диска, следуя инструкциям этой статьи.

Продолжение следует…

У меня к вам примерно те же вопросы, что и после публикации аналогичной статьи о Windows 8. Но учитывая высокий процент владельцев Windows 7, я ожидаю увидеть больше ответов 🙂

Пожалуйста, напишите в комментариях:

  1. Получилось ли у вас оптимизировать папку WinSxS
  2. Сколько места вы сэкономили (перевести байты в гигабайты можно так)
  3. Как давно вы установили систему
  4. Подверглись ли у вас файлы в подпапках WinSxS сжатию в рамках очистки (если сжимаются, покажите скриншот TreeSize)

Если у вас возникли вопросы, я постараюсь ответить на них в комментариях и/или дополнить статью.

Папка WinSxS находится в C:WindowsWinSxS, занимает много места и продолжает расти. В этой папке накапливаются ненужные файлы, например, старые компоненты системы, и чем дольше у вас стоит операционная система, тем больше папка WinSxS.

Почему папка WinSxS растет?

Когда вы устанавливаете любые обновления системы, старые файлы заменяются новыми, а в папке WinSxS на случай багов сохраняются все старые варианты.

Файлы из папки Windows попадают в WinSxS с помощью жестких ссылок, и файловые менеджеры принимают их за реальный объем. Поэтому размеры папки могут отображаться неверно, а на самом деле она, как правило, весит не больше 15ГБ.

Однако если вы хотите почистить свою систему от ненужных файлов, есть несколько способов сделать это.

Очистка обновлений Windows

В командной строке нужно набрать cleanmgr, и встроенная утилита покажет, сколько места вы можете освободить. Надо просто отметить «Очистка обновлений Windows» и нажать ОК.

cleanup.png

Если вы несколько лет использовали одну операционную систему, наверняка у вас освободиться несколько гигабайтов свободного места.

В следующий раз при перезагрузке, Windows 7 потратит несколько минут на очистку системных файлов, прежде чем вы сможете снова увидеть свой рабочий стол. Если же этой опции у вас нет, наверняка вы давно не обновляли Windows. Установите последние обновления системы, и она появится.

В отличие от семерки, Windows 8 и 8.1 очищают обновления автоматически в Планировщике. Windows очищает папку по расписанию с помощью задания Microsoft – Windows – Servicing – StartComponentCleanup, которое автоматически запускается в фоновом режиме и удаляет компоненты через 30 дней после того, как вы установили обновления.

startcomponentcleanup-scheduled-task-520x302.png

Если вы хотите удалять обновления вручную, откройте «Очистку диска», отметьте «Очистку обновлений Windows» и нажмите ОК.

В ОС Windows 8.1 реализовано еще больше возможностей для самостоятельного удаления файлов. Там можно удалить все предыдущие версии, даже когда с момента установки новых еще не прошло 30 дней. Для этого надо запустить командную строку от имени администратора и ввести нужные команды.

Например, одна команда удаляет все версии обновлений без 30 дней ожидания:

DISM.exe /online /Cleanup-Image /StartComponentCleanup

Другая удаляет файлы, нужные для удаления пакетов обновлений. После ввода этой команды вы не сможете удалить установленные пакеты обновлений:

DISM.exe /online /Cleanup-Image /SPSuperseded

Еще одна команда удалит все старые версии каждого компонента. После этого вы не сможете удалить все установленные пакеты обновлений:

DISM.exe /online /Cleanup-Image /StartComponentCleanup /ResetBase

Удаление компонентов по требованию

Современные версии Windows позволяют включать компоненты системы по требованию. Список функций находится в окне «Компоненты Windows», в которое можно попасть из панели управления.

Даже если вы не установили какие-то из них, то есть, они не отмечены флажком, компоненты все равно хранятся на вашем жестком диске в папке WinSxS. Если вы захотите их установить, не придется ничего скачивать, можно сделать это из папки.

turn-windows-features-on-or-off-520x368.png

Однако, даже неиспользуемые компоненты занимают место на жестком диске, и если вам очень важно свободное место, можете их удалить.

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

Чтобы удалить компоненты, откройте командную строку и вбейте следующую команду:

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

Вы увидите разные компоненты и их состояние.

windows-features-name-and-state-520x290.png

Чтобы удалить функцию из системы, можно использовать следующую комнду, заменив NAME на название функции, которую вы хотите удалить.

DISM.exe /Online /Disable-Feature /featurename:NAME /Remove

remove-windows-feature-from-disk-520x283.png

Если вы выполните команду / GetFeatures еще раз, вы увидите, что функция сменила статус на: «Disabled with Payload Removed» («Отключено с удалением полезных файлов») вместо просто «Disabled» («Отключено»).

Многие обладатели Windows Vista и 7 наверняка сталкивались с тем, что папка Windows c ходом времени разрастается как на дрожжах. Я мирился с этим до тех пор, пока 40-гиговый раздел с системой не начал периодически выдавать мне сообщения о том, что свободное место на нем заканчивается. Я нашел один чудесный инструмент, магия которого позволяет уменьшить размер папки winsxs без потери производительности/стабильности/данных. Сначала я проделал все описанное под катом на своем домашнем буке, а сейчас для чистоты эксперимента повторю на рабочем.

0. Немножко теории

Вообще о том, как Windows использует пространство системного диска, сказано немало, поэтому здесь буду краток.pagefile.sys — файл подкачки. Можно отключить при большом размере оперативки, можно отрегулировать размер вручную.hiberfil.sys — файл, в который сохраняется снимок(снэпшот) оперативной памяти при «засыпании» компьютера. В меню «Очистка диска» кроме всего прочего есть пунктик «Очистка файлов режима гибернации». Если вы этим режимом не пользуетесь, можете очищать. Если же вы регулярно «засыпаете» свой комп/ноут, то, очистив этот файл, вам придется воспользоваться вот этим советом, или попросту ввести в командной строке powercfg -h on && shutdown -r. Личные папки пользователей (Мои документы, Рабочий Стол, Appdata, Главное меню и проч.) можно безболезненно перенести в другое место как через свойства нужных папок, так и через regedit или групповые политики. Это разговор отдельный, здесь я его рассматривать не буду. Нужно отметить, что любые апдейты и апгрейды в системе Windows обратимы, то есть установив Vista Service Pack 2 (6.0.6002), вы можете откатиться назад до 6.0.6001, а потом и до исходной сборки. Для того, чтобы сделать все установленные в системе обновления необратимыми, необходимо воспользоваться двумя системными утилитами:vsp1cln.exe — подметает мусор после установки Vista SP1.compcln.exe — делает то же самое для SP2. Система создает точки восстановления по требованию и автоматически при установке драйверов, важных обновлений, по расписанию или по требованию. Восстановление использует до 15% пространства на каждом из дисков, на котором оно задействовано. Его можно отключить, можно через «Очистку диска» на вкладке «Дополнительно» оставить только последнюю точку восстановления для экономии места. Про папку winsxs разработчиками была написана целая статья о том, что мол, это основное хранилище ОС, а все остальные системные файлы — это типа хардлинки, бла-бла-бла…, и да, примите как божий дар то, что со временем размер папки будет только увеличиваться.

1. Подготовка

Windows Vista Business 32-bit. Сначала я выяснил размер папки winsxs — около 4,5 гигов. Далее методично были установлены все важные и рекомендуемые обновления по состоянию на 8.10.2009, включая SP1 и SP2. После завршения всех процедур, я скачал чудесный Scanner, чтобы нагляно оценить масштаб бедствия. Установка обновлений преобразила папку Windows. Теперь по порядку: — vsp1cln.exe; — compcln.exe — работала около пяти минут. После этого я делаю контрольную точку восстановления(мало ли что), избавляюсь от предыдущих, и перехожу к самому важному этапу на сегодня.

2. Winsxslite

Это даже не программа — это .bat файл, уменьшающий размер папки winsxs. Он написан неким Christian Bering Boegh и распространяется «as is», что лично у меня вызвало некоторые подозрения, развеять которые мог лишь успешно отработавший скрипт. По ссылке можно найти последнюю версию скрипта (1.86) с комментариями автора. Работа скрипта включает две фазы: 1. Поиск в папках Program Files и Windows файлов, идентичных файлам в winsxs. 2. Замена старых версий файла в winsxs жесткими ссылками на более новые версии файла. Работать можно как с онлайн-системой (то есть с работающей ОС) так и с образом ОС. Работа с онлайн-системой выглядит так: — Phase 1 scan; — Phase 1 apply; — Перезагрузка; — Phase 2 scan; — Phase 2 apply; — Перезагрузка. Перезагрузка нужна потому, что к некоторым файлам нет доступа на изменение и скрипт создает TODOlist, данные из которого берутся после перезагрузки. Для работы скрипта используется также конфигурационный файл config.txt, в котором указаны исключения для первой фазы (логи, temp, cache и т.п.), и языковые приоритеты для второй фазы (неиспользуемые файлы локализации заменяются на хардлинки соответствующих файлов других языков), в конфигу по умолчанию прописывается «da-dk=KEEP», что меняется на нужную строку ru-ru=KEEP, uk-ua=KEEP или другую необходимую. Winsxslite будет работать только при наличии следующего ПО: — SubInACL v5.2.3790.1180; — PendMoves v1.1 and MoveFile v1.0; — Ln — Command Line Hardlinks; — Fcmp v1.6 — автор рекомендует пользоваться именно 1.6; — MD5File; — StringConverter v1.2. Все установленные файлы я сложил в папку с winsxslite. Если кому скучно выполнять все процедуры самому, вот ссылка. Там собственно winsxslite, всё необходимое ПО плюс конфиг с исправленным da-dk. Конфиг можно удалить. При первом запуске winsxslite будет создан дефолтный конфиг и help-файл.

3. Результаты

Взглянув на результаты, я понял, что совершил стратегическую ошибку — я взял для теста ноутбук, который почти не использовался в работе. То есть, возраст ОС составлял от силы пару дней, за ноутбуком фактически никто не работал. На домашнем же компе результаты были более ощутимыми. Там папка winsxs похудела гигов на 8, но до тех же самых 14,8. Автор пишет, что эксплорер не выдает реального размера этой папки, и в его утилите можно узнать истинный размер. Как бы то ни было, оба пациента не пострадали, а winsxslite оказался отличным подспорьем в деле уменьшения объема ненасытной винды. В заключение хотелось бы отметить, что обе фазы скрипта могут занять от одного до двух часов работы компьютера. P.S. Статья про использование дискового пространство в Win7. Никакие сторонние программы для кастрации системы (типа vLite) не использовались.Используемые источники:

  • http://www.outsidethebox.ms/15444/
  • https://lifehacker.ru/kak-umenshit-razmer-papki-winsxs-v-windows-7-i-8/
  • https://habr.com/post/72427/

Рейтинг автора
5
Подборку подготовил
Андрей Ульянов
Наш эксперт
Написано статей
168
Ссылка на основную публикацию
Похожие публикации