Почему папка /winsxs становится такой большой и ее можно уменьшить?
Виртуальная машина 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), я не был уверен, почему этот каталог так быстро разрастается при обычных обновлениях операционной системы.
Меня не очень заботит наличие всех этих дубликатов для безопасности, но я забочусь о взрыве виртуальной машины из-за ошибки нехватки места на диске. Итак... можно ли каким-либо образом безопасно срезать / winsxs? Не похоже, что это может быть..
Администраторы по какой-либо причине не должны брать на себя ответственность за очистку каталога / winsxs - это может помешать правильной работе Центра обновления Windows и MSI. Предотвращение случайного удаления из каталога достигается путем помещения строгого дескриптора безопасности в каталог, который наследуется его дочерним элементам.
Если эта папка / winsxs станет больше, мне придется заново создать образ этой виртуальной машины... что я действительно не хочу делать!
12 ответов
Похоже , наконец-то появился способ сделать это в Windows 8.1 с пакетом обновления 1 и Windows Server 2012 R2.
Инструмент анализа хранилища компонентов:
Dism.exe /Online /Cleanup-image /AnalyzeComponentStore
В конце сканирования пользователь получает отчет о результатах (фактический размер папки winsxs), например:
Очистка магазина компонентов:
Сегодня очистка хранилища компонентов должна запускаться вручную конечным пользователем, либо с помощью DISM, либо с помощью мастера очистки диска. Чтобы сделать очистку хранилища компонентов более полезной для среднего конечного пользователя, она будет добавлена в задачу обслуживания, автоматически экономя дисковое пространство для конечных пользователей. Чтобы включить это, будет сделано изменение, позволяющее удалять замененные драйверы входящих сообщений без перезагрузки (сегодня все установки / удаления драйверов, выполняемые CBS, требуют перезагрузки).
Dism.exe /online /Cleanup-Image /StartComponentCleanup
Инструмент очистки диска, кнопка очистки системных файлов.
schtasks.exe /Run /TN "\Microsoft\Windows\Servicing\StartComponentCleanup"
Есть хорошая команда, которая очищается после установки Windows 7 SP1 (она сэкономила мне около 3 ГБ):
DISM /online /cleanup-Image /spsuperseded
Должен выполняться из командной строки с повышенными правами
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, и не сравнивайте их, а также не используйте инструменты, которые делают это автоматически, поскольку они не показывают фактическое использование жесткого диска. Зачем? Так как:
- эта операция создает список всех выбранных файлов, включая жесткие ссылки, как отдельные файлы, берет каждый из них и добавляет размеры, свойства дисков подсчитывают фактические сохраненные данные
- не все файлы будут учитываться, папки, защищенные от обхода и файлы от чтения, не будут учитываться, а информация о томе системы обычно имеет очень большие файлы, защищенные именно таким способом
- этот номер полезен только в случаях передачи файлов, если файлы, ссылки и т. д. необходимо скопировать на 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. И я надеюсь, что это было полезно.
Эти дубликаты и резервные копии очень раздражают при ограниченном дисковом пространстве.
Находясь в этом месте, я обнаружил, что единственный способ не поставить под угрозу стабильность ОС - щедро использовать параметр "Сжать содержимое для экономии места на диске".
Сжимая все эти каталоги резервных копий в каталоге Windows, я смог уменьшить размер каталога с 6,5 ГБ до 5 ГБ без заметных побочных эффектов. Использование его на некоторых ваших материалах вне директории Window увеличит ваши 10 ГБ еще больше.
Если у вас Vista и у вас установлен пакет обновления 2, вы можете очистить старые системные файлы с помощью нового средства очистки пакета обновления.
- Нажмите Пуск> Все программы> Стандартные> Командная строка или нажмите Пуск> Выполнить и введите cmd, чтобы открыть командную строку Windows
- Выполните команду "Compcln.exe". Путь "c:\Windows\System32 \compcln.exe".
- Пользователям будет задан вопрос, следует ли постоянно держать Vista SP2 в системе.
- Введите "Y" и нажмите Enter, система начнет выполнять чистку компонентов Windows.
В 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:
Теперь он говорит вам, когда вы должны запустить очистку, чтобы сэкономить место.
Вы можете использовать VSP1CLN.EXE, чтобы сделать SP1 постоянным, что в соответствии с этой страницей освободит замененные компоненты SP1.
Хорошие новости! В настоящее время от Microsoft 7 для Windows 7 SP1 официально разрешен метод очистки папки WinSXS.
- Установите HotFix 2852386 - вы можете загрузить его вручную или подождать, пока он пройдет через Центр обновления Windows
- Это добавляет новую опцию в Мастер очистки диска (в разделе Очистка системных файлов), которую можно включить для "Очистки Центра обновления Windows". Отметьте эту опцию.
- Нажмите ОК
Предостережение. Возможно, вам не удастся удалить некоторые обновления Windows после выполнения очистки папки WinSxS.
Dism++ - это то, что вы ищете ( https://www.chuyu.me/en/index.html).
Вы сэкономите гигабайты места...
Вам нужно будет выбрать "Замененные сборки WinSxS". Если вы сделаете это - вы получите предупреждение о невозможности удаления этих установленных обновлений. Нажмите ОК, затем сканируйте
Это даст вам представление о том, сколько места вы сэкономите. Хит очистки, и это должно очистить это пространство.
Надеюсь, будет полезно иметь один простой вкладчик, в противном случае отличный ответ Джеффа Этвуда /ResetBase
переключатель.
Предостережение. Этот параметр значительно помогает уменьшить размер папки WinSxS, но полностью удаляет предыдущие версии компонентов, поэтому вы не сможете откатить любые обновления, установленные ранее. Но если ваша система ведет себя хорошо, вы должны быть в безопасности (особенно если вы не в производственной среде)
dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase
Это работает в Windows 8.1 и позже
Помимо вышеупомянутых решений, одним из способов получения значительного пространства является сжатие всего содержимого папки. Однако это невозможно сделать с помощью проводника (необходимы соответствующие права), по крайней мере, начиная с 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
Примечания / советы:
Группировка отмечает рекомендуемый способ запуска этих команд, если это делается вручную. Обычно проблем не должно быть (за исключением некоторых пропущенных файлов, поскольку они используются), но следует проверять результат для каждой группы.
Я выполнил эти шаги при установке различных операционных систем дома и на работе: Win7x64, Win10x64, Windows Server 2008R2 и Windows Server 2012, и до сих пор не видел никаких проблем.
Некоторые шаги занимают довольно много времени, особенно время сжатия. Большинство шагов будут повторяться и показывать обработанные файлы. Свертывание окна командной строки может увеличить скорость.
Вы можете удалить эти файлы безопасно. Если они вам когда-нибудь понадобятся, вам потребуется установить еще несколько вещей.
Теперь к исправлению!
- Откройте проводник Windows и перейдите к C:\Windows\System32. Найдите файл "vsp1cln.exe".
- Щелкните правой кнопкой мыши этот файл и выберите параметр "Запуск от имени администратора".
- Средство очистки пакета обновления 1 для Vista удалит все избыточные файлы, которые были заменены.
Объем получаемого дискового пространства будет зависеть от системы, установленных программ и т. Д.