Сначала я обозначу два вопроса, которые сильнее всего волнуют людей в контексте папки WinSxS.
Почему папка WinSxS такая большая
На самом деле, она занимает значительно меньше места, чем кажется. Множество файлов из папки Windows проецируется в нее с помощью жестких ссылок именно из папки WinSxS. Да, файловые менеджеры могут показывать размер папки WinSxS в 10GB и более, но лишь потому, что они принимают за чистую монету объем жестких ссылок. В Windows 8.1 этому есть очень наглядное подтверждение.
Почему папка WinSxS постоянно растет
Каждый раз, когда вы устанавливаете обновления, системные файлы заменяются новыми. Их старые версии сохраняются в папке WinSxS, чтобы обеспечить возможность отката в случае проблем с новыми версиями, т.е. устойчивое обслуживание системы. Это приводит к увеличению объема папки WinSxS, хотя на практике ее максимальный размер редко превышает 15GB. Кстати, именно этого аспекта коснулось одно изменение в Windows 8.1, как вы увидите ниже.
Новые возможности системы обслуживания
Вездесущая утилита DISM обзавелась в 8.1 новыми параметрами командной строки, которые я разберу в этой статье. Но сначала – несколько примечаний:
- В моем распоряжении находится английская Windows 8.1 Preview, в которой результаты команд DISM не локализованы, несмотря на русский языковой пакет. Фанатичным приверженцам локализованных ОС придется потерпеть :)
- Поскольку Windows 8.1 Preview установлена недавно, размер папки WinSxS невелик, равно как и выгода от описанных в статье манипуляций. Однако, чем дольше установлена ОС, тем заметнее польза от изменений в системе обслуживания.
- Все команды нужно выполнять от имени администратора, а после очистки - перезагружаться для более аккуратного измерения экономиии дискового пространства.
Готовы? Давайте пойдем от простого к сложному!
Как определить реальный размер папки WinSxS в Windows 8.1
С помощью одного из новых параметров DISM вы можете проанализировать хранилище компонентов, т.е. папку WinSxS.
Dism.exe /Online /Cleanup-Image /AnalyzeComponentStore
Результат команды будет примерно таким:
Увеличить рисунок
Здесь по порядку:
- Размер хранилища компонентов, каким его видит проводник, т.е. без учета жестких ссылок внутри WinSxS.
- Реальный размер хранилища компонентов с учетом жестких ссылок (за исключением ссылок на папку Windows), в том числе:
- Общие файлы с папкой Windows. Эти файлы необходимы для работы системы и ни в коем случае не являются лишними. В моем примере они составляют 87% от размера хранилища, но чем больше обновлений устанавливается, тем ниже этот процент.
- Резервные копии и отключенные компоненты. Эти файлы хранятся на случай проблем с обновленными компонентами или для включения ролей или компонентов. Их можно условно считать лишними, поскольку они не критичны для текущей работы системы.
- Кэш и временные файлы. Эти файлы нужны для быстрой работы системы обслуживания, но не являются абсолютно необходимыми для функционирования Windows.
- Дата последней очистки хранилища. Об очистке во всех подробностях ниже.
- Число пакетов, замененных более новыми, и рекомендация по очистке. Фактически, это – файлы, которые обновились после работы Windows Update. Их можно удалить очисткой хранилища.
Я прямо вижу, как у вас руки чешутся очистить хранилище и высвободить место :)
Как очистить папку WinSxS в Windows 8 и 8.1
Начиная с Windows 8, в ОС заложено три способа очистки.
Команда DISM (рекомендую)
Вы можете очистить хранилище компонентов вручную одной командой.
Dism.exe /Online /Cleanup-Image /StartComponentCleanup
Это самый быстрый путь к выполнению оптимизации (после него двумя следующими способами вы уже ничего не добьетесь).
Утилита «Очистка диска»
Andrey Bayatakov, спасибо за напоминание об этом способе!
Наберите cleanmgr в командной строке, запущенной от имени администратора. Встроенная в Windows утилита для очистки диска покажет, сколько места вы сэкономите, удалив файлы обновлений Windows.
В принципе, утилита делает то же самое, что и ключ /StartComponentCleanup. Однако она весьма фривольна в оценках освобождаемого пространства, и в моих экспериментах ошибка измерялась сотнями мегабайт, причем в обе стороны.
Запланированное задание
Windows выполняет очистку папки winsxs по расписанию с помощью задания Microsoft – Windows – Servicing – StartComponentCleanup.
Конкретной команды не видно, поскольку очистка реализована обработчиком COM-объектов. А отсутствие триггеров свидетельствует о том, что задание работает в рамках вездесущего автоматического обслуживания. Запустив задание из планировщика или командной строки, вы достигаете почти того же эффекта, что и командой DISM с ключом /StartComponentCleanup. Различия таковы:
Игнорируются обновления, установленные в последние 30 дней.
Выдерживается часовая пауза, очистки всех файлов может не произойти.
Выполнив очистку, в Windows 8.1 вы можете снова проанализировать хранилище и оценить изменения.
Увеличить рисунок
Как видите, в моем случае очистка 10 пакетов позволила сэкономить 60MB, что не так уж и много в масштабах папки. Однако можно почистить еще :)
Как удалить все старые версии компонентов из папки WinSxS в Windows 8.1
Во времена Windows XP был очень популярен вопрос, можно ли удалять папки $NTUninstallKBxxxxxx$ из папки Windows. Помните такое?
В Windows 8.1 появилась аналогичная возможность, хотя реализована она совсем иначе ввиду глобальных различий в системах обслуживания 8.1 и XP.
Команда для удаления
Начиная с Windows 8.1, у параметра /StartComponentCleanup есть дополнительный ключ /ResetBase, с помощью которого можно удалить все предыдущие версии компонентов. Этот ключ не задействован в запланированном задании.
Внимание! Удаление предыдущих версий компонентов лишает вас возможности удалить установленные обновления и пакеты исправлений (Service Packs), но не блокирует установку будущих обновлений.
Это предупреждение вовсе не дежурное, если вспомнить недавнюю ошибку 0xc0000005 после KB2859537, от которой плакал горючими слезами Рунет. Так или иначе, волшебная команда:
Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase
Очевидно, выигрыш дискового пространства зависит как от количества зачищаемых обновлений, так и от объема замененных ими компонентов. В моем примере удалось высвободить еще около 24MB.
Увеличить рисунок
Что происходит при удалении всех предыдущих версий компонентов
Рассказ об этом перенесен в статью, которая раскрывает подноготную оптимизации папки WinSxS.
Описанные выше нововведения в Windows 8.1 не являются секретом, поскольку задокументированы в библиотеке TechNet (пока только на английском языке). Причем объяснения там выгодно отличаются от типичной сухой документации - чувствувется перо Джозефа Конвея (Joseph Conway), главнoго источника сведений системе обслуживания Windows, который, к сожалению, недавно объявил о прекращении публикаций в своем блоге.
Сжатие компонентов в папке WinSxS (тайное знание)
Однако в официальной документации практически нет информации о том, что с целью экономии дискового пространства для хранилища компонентов в Windows 8 и выше применяется сжатие. Я выделю несколько известных мне моментов:
- Сжатие применяется к файлам, которые не использует операционная система. К ним относятся предыдущие версии компонентов и отключенные компоненты. Этим, видимо, и объясняется не столь существенный выигрыш от удаления предыдущих версий с параметром /ResetBase.
- Используется сжатие NTFS. По неподтвержденной пока информации, в Windows 8.1 используется алгоритм разностного сжатия (delta compression), который превосходит по эффективности сжатие NTFS. Вероятно, этот алгоритм опирается на блоки данных.
- Экономия дискового пространства может быть весьма существенной в некоторых сценариях. Так, на установке Windows Server Core 2012 R2 Preview благодаря сжатию высвобождается около 20% места, если исключить из уравнения файлы подкачки и гибернации. Экономия достигается за счет сжатия компонентов отключенных ролей сервера.
Возможно, со временем Microsoft выдаст в документации или блогах команд больше информации о сжатии в Windows 8.1. А пока механизм сжатия я описал в статье, где собраны все технические тонкости: см. Какие файлы сжимаются и почему
.
С чем связаны изменения в системе обслуживания Windows 8 и 8.1
Конечно, точный ответ на этот вопрос может дать только Microsoft, поэтому я просто поделюсь своим видением ситуации.
Серверные ОС
Современную инфраструктуру трудно представить без технологий виртуализации, выгода от использования которых напрямую связана с эффективным использованием системных ресурсов. Это в полной мере относится к дисковому пространству, которого много никогда не бывает.
Удаление неиспользуемых ролей сервера в Windows Server 2012 помогает ИТ-специалистам эффективнее распоряжаться дисковым пространством. Тем, кто не знает об этой возможности или не считает целесообразным ее применять, поможет сжатие компонентов неиспользуемых ролей в Windows Server 2012 R2.
Клиентские ОС
К моменту выхода Windows 7 стоимость 1GB на жестких дисках была столь невелика, что папка WinSxS вызывала головную боль только у товарищей с маленьким сами знаете, чем. Однако на сцену уже выходили SSD, и система обслуживания Windows не очень хорошо сочеталась с их скромным объемом.
Казалось бы, к выходу Windows 8 твердотельный накопитель объемом 128GB уже не был чем-то из ряда вон выходящим, но на разработчиков системы обслуживания свалилась новая беда – планшеты, в том числе свой же Surface.
Действительно, все современные планшеты на Clover Trail в лучшем случае комплектуются диском в 64GB. А в более популярных младших моделях после вычета раздела восстановления остается около 25GB, чего недостаточно для более-менее долгосрочной работы Windows.
В Windows 8 очистка резервных копий компонентов нацелена на более эффективное использование пространства маленьких дисков планшетов, а в Windows 8.1 удаление предыдущих версий предоставляет запасной аэродром в самых тяжелых случаях.
Дискуссия и опрос
Эта запись является хорошим поводом для вас высказать все, что наболело по поводу хранилища компонентов Windows :) Опрос призван выявить количественный расклад, а в комментариях напишите, создает ли вам проблемы рост размера папки WinSxS. Если создает, опишите их и предоставьте ссылку на полноэкранный скриншот оснастки diskmgmt.msc.
Эта запись знаменует возобновление публикаций в блоге после летнего перерыва. Надеюсь, вы хорошо отдохнули :) Мой отпуск еще только грядет в сентябре, но вас уже ожидают несколько интересных запланированных записей :)