Уменьшение размера папки Winsxs в Windows 7 или как пользоваться WinsxsLite.bat

ENG: Decrease of the size of folder Winsxs in Windows 7 or how to use WinsxsLite.bat

Внимание!!! (предупреждения)

1) Описываемая процедура очень опасна для ОС, поэтому перед её применением необходимо сделать снимок диска или партиции с помощью Acronis True Image или подобной программы.

2) Процедура выполняется длительное время (часы) — поэтому планируй время.

3) Процедура не может обрабатывать файлы заблокированные какими-нибудь процессами. Более того, если процедура не сможет нормально обработать заблокированные файлы, резко возрастает риск что  потом что-то не заработает или система будет испорчена. Поэтому на время выполнения процедуры, необходимо закрыть все выполняющиеся приложения и остановить все возможные службы. Но еще лучше выполнять процедуру в save mode, т.к. в этом случае гораздо меньше файлов заблокировано системой.

———————————————————————————————————————- 

Вступление 

Ну вот опять столкнулся с нехваткой места на диск C: на домашнем компе.

Анализ с помощью программы FolderSizes показал, что больше всего места на диск занимает папка C:Windows, а в ней папка winsxs.

Начал изучать проблему с чтения статей. Вот, например, от одного из разработчиков Windows

What is the WINSXS directory in Windows 2008 and Windows Vista and why is it so large?

Наткнулся на очень интересную статью (правда она для Vista, у меня 7)

Уменьшение размеров папки winsxs
©Bobrovsky Dmitry
Кстати, есть и официальная статья Microsoft по этой проблеме — How to Alleviate Disk Space Pressure Caused By a Large Windows Component Store (WinSxS) Directory — но рекомендации которые там даются стандартные и навряд ли помогут освободить место.
©Bobrovsky Dmitry
Оказывается, что папка winsxs – это основное хранилище системных файлов, на которое делаются hard-линки. Механизм работы с этим хранилищем далек от идеала (IMHO). Но некий парень Christian Bering Boegh написал WinsxsLite.bat, который перенаправляет ссылки на самую последнюю версию файла, а все остальные версии удаляет, еще перенаправляются и удаляются файлы ненужных языков.

Батник кстати крут, этот Кристиан просто монстр в написании батников, такое сотворить не каждый сможет…

В Help.htm у него написано что батник делает необратимые изменения, т.е. если что пойдет не так ,то система будет испорчена и понятное дело лучше предварительно снять образ диска.

Итак, утилиты vsp1cln.exe и compcln.exe я не делаю, т.к. у меня Windows 7, а они вроде как предназначены для Windows Vista.

Т.к. я скачал батник с набором всех необходимых утилит и Config.txt уже был вроде как правильно настроен, то осталось просто запустить батник. Если Config.txt нет, можно просто запустить батник и выбрать [q], Config.txt будет сформирован.

Я решил делать по алгоритму

Phase 1 scan
Phase 1 apply
Reboot
Phase 2 scan
Phase 2 apply
Reboot

Для начала определю размер папки winsxs (через проводник) – это для контроля.

Размер: 4,16 Гб
Размер на диске: 4,22 Гб
Файлов: 29752
Папок: 7037

Вообще автор батника утверждает что размер папки winsxs в проводнике считается неправильно. Поэтому будут в ходе эксперимента определять размер с помощью его батника (меню [w]).

———————————————————————————————————————

Поехали…

1) Скачиваю WinsxsLite.bat. (Если там уже нет можно поискать по WinsxsLite.bat).
Dmitry Bobrovsky
2) (Рисунок 1). Запускаю батник WinsxsLite.bat. При запуске ищутся файлы мультимедийные файлы примеров и формируется батник для их удаления DelWinsxsSampleMedia.bat (выполняю его — это освобождает 30Мб для меня). После этого смотрю размер папки winsxs — [w]. (Определение размера так же может быть длительным, на моем стареньком ноутбуке, примерно минут 15 шло).
Dmitry Bobrovsky
Уменьшение размера папки Winsxs в Windows 7 или как пользоваться WinsxsLite.bat

Рисунок 1.

