172

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

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

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

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

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

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

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

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

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

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

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

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

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

12 ответов12

100

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

DISM /online /cleanup-Image /spsuperseded

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

43

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. И я надеюсь, что это было полезно.

32

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

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

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

27

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

  1. Нажмите Пуск> Все программы> Стандартные> Командная строка или нажмите Пуск> Выполнить и введите cmd, чтобы открыть командную строку Windows
  2. Выполните команду «Compcln.exe». Путь «c:\Windows\System32 \compcln.exe».
  3. Пользователям будет задан вопрос, следует ли постоянно держать Vista SP2 в системе.
  4. Введите «Y» и нажмите Enter, система начнет выполнять чистку компонентов Windows.
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:

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

20

Вы можете использовать VSP1CLN.EXE, чтобы сделать SP1 постоянным, что в соответствии с этой страницей освободит компоненты, замененные SP1.

9

Хорошие новости! Теперь существует официально разрешенный метод от Microsoft для 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"

2

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

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

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

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

1

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

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

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

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

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 удалит все избыточные файлы, которые были заменены.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .