Почему папка / winsxs становится такой большой и ее можно уменьшить?

174

Виртуальная машина Vista, которую я использую, имеет только 10 ГБ виртуального жесткого диска - и я беспокоюсь о том, что со временем будет не хватать места.

Я использовал TreeSize, чтобы проверить виновников ..

введите описание изображения здесь

И основной виновник - это /winsxsпапка Windows Side-By-Side .

введите описание изображения здесь

Что такое папка Windows Side By Side? Ну, здесь все хорошо объяснено .

Все компоненты операционной системы находятся в папке WinSxS - фактически мы называем это расположение хранилищем компонентов. Каждый компонент имеет уникальное имя, включающее версию, язык и архитектуру процессора, для которых он был создан. Папка WinSxS - это единственное место, где компонент находится в системе, все остальные экземпляры файлов, которые вы видите в системе, «проецируются» жесткой связью из хранилища компонентов. Позвольте мне повторить этот последний момент - существует только один экземпляр (или полная копия данных) каждой версии каждого файла в ОС, и этот экземпляр находится в папке WinSxS. Если посмотреть с этой точки зрения, папка WinSxS на самом деле представляет собой целую ОС, называемую «плоской» в операционных системах нижнего уровня.

Это объясняет, почему папка начинается с большого размера, а не почему она со временем увеличивается - ответ на этот вопрос - обслуживание. В предыдущих версиях Windows атомной единицей обслуживания был файл, в Windows Vista - это компонент. Когда мы обновляем конкретный двоичный файл, мы выпускаем новую версию всего компонента, и эта новая версия сохраняется вместе с исходной версией в хранилище компонентов. Более высокая версия компонента проецируется на систему, но более старая версия в магазине не затрагивается. Причиной этого является третья часть того, почему хранилище компонентов становится таким большим.

Многие люди жалуются на размер папки / winsxs :

Коллега недавно каждые два года получал обновление своего рабочего ноутбука и собирался загрузить свой новый ноутбук с Vista. По какой-то причине его жесткий диск C: был разделен только на 25 ГБ, а остальное пространство зарезервировано для гораздо большего диска D :.

В любом случае, после загрузки многих обновлений Windows у него осталось мало свободного места на диске C: и по какой-то причине каталог WinSxS увеличился до 8 ГБ.

Хотя я знал, для чего нужен каталог WinSxS (Windows Side-by-Side), я не был уверен, почему этот каталог так быстро разрастается при обычных обновлениях операционной системы.

Я на самом деле не волнует, все эти дубликаты файлов для безопасности, но сделать заботу о VM взрываются из - за места на диске для ошибки. Итак ... можно ли каким-либо образом безопасно срезать / winsxs? Не похоже, что это может быть ..

Администраторы по какой-либо причине не должны брать на себя ответственность за очистку каталога / winsxs - это может помешать правильной работе Центра обновления Windows и MSI. Предотвращение случайного удаления из каталога достигается путем помещения строгого дескриптора безопасности в каталог, который наследуется его дочерним элементам.

Если эта папка / winsxs станет больше, мне придется заново создать образ этой виртуальной машины ... что я действительно не хочу делать!

Джефф Этвуд
источник
24
TreeSize Free ... Я использую windirstat.info для этой цели ;-)
Стив Шнепп
6
Разве вы не можете увеличить виртуальную машину и расширить основной раздел?
Сэм Шафран
1
Вы можете использовать это: windowsfixup.com/2009/05/… лично я бы держался от него подальше, если бы не смог найти исходный код
Сэм Саффрон,
11
В winsxs много жестких ссылок, поэтому о размере часто сообщают.
Грег Д
4
Первый вопрос по SuperUser
puretppc

Ответы:

101

Есть хорошая команда, которая очищается после установки Windows 7 SP1 (она сэкономила мне около 3 ГБ):

DISM /online /cleanup-Image /spsuperseded

Должен выполняться из командной строки с повышенными правами

GvS
источник
2
отлично, я просто думал о том, чтобы почистить Windows 7 SP1
Джефф Этвуд,
6
Существуют ли другие команды для Windows 7, которые также могут удалять резервные копии обновлений без SP?
galacticninja
8
В качестве альтернативы вы можете использовать параметр «Очистка системных файлов» в инструменте «Очистка диска» и удалить файлы резервных копий пакета обновления.
Михал Т
5
@ Пироги, я сначала запустил Очистку диска, и DSIM все еще избавился от дополнительных ~ 3 ГБ (измеряя% свободного места на диске, а не размер папки). Так что стоит делать и то и другое.
Matt Wilkie
3
@ UpTheCreek, ты уверен? После выполнения очистки диска, очистки системных файлов, я получаюC:\Windows\system32>DISM /online /cleanup-Image /spsuperseded Deployment Image Servicing and Management tool Version: 6.1.7600.16385 Image Version: 6.1.7600.16385 Service Pack Cleanup can't proceed: No service pack backup files were found. The operation completed successfully.
Cees Timmerman
44

TL; DR

Winsxs на самом деле содержит жесткие ссылки . Это не займет столько дополнительных данных, сколько вы думаете.

Жесткая ссылка похожа на «ярлык» или «указатель» на фактический файл, расположенный где-то на вашем диске. Жесткая ссылка сама по себе не занимает места на жестком диске: она просто служит для перенаправления.

Поскольку winsxs состоит из жестких ссылок, удаление этих ссылок не освободит места. Фактические файлы будут продолжать оставаться в разных местах на вашем диске.


winsxs это не проблема

... это решение! (Ну, в основном .)

Резюме «Помечено как ответ Ронни Вернон, MVP, Модератор», говорит здесь :

Вау, долгое обсуждение жестких ссылок и winsxs. Во всяком случае, вот несколько обобщенных пунктов того, что я понял о том, как все это работает.

Для начала, отвечая на вопрос ОП с идеальным ответом, опубликованным выше Андре.Зиглером, вы не касаетесь winsxs. Может быть, некоторые файлы можно обрезать, например, mp3, avi и т. Д., Но остальные системные файлы следует оставить в покое . Я также использую Link Shell Extension, как было опубликовано выше Ронни Верноном, простой способ увидеть, какие из них жестко связаны (красная стрелка), а какие - простые файлы.

До того, как попасть сюда, я видел много людей, которые спрашивали о средстве очистки после установки SP1 для Windows 7, например vsp1cln. Специального инструмента нет, все это интегрировано в сервис очистки диска. Одно замечание, которое я хотел бы здесь сделать, заключается в том, что даже если опция говорит, что она удалит несколько сотен МБ после того, как я очистил свой диск, служба удалила около 3 ГБ лишних файлов, поэтому она варьируется от системы к системе. Забавно, теперь у меня еще больше места, чем было до установки SP1. Хороший, MS.

Что касается жестких ссылок, я был удивлен путаницей, созданной вокруг них. Я не фанат Linux, и я обычно использую только мягкие ссылки ... мне этого достаточно, но люди не понимают, как работают сложные и как рассчитывается размер.

Группа выбранных файлов, ссылки или нет, всегда будет учитываться как сумма. Это означает, что если я возьму файл размером 10 МБ и сделаю 2 жесткие ссылки, выбор всех трех из них будет иметь размер 30 МБ, и это правильный размер, поскольку в отличие от программных ссылок, которые связаны с исходной записью таблицы файла основного файла и имеют 0 байтов, жесткие ссылки связаны с самими данными , имеют свою собственную запись в MFT, но указывают на тот же адрес данных, очевидно, имея в качестве размера размер фактических данных, одинаковое время, атрибуты и так далее. Почему ниже?

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

  1. эта операция создает список всех выбранных файлов, включая жесткие ссылки, как отдельные файлы, берет каждый из них и добавляет размеры, свойства дисков подсчитывают фактические сохраненные данные
  2. не все файлы будут учитываться, папки, защищенные от обхода и файлы от чтения, не будут учитываться, а информация о томе системы обычно имеет очень большие файлы, защищенные именно таким способом
  3. этот номер полезен только в случаях передачи файлов, если файлы, ссылки и т. д. необходимо скопировать на DVD или NAS, вот сколько они будут занимать, и ссылки не будут сохранены, поскольку они являются специфическими функциями NTFS и недоступны или доступны в различных формах под ISO, UDF, NFS и другими файловыми системами, но они будут клонированы.