3) (Рисунок 2). Далее выбираю [1] и [s] (scan), идет долгое сканирование (у меня порядка 1 часа). В результате формируется файл ToDo1.txt с результатами сканирования. После этого еще раз выбираю [1], но теперь меню становиться разнообразнее и я выбираю [a] (applay). Опять идет процесс (здесь уже быстрее минут 15-20).

Уменьшение размера папки Winsxs в Windows 7 или как пользоваться WinsxsLite.bat

Рисунок 2.

4) (Рисунок 3). После выполнения первой фазы — 18 pending hardlink. Делая первый раз, выполнил здесь [A]uto start, который нихрена не отработал на Windows 7. Делая второй раз выполнил Re[s]hchedule activation  — ЭТО РАБОТАЕТ, т.е. все линки были отработаны.

Уменьшение размера папки Winsxs в Windows 7 или как пользоваться WinsxsLite.bat

Рисунок 3.

5) (Рисунок 4). Проверяю размер. Я так понимаю что нужно ориентироваться на free space. Было 15064 Мб стало 15829 Мб = 765 Мб освободилось.

Уменьшение размера папки Winsxs в Windows 7 или как пользоваться WinsxsLite.bat

Рисунок 4.

6) Перезагрузка. Думаю что в ней нет необходимости, но на всякий случай…

7) (Рисунок 5). Запускаю батник WinsxsLite.bat и выбираю [2] и [s]. Идет процесс сканирования (гораздо быстрее чем в первой фазе, минут 10-15). Во время сканирования формируется файл ToDo2.txt. После сканирования  выбираю [2] и [a]. Идет процесс применения. На рисунке 5 видно что батник ругнулся что у меня ToDo2.txt устарел. Именно поэтому в документации говориться что лучше сканирование и применение делать в одно время иначе, если сделать скан, а потом через несколько дней применить результаты ToDo*.txt, его содержимое может стать неактуальным и система может быть испорчена.

Уменьшение размера папки Winsxs в Windows 7 или как пользоваться WinsxsLite.bat

Рисунок 5.

8) Перезагрузка.

9) Запускаю WinsxsLite.bat. Программа мне говорит что ОС не была перезагружена и требуется перезагрузка (с чего-бы это?). Ну да ладно перезагружаюсь еще раз.

10) Запускаю WinsxsLite.bat. Программа говорит что нужно обработать pending hardlink и предлагает сделать либо Auto start либо Exit. Делаю [A]uto start. Перезагружаюсь.

11) Запускаю WinsxsLite.bat. Срабатывает автостарт, чего-то делает.

Всё наконец-то всё завершено.

Смотрю размеры (Рисунок 6). 16278-15064= 1214 Мб. Ого целый гигабайт освободился.

Уменьшение размера папки Winsxs в Windows 7 или как пользоваться WinsxsLite.bat

Рисунок 6.

——————————————————————————————-

Можно еще сделать [R]elocate folders – позволяет переместить системные папки на другой диск. Полагаю этот пункт стоит использовать только в случае крайней нужды. Я его не делал.

И кстати по проводнику получается что места освободилось совсем мало и почему-то разница в 12 файлов… (Проводник реально неправильно показывает размер папки winsxs).

Размер: 4,14 Гб
Размер на диске: 4,20 Гб
Файлов: 29740
Папок: 7037

Впечатление о батнике в общем положительное, кроме немного запутанного интерфейса и самого процесса и еще очень долго конечно. Вот если переписать всё это под C# с многопоточностью, думаю стало бы работать быстрее.

Запись Уменьшение размера папки Winsxs в Windows 7 или как пользоваться WinsxsLite.bat впервые появилась Dmitry Bobrovsky Blog

