Чому папка / winxs стає настільки великою, і її можна зменшити?


174

Віртуальна машина Vista, яку я використовую, має лише віртуальний жорсткий диск об'ємом 10 Гб, і я переживаю, що з часом не вистачить місця.

Я використовував TreeSize, щоб перевірити винуватців.

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

І головний винуватець - це /winsxsпапка "Windows Side-By-Side" .

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

Що таке папка Windows Side By Side? Ну, це тут досить добре пояснено .

Усі компоненти в операційній системі знаходяться в папці WinSxS - адже це місце ми називаємо сховищем компонентів. Кожен компонент має унікальну назву, що включає версію, мову та архітектуру процесора, для якого він був побудований. Папка WinSxS - це єдине місце, де компонент знайдений у системі, всі інші екземпляри файлів, які ви бачите в системі, "проектуються" шляхом жорсткого посилання з сховища компонентів. Повторю цю останню точку - у кожній версії кожного файлу в ОС є лише один екземпляр (або повна копія даних), і цей екземпляр розташований у папці WinSxS. Таким чином, з погляду на цю перспективу, папка WinSxS - це справді сукупність всієї ОС, яку в операційних системах нижчого рівня називають «плоскою».

Це пояснює, чому папка починає бути великою, а не чому вона з часом збільшується - відповідь на це питання - обслуговування. У попередніх версіях Windows атомним блоком обслуговування був файл, у Windows Vista - це компонент. Коли ми оновлюємо певний двійковий файл, ми випускаємо нову версію всього компонента, і ця нова версія зберігається поряд із оригінальною у сховищі компонентів. Вища версія компонента проектується на систему, але старша версія магазину не торкається. Причиною цього є третя частина того, чому склад компонентів стає таким великим.

Багато людей, які скаржаться на розмір папки / winxs, теж :

Нещодавно колега отримував оновлення ноутбука щороку на два роки і був у середині завантаження свого нового ноутбука з Vista. Чомусь його жорсткий диск C: був розділений лише на 25 Гб, а решта місця відведена для набагато більшого диска D :.

У будь-якому випадку, після завантаження багатьох оновлень Windows, у нього майже не залишилось місця на диску на C :, і чомусь каталог WinSxS набув обсягу понад 8 Гб.

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

Я на насправді не хвилює, всі ці дублікати файлів для безпеки, але зробити турботу про VM вибухають з - за місця на диску для помилки. Отже .. чи можна / winxs будь-яким чином безпечно скомпоновано? Здається, це не може бути ..

Адміністратори з будь-якої причини не повинні брати на себе, щоб очистити каталог / winxs - це може завадити після цього оновленням Windows і MSI нормально функціонувати. Запобігання випадкового видалення з каталогу здійснюється за допомогою розміщення в каталозі сильного дескриптора безпеки, який успадковується його дітям.

Якщо ця папка / winxs стає більшою, мені доведеться переглянути зображення цієї віртуальної машини .. чого я дійсно не хочу робити!


24
Безкоштовно TreeSize ... Я використовую для цього windirstat.info ;-)
Стів Шнепп

6
Ви не можете розробити VM і розширити основний розділ?
Сем Шафран

1
Ви можете скористатися цим: windowsfixup.com/2009/05/… особисто я б тримався подалі від нього, якщо не зможу знайти вихідний код
Сем Сафрон

11
У winxs дуже багато жорстких посилань, тому розмір також часто завищується.
Грег Д

4
Перше запитання щодо
SuperUser

Відповіді:


101

Є хороша команда, яка очищається після встановлення Windows 7 SP1 (це заощадило мене близько 3 ГБ):

DISM /online /cleanup-Image /spsuperseded

Потрібно виконати з підвищеного командного рядка


2
Відмінно, я просто думав про очищення Windows 7 SP1
Джефф Етвуд

6
чи є інші команди для Windows 7, які також можуть видалити резервні копії оновлень, що не стосуються SP?
galacticninja

8
Ви також можете скористатися параметром «Очищення системних файлів» в інструменті «Очищення диска» та видалити файли резервного копіювання пакета оновлень.
Michał T

5
@Pies, я запустив Disk Cleanup спочатку, і 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

winxs насправді містить жорсткі посилання . Це не займає стільки додаткових даних, скільки ви думаєте.

Жорстке посилання - це як "ярлик" або "вказівник" на фактичний файл, розташований десь на вашому диску. Жорстке посилання самостійно не займає місця на жорсткому диску: воно служить лише для переадресації.

Оскільки winxs складається з жорстких посилань, видалення цих посилань не звільнить місця. Фактичні файли й надалі залишатимуться в різних місцях на вашому диску.


winxs - це не проблема

... це рішення! (Ну, переважно .)

Резюме "Позначений як відповідь Роні Вернон, MVP, модератор", говорить тут :

Нічого собі, довгі дискусії про жорсткі посилання та winxs. У всякому разі, тут є кілька узагальнених моментів того, що я зрозумів, як це все працює.

Для початку, відповідаючи на питання ОП із ідеальною відповіддю, опублікованою вище Andre.Ziegler, ви не торкаєтеся winxs. Можливо, деякі файли можна обрізати, як mp3, avi та ін., Але решту системних файлів слід залишити в спокої . Я також використовую розширення Link Shell, як опублікував Ронні Вернон, простий спосіб зрозуміти, які з них жорсткі (червона стрілка), а які - прості файли.

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

Щодо жорстких посилань, мене розвеселила плутанина, створена навколо них. Я не linux-вундеркінд, і зазвичай використовую лише м'які посилання ... їх мені достатньо, але люди не зрозуміли, як працюють важкі та як розраховується розмір.

Група вибраних файлів, посилань чи ні, завжди вважатиметься сумою. Це означає, що якщо я візьму файл 10 МБ і зробить 2 жорстких посилання, то для всіх трьох вибору буде 30 МБ, і це правильний розмір, тому що на відміну від м'яких посилань, які пов'язані з початковим записом таблиці головного файлу, і мають 0 байт, жорсткі посилання пов'язані з самими даними, мають власний запис у MFT, але вказують на одну і ту ж адресу даних, очевидно, мають розмір фактичних даних, однакові рази, атрибути тощо. Чому, нижче.

Скільки залишилось на приводі? Просто: рівно стільки, скільки звітів про власні властивості диска . Не слід вибирати всі файли, приховані та не приховані на C, і робити порівняння, або використовувати інструменти, які роблять це автоматично, оскільки це не відображатиме фактичне використання жорсткого диска. Чому? Оскільки:

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

Зробіть тест ... скопіюйте файл 10MB, a.exe, з іншого диска та помітьте, як вільний простір зменшується на 10 Мб. Зробіть жорстке посилання (mklink / H b.exe a.exe). Тепер ці два вибрані файли "використовуватимуть" 20MB у властивостях вибору , але насправді лише 10MB підтверджено у властивостях накопичувача , який матиме такий самий вільний простір, як і після копіювання файлу. Видаліть одну або будь-яку, вільний простір залишиться колишнім. Тепер видаліть останню, і простір збільшиться на 10 Мб. Чи було завдано якоїсь шкоди? НЕМАЄ.

Що таке winxs? Набагато кращий dllcache. Якщо з dllcache в XP у нас були копії файлів, які насправді додавали до використання розміру з часу їх клонування, це фактично покращує використання, але не повний захист (від вірусів). Якщо негідник видалення вважає, що він повинен видалити деякі файли виконуваного часу з System32, він видалив би лише посилання, але не дані, тоді вони будуть відтворені, зберігаючи при цьому використання простору даних якнайменше, краще, ніж архівувати winxs в кабінах і мати кабіни уздовж оригінальних файлів. Також winxs приносить серіалізацію, розділяючи файли з тим самим іменем, але різною версією, заради розробника, що є хорошою справою / поганою справою, це робить їх ледачими правильно кодувати, але це допомагає, коли вони більше не хочуть кодувати.

Я зробив це, щоб допомогти кожному, хто приземлився тут, з тих же причин, що і я ... надмірне "використання місця" winxs після SP1. І я сподіваюся, що це було корисно.


Чи не є ця відповідь надзвичайно важливим аспектом, який повністю відсутній у прийнятій відповіді?
мафу

33

Ці дублікати та резервні копії надзвичайно дратівливі при обмеженому просторі на диску.

Перебуваючи в цьому місці, єдиний спосіб, який я виявив, що не загрожує стабільності ОС, - це щедро використовувати налаштування "Стиснути вміст для економії місця на диску" .

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


2
Я спробував стиснути його, і я сказав "Заборонено доступ" до папки, а потім poqexec.log. Передбачається, що це блокування читання. Що-небудь обійти цим?
Квінтін,

1
Насправді ви все ще ставите під загрозу стабільність вашої ОС. Папка WinSxS НЕ повинна стискатися. Насправді це досить погана ідея. Просто google "стискає winxs", і ви дізнаєтесь.
Привіт71,

6
Я не впевнений, що ця методика є гарною ідеєю - багато файлів у дереві winxs є жорсткими посиланнями. Чи увімкнення стиснення цих файлів стисне всі екземпляри файлу? Можуть бути деякі ненавмисні наслідки для продуктивності.
duffbeer703

3
@FiascoLabs, ви помітили, що це 4-річне питання, яке конкретно стосується накопичувача 10 Гб? Ви так само можете стверджувати, що "Vista не використовує ніхто". Це може бути правдою зараз, але це було не так у той час, коли питання було задано.
еран

1
@eran Однак усі питання Win7 щодо winxs закриваються як дублікат цього питання
Tobias Kienzler

27

Якщо у вас Vista та встановлено SP2, ви можете очистити старі системні файли за допомогою нового інструмента очищення оновленого пакета оновлень .

  1. Клацніть Пуск> Усі програми> Аксесуари> Командний рядок або натисніть кнопку Пуск> Запустити та введіть cmd, щоб відкрити командний рядок Windows
  2. Виконайте команду “Compcln.exe”. Шлях - "c: \ Windows \ System32 \ compcln.exe".
  3. Користувачам буде запропоновано запитання, чи постійно зберігати Vista SP2 в системі.
  4. Введіть “Y” і натисніть клавішу Enter, система почне виконувати чисті компоненти Windows.

Я не міг знайти це у своїй Vista SP1
олівці

Так, це, мабуть, нове у Vista SP2.
Томаш Андрле

4
Не дуже зекономили для мене, але я можу підтвердити, що інструмент існує, і він врятував мені G плюс
itj

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 Update"

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

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

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

Також переконайтеся, що ви встановили оновлення стека обслуговування http://support.microsoft.com/kb/2821895 .

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

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

Подивіться на різні розміри файлів.

Windows 8.1 додає нові команди DISM . /startcomponentcleanupОтримує новий параметр , /ResetBaseякий робить ваше останнє оновлення постійним і видаляє всі старі файли , щоб зберегти більше простору.

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

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

Тепер він говорить вам, коли слід запустити очищення, щоб заощадити місце.


2
Зараз це доступно і для Windows 7 SP1: support.microsoft.com/kb/2852386
Марк Хендерсон

Ось це було 12,4 Гбіт на диску раніше, ніж StartComponentCleanupна 1809 р. 6,54 ГБ на диску після цього StartComponentCleanup, величезне поліпшення. 92 очікування видалення, перезаписів, що очікують, немає. З 76812 файлів у WinSXS 21452 займає 2,90 Гб на диску з датами з вересня по жовтень минулого року, коли комп'ютер було оновлено до 1803. Це характерно для поточної установки W10 чи ми все ще забиті?
Лорі Стерн

1
@LaurieStearn Я поняття не маю. Я запускаю Win10 лише в VM і створюю нову VM для кожної нової версії Win10 на своїй хост-системі Windows 8.1.
magicandre1981


9

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

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

Caveat: Ви, можливо, не зможете видалити певні оновлення Windows після запуску очищення папки WinSxS.


6

Схоже, існує нарешті спосіб зробити це в пакеті оновлень 1 для Windows 8.1 та Windows Server 2012 R2 .

Інструмент аналізу компонентів:

Dism.exe /Online /Cleanup-image /AnalyzeComponentStore

Після закінчення сканування користувач отримує звіт про результати (фактичний розмір папки winxs) таким чином:

проаналізуйте результатикомпоненти магазину

Очищення магазину компонентів:

Сьогодні очищення компонентного магазину повинно бути запущено кінцевим користувачем вручну, або за допомогою 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, але я не можу відвідати посилання, яке ви надали.
Рамхаунд

1
Я спробував це на VM - здається досить швидким і насправді нічого не зламав, наскільки я можу сказати. Я можу зіграти з цим, оскільки, схоже, має кілька чудових функцій після встановлення (резервні копії драйверів ooh!). Я відредагував вашу відповідь основними кроками та скріншотом. Ви повинні, сподіваємось, побачити різницю, і незабаром оновлення
Journeyman Geek

Дивовижний інструмент! На відміну від WinSXSLite, він працював і звільнив майже 8 Гбіт місця для мене.
Suncatcher

1

Сподіваюсь, буде корисним мати один простий лінійку, оскільки в іншому випадку чудова відповідь пропуску Джефса Етвуда пропустить /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."
  • Клацніть правою кнопкою миші цей файл і виберіть опцію "Запустити як адміністратор".
  • Інструмент очищення Vista Service Pack 1 видалить усі зайві файли, які він замінив.

Обсяг дискового простору, який ви отримаєте, залежатиме від системи, яких програм встановлено тощо.


16
Ви можете безпечно видаляти файли winxs? Ви впевнені в цьому ?!
UpTheCreek
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.