Сделайте тест ... скопируйте файл 10 МБ, a.exe, с другого диска и обратите внимание, как свободное место уменьшается на 10 МБ. Сделать жесткую ссылку (mklink / H b.exe a.exe). Теперь эти два выбранных файла будут «использовать» 20 МБ в свойствах выбора , но на самом деле только 10 МБ будут проверены в свойствах диска , которые будут иметь то же свободное пространство, что и после копирования файла. Удалите один или один, свободное место останется прежним. Теперь удалите последний, и пространство увеличится на 10 МБ. Был ли какой-нибудь вред? NO.

Что такое winsxs? Гораздо лучше dllcache. Если с помощью dllcache в XP у нас были копии файлов, которые фактически увеличивали использование размера с момента их клонирования, это фактически улучшает использование, но не обеспечивает полную защиту (от вирусов). Если мошеннический деинсталлятор считает, что он должен удалить некоторые библиотеки времени выполнения из System32, он будет удалять только ссылки, но не данные, тогда ссылки будут воссозданы при сохранении минимально возможного использования пространства данных, что лучше, чем архивирование winsxs в кабинах и наличие Кабины вдоль стороны оригинальных файлов. Также winsxs приносит сериализацию, разделяя файлы с тем же именем, но с другой версией, ради разработчика, что хорошо / плохо, делает их ленивыми правильно кодировать, но помогает, когда они больше не хотят кодировать.

Я сделал это, чтобы помочь любому, кто приземлится здесь по тем же причинам, что и я ... чрезмерное «использование пространства» winsxs после SP1. И я надеюсь, что это было полезно.

Матин Улхак
источник
Разве этот ответ не является чрезвычайно важным аспектом, который полностью отсутствует в принятом ответе?
Мафу
33

Эти дубликаты и резервные копии очень раздражают при ограниченном дисковом пространстве.

Находясь в этом месте, я обнаружил, что единственный способ не поставить под угрозу стабильность ОС - щедро использовать параметр «Сжать содержимое для экономии места на диске» .

Сжимая все эти каталоги резервных копий в каталоге Windows, я смог уменьшить размер каталога с 6,5 ГБ до 5 ГБ без заметных побочных эффектов. Использование его на некоторых ваших материалах вне директории Window увеличит ваши 10 ГБ еще больше.

Эран
источник
2
Я попытался сжать его, и я говорю «Доступ запрещен» к папке, а затем poqexec.log. Предполагается, что это был замок для чтения. Что-нибудь, чтобы обойти это?
Quintin Par
1
На самом деле, вы все еще ставите под угрозу стабильность вашей ОС. Папка WinSxS НЕ должна быть сжата. На самом деле, это довольно плохая идея. Просто Google "Сжимать Winsxs", и вы узнаете.
Hello71
6
Я не уверен, что эта техника хорошая идея - многие файлы в дереве winsxs являются жесткими ссылками. Будет ли сжатие этих файлов сжимать все экземпляры файла? Там могут быть некоторые непредвиденные последствия производительности.
duffbeer703
3
@FiascoLabs, вы заметили, что это 4-летний вопрос, который конкретно относится к диску 10 ГБ? С таким же успехом можно сказать, что «никто не использует Vista». Это могло бы быть правдой сейчас, но не было так в то время, когда был задан вопрос.
Эран
1
@eran Тем не менее, все вопросы Win7 о winsxs закрываются как дубликат этого вопроса
Тобиас Кинцлер
27

Если у вас Vista и у вас установлен пакет обновления 2, вы можете очистить старые системные файлы с помощью нового средства очистки пакета обновления .

  1. Нажмите Пуск> Все программы> Стандартные> Командная строка или нажмите Пуск> Выполнить и введите cmd, чтобы открыть командную строку Windows
  2. Выполните команду «Compcln.exe». Путь «c: \ Windows \ System32 \ compcln.exe».
  3. Пользователям будет задан вопрос, следует ли постоянно держать Vista SP2 в системе.
  4. Введите «Y» и нажмите Enter, система начнет выполнять чистку компонентов Windows.
Томас Андрле
источник
Я не мог найти это в моем Vista SP1
Карандаш
Да, это, вероятно, новинка в Vista SP2.
Томас Андрле
4
Не так много сэкономил для меня, но я могу подтвердить, что инструмент существует, и он спас мне плюс
2010 г.
Compcln.exe нет в W10.
Лори Стерн
21

В Windows 8 вы можете уменьшить размер папки WinSxS, удалив компоненты Windows :

DISM.exe /Online /Disable-Feature /Featurename:<name> /Remove

Важным является параметр / Remove, который является новым для Windows 8 .

Большая часть пространства в WinSxS используется WindowsUpdates, которые вы устанавливаете с течением времени. В Windows 8 / Windows 10 вы можете обнаруживать и удалять обновления, которые заменяются более новыми обновлениями (например, более новыми накопительными обновлениями IE), с помощью этой команды:

dism.exe /online /cleanup-image /startcomponentcleanup

или запустите мастер очистки диска и выберите «Очистка Центра обновления Windows»

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Также убедитесь, что вы установили обновление стека обслуживания http://support.microsoft.com/kb/2821895 .

Эти обновления запускают глубокую очистку WinSxS и сжимают все DLL / Exe-файлы из WinSxS, которые в данный момент не используются, в меньший дельта-файл:

введите описание изображения здесь

Посмотрите на разные размеры файлов.

Windows 8.1 добавляет новые команды DISM . /startcomponentcleanupПолучает новый параметр , /ResetBaseкоторый делает ваше последнее обновление постоянным и удаляет все старые файлы , чтобы сохранить больше пространства.

Вы также можете запустить новую команду dism /online /cleanup-image /analyzecomponentstoreдля анализа папки WinSxS:

введите описание изображения здесь

Теперь он говорит вам, когда вы должны запустить очистку, чтобы сэкономить место.

magicandre1981
источник
2
Это теперь доступно и для Windows 7 с пакетом обновления 1 (SP1): support.microsoft.com/kb/2852386
Марк Хендерсон,
Здесь было 12,4 ГБ на диске до StartComponentCleanup1809 года. 6,54 ГБ на диске после StartComponentCleanup, значительное улучшение. 92 ожидающих удаления, нет ожидающих переименований. Из 76812 файлов в WinSXS 21452 занимают 2,90 ГБ на диске с датами с сентября по октябрь прошлого года, когда компьютер был обновлен до 1803. Это типично для текущей установки W10 или мы все еще забиты?
Лори Стерн
1
@LaurieStearn Понятия не имею. Я только запускаю Win10 в ВМ и создаю новую ВМ для каждой новой версии Win10 в моей хост-системе Windows 8.1.
magicandre1981
9

Хорошие новости! В настоящее время от Microsoft 7 для Windows 7 SP1 официально разрешен метод очистки папки WinSXS .

  1. Установите HotFix 2852386 - вы можете загрузить его вручную или подождать, пока он пройдет через Центр обновления Windows
  2. Это добавляет новую опцию в Мастер очистки диска (в разделе Очистка системных файлов), которую можно включить для «Очистки Центра обновления Windows». Отметьте эту опцию.
  3. Нажмите ОК

Предостережение. Возможно, вам не удастся удалить некоторые обновления Windows после выполнения очистки папки WinSxS.

Марк Хендерсон
источник
6

Похоже , наконец-то появился способ сделать это в Windows 8.1 с пакетом обновления 1 и Windows Server 2012 R2 .

Инструмент анализа хранилища компонентов:

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

В конце сканирования пользователь получает отчет о результатах (фактический размер папки winsxs), например:

проанализировать результаты магазина

Очистка магазина компонентов:

Сегодня очистка хранилища компонентов должна запускаться вручную конечным пользователем, либо с помощью DISM, либо с помощью мастера очистки диска. Чтобы сделать очистку хранилища компонентов более полезной для среднего конечного пользователя, она будет добавлена ​​в задачу обслуживания, автоматически экономя дисковое пространство для конечных пользователей. Чтобы включить это, будет сделано изменение, позволяющее удалять замененные драйверы входящих сообщений без перезагрузки (сегодня все установки / удаления драйверов, выполняемые CBS, требуют перезагрузки).

  1. Dism.exe /online /Cleanup-Image /StartComponentCleanup

  2. Инструмент очистки диска, кнопка очистки системных файлов.

    инструмент очистки диска

  3. schtasks.exe /Run /TN "\Microsoft\Windows\Servicing\StartComponentCleanup"