Запись опубликована в рубрике !RUS, WINDOWS. Добавьте в закладки постоянную ссылку.
  • maks

    спасибо ребята… у мя 2 гб освободилосьь)))

  • На здоровье! 🙂

    Но еще раз повторю — это очень рискованная операция. Из примерно 5 попыток на разных машинах, одну ОС я умудрился убить…

  • у меня на свежеустановленной системе (кроме апдейтов ничё не ставилось) после освобождения места перестала стартовать одна из утилит, которые юзает данный скрипт, а следовательно это коснётся и другого софта, фтопку такие оптимизации.

  • Вся статья пронизана предупреждениями что это небезопасный способ. Так что вы всё делаете на свой страх и риск, я же просто описываю последовательность действий, чтобы самому не забыть и иметь возможность повторить всё это в последствии.

    Вы кстати, пишете что просто перестала стартовать какая-то утилита, это может еще и ничего, жить можно. Я же реально убил одну ОС,она вообще стала падать с синим экраном. Хотя подозреваю что сам чего-то не так сделал, не внимательно. Батник на самом деле не интуитивен.

  • bear

    Почему при скане (фаза1) пишет Unable to open file такой-то( и «таких-то» набралось уже штук 40), хотя запущена от имени админа (7 х64 SP1)
    и первую фазу сканировать будет наверно часов 10 или больше (за 2 часа 20%)

  • Я так понимаю что невозможность открыть какие-то файлы никак не связана с учеткой от имени которой запускается процедура. Скорее всего эти файлы заблокированы какими-то работающими процессами, т.е. чтобы их освободить нужно позакрывать всё что только можно, программы, службы поостанавливать. Можно еще попробовать запускать процесс в safe mode. Я просто забил на все эти сообщения, ну подумаешь какие-то файлы не оптимизируются — наплевать, их мало по сравнению с общей массой.

    И да, процесс может быть оооочень длительным.

  • Витальга

    а как вернуть обратно папки после relocate folders?

  • relocate folders — это насколько я понял просто перенос системных папок в другое место. Например, у вас на диске С мало места, а на D его много, вот вы и переносите папки с С на D, тем самым освобождая место на С.
    Как вернуть перенесенные папки? Я вижу два способа:
    1) Восстановиться из резервной копии (если вы её конечно же делали). Для резервирования здесь лучше использовать образснимок диска или партиции с помощью, например Acronis True Image.
    2) Можно выполнить relocate folders еще раз и перенести папки обратно с D на С.

  • vovan

    вполне вероятно у тебя работает антивирь. он по ходу пьесы пытается проверить все открываемые скриптом файлы. у меня скрипт в течение 3-4 часов рапотровал одно и то же estimated time ~5 часов 🙂 после отключения каспера процесс прошел за полтора часа.

  • pilot

    А,если сервис пак установлен, то нужноприменять утилиты vsp1cln.exe и compcln.exe? А то как-то, по крайней мере, для меня не очень понятен этот аспект.

  • pilot

    Спасибо, всё стало понятно. И, кстати, в семёрке очистку папки winsxs после установки сервис пака можно выполнить через КМД, вводом команды:
    DISM /online /Cleanup-Image /SPSuperseded — статью об этом можно найти в интернете.
    Но это, конечно, удалятся только файлы системы, ставшие ненужными после установки сервис пака.
    И ещё одно, удалите, пожалуйста, один из моих аккаунтов, например, pilot1846 — это я создал оба, не ожидая, что для отражения моего комментария должно пройти какое-то время, привык, что на форумах он отражается сразу же. Оставьте один — pilot.

  • Насколько я понял эти утилиты для Windows Vista и они предназначены для чистки мусора после установки SP. Но, т.к. наврядли у вас установлена Vista, то и выполнять их не нужно.
    И кстати у меня в архиве с батником WinsxsLite.bat этих утилит нет вообще.

  • pilot

    Три раза пытался, два утилитой версии 1.86 и третий раз версией 1.87 — не посчастило, как говорят. Один раз(средний) переставали работать несколько программ, включая и Касперского, а два раза, по моему, если не все, то близко к этому не хотели запускаться.
    Жаль, конечно, освобождалось три с лишним ГБ диска, но освобождалось уж, видно, чересчур. Получается для меня путь уменьшения папки WinSXS только в переустановке системы. Кстати эта папка у меня уменьшалась очень незначительно, определял программой TreeSize, но общий размер довольно приличный(pashe 1- 1.2 GB, pashe 2- 2.2 GB) — эти размеры выдавались при сканировании. И проводник показывал увеличение свободного пространства на эту же суммарную цифру.

  • После неоднократного применения могу сказать, что процедура очень небезопасн!. Практика показала что лучше проводить её в safe mode, когда минимальное количество заблокированных системных файлов, которые процедура в большинстве случаев не может нормально обработать и это приводит к непредсказуемым последствиям.
    В статье изменил предупреждение 3).

  • pilot

    Значит когда-нибудь попробую ещё четвёртый раз в безопасном режиме, всё-таки интересно, удастся ли одолеть, восстановиться с резервного образа не долго, если снова будут проблемы. Плохо то, что работает утилита очень долго, полдня, считай, приходится терять.

  • Ggeorge

    А как изменить диск на который идет перенос файлов? По умолчанию это D, а как сделать так, чтобы переносилось с D на C?

  • Насколько я понял нужно просто прописать нужный диск в config.txt
    :RELOCATE FOLDERS=D: — здесь нужный диск
    — а это папки которые вы хотите переместить
    $system32$DriverStoreFileRepository
    $system32$DriverStoreTemp
    $win$Installer

    Но я бы поостерегся бы использовать данную фичу, на мой взгляд это очень опасно.

  • pilot

    Как и говорил, сделал попытку всё-таки ещё раз(четвёртый) очистить папку в безопасном режиме. Отключил элементы автозагрузки, установил загрузку в Безопасном режиме и начал первый этап. Прошел , в отличие от операции в обычном режиме, очень быстро, минут за 35-40, показалось, что было многовато файлов, для удаления которых, требовалась перезагрузка. После перезагрузки, при запуске батника — ошибка запуска приложения subinacle.exe. На этом, в принципе, всё и кончается, при каждой попытке запуска сканирования по второй части вылетает это с предложением Y запустить Recovery, которое не срабатывает, и L — Later (позже), которое позволяет провести сканирование, но Apply не удается сделать, постоянно выскакивает Y, которое так и не работает, или L, которое дает только S выдает, а A — нет. В общем надоело мне, вернул обычную загрузку. Система грузится без проблем, программы некоторые (антивирус, скайп и др.) не работают, такой же результат получался и при работе батника в обычном режиме. По-моему, я наигрался, надоело, только, если бы проконсультировал сам Christian Bering Boegh, можно было б ещё раз попытаться.

  • antabu

    Система Win7, корпоративная, Ru, 32 бит установлена в ноябре 12 года. Практически всё, кроме самой системы, расположено на других логических дисках. Все критические обновления устанавливались. Первый бэкап я сделал Акронисом в январе и он весит 3,8 Гига. Второй — в марте, после очередного критического дня Майкрософт, но весит он уже 4,9 Гига и на болванку не влезает. Собстаенно, это обстоятельство и вывело меня на WinsxsLite.
    Выяснилось, что программа запускается только с диска С: и не работает из-под live CD WinXP (другая команда на создание жёсткой ссылки).
    В общем результат меня удовлетворил, хотя «3 pending hardlinks in «C:\$» — waiting for reboot.» но ребут не помогает, вроде, всё работает и бэкап должен войти на DVD.
    С помощью плагина DiskDir на Total Commander сделал список файлов в папке winsxs до обработки. После обработки сравнил его инструментом Синхронизировать каталоги и понял, что программа заменяет старые версии файлов на новые. Подтверждаю, что обычным способом размер папки определяется неправильно, т.к. все жёсткие ссылки суммируются. Но занятое пространство всего диска отображается правильно. Поиск дубликатов файлов, видимо тоже приводит к жёстким ссылкам. Надо ещё повозиться с плагином wdx_nlinfo.

  • Ken

    Pilot, та же фигня… subinacl наотрез отказывается запускаться:) вся печаль в том, что некоторые проги не запускаются… не устанавливаются… а переустановить винду нет возможности пока из-за отсутствия флешки:) весь инет перерыл, чтобы хоть как то решить проблему… но все таки придется сносить… 🙁

  • jovany

    Делал все не спеша пошагово по инструкции и вуаля, липосакция winsxs дала +3ГБ свободного пространства. Уже не первый раз играюсь этим методом. Когда-то таки удалось угробить систему, то ли кривая сборка была, то ли запускал в живой системе, когда следовало в безопасном режиме. Спасибо.
    Помимо этой директории еще захламляется %WINDIR%\System32\DriverStore\FileRepository\ в этом случае использовал метод: http://habrahabr.ru/post/196404/, благодаря которому высвободил еще 3,5ГБ. Итого за счет чисток двух директорий высвободилось дополнительно 6,5ГБ свободного пространства, что на диске в 30ГБ весьма солидный куш =)