Джефф Этвуд
источник
4
уже опубликовано много лет назад: superuser.com/a/594216/174557 Не нужно дважды публиковать одно и то же;)
magicandre1981
2

Dism ++ - это то, что вы ищете ( https://www.chuyu.me/en/index.html ).

Вы сэкономите гигабайты места ...

Вам нужно будет выбрать «Замененные сборки WinSxS». Если вы сделаете это - вы получите предупреждение о невозможности удаления этих установленных обновлений. Нажмите ОК, затем сканируйте

введите описание изображения здесь

Это даст вам представление о том, сколько места вы сэкономите. Хит очистки, и это должно очистить это пространство.

Подмастерье Компьютерщик
источник
1
Должны быть предоставлены конкретные инструкции по использованию этой программы. Я могу получить программу от Github, но не могу перейти по указанной вами ссылке.
Ramhound
1
Я пробовал это на виртуальной машине - кажется довольно быстрым и, насколько я могу судить, ничего не сломал. Я мог бы поиграть с этим, так как он, кажется, имеет несколько изящных функций после установки (ооо, резервные копии драйверов!). Я отредактировал ваш ответ с помощью основных шагов и снимка экрана. Надеемся, что вы должны увидеть разницу и скорые голоса в ближайшее время
Journeyman Geek
Отличный инструмент! В отличие от WinSXSLite, он работал и освободил для меня почти 8 ГБ места.
Suncatcher
1

Надеюсь, будет полезно иметь один простой вкладыш, так как в противном случае отличный ответ Джеффа Этвуда пропустит /ResetBaseпереключение.

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

dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase

Это работает в Windows 8.1 и позже

maoizm
источник
0

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

Эти инструкции показывают, как этого добиться:

sc query msiserver 
sc query TrustedInstaller

sc stop msiserver
sc stop TrustedInstaller

sc config msiserver start= disabled
sc config TrustedInstaller start= disabled

icacls "%WINDIR%\WinSxS" /save "%WINDIR%\WinSxS.acl" /t

takeown /f "%WINDIR%\WinSxS" /r

icacls "%WINDIR%\WinSxS" /grant "%USERDOMAIN%\%USERNAME%":(F) /t

compact /s:"%WINDIR%\WinSxS" /c /a /i *

icacls "%WINDIR%\WinSxS" /setowner "NT SERVICE\TrustedInstaller" /t

icacls "%WINDIR%" /restore "%WINDIR%\WinSxS.acl"
del "%WINDIR%\WinSxS.acl"

sc config msiserver start= demand
sc config TrustedInstaller start= demand

sc start msiserver
sc start TrustedInstaller

Примечания / советы:

  1. Группировка отмечает рекомендуемый способ запуска этих команд, если это делается вручную. Обычно проблем не должно быть (за исключением некоторых пропущенных файлов, поскольку они используются), но следует проверять результат для каждой группы.

  2. Я выполнил эти шаги при установке различных операционных систем дома и на работе: Win7x64, Win10x64, Windows Server 2008R2 и Windows Server 2012, и до сих пор не видел никаких проблем.

  3. Некоторые шаги занимают довольно много времени, особенно время сжатия. Большинство шагов будут повторяться и показывать обработанные файлы. Свертывание окна командной строки может увеличить скорость.

Алексей
источник
-4

Вы можете удалить эти файлы безопасно. Если они вам когда-нибудь понадобятся, вам потребуется установить еще несколько вещей.

Теперь к исправлению!

  • Откройте проводник Windows и перейдите к C: \ Windows \ System32. Найдите файл "vsp1cln.exe".
  • Щелкните правой кнопкой мыши этот файл и выберите параметр «Запуск от имени администратора».
  • Средство очистки пакета обновления 1 для Vista удалит все избыточные файлы, которые были заменены.

Объем получаемого дискового пространства будет зависеть от системы, установленных программ и т. Д.

Axxmasterr
источник
16
Вы можете безопасно удалить файлы winsxs? Вы уверены, что?!
UpTheCreek