Уменьшение размеров winsxs
Вот, снова заинтересовался этой темой. Нормального способа почистить каталог в интернете не нашёл, а он уже 16Гб.
Как думаете, если пройтись по всем активным процессам и выцепить список dll, которые они используют, потом пройтись по всем Program Files, выцепить из всех бинарников список dll, которые они используют, опционально пройтись вообще по всему диску и сделать то же самое для любых исполняемых файлов, а потом удалить из winsxs те dll, которые не окажутся в списке dll собранном ранее, система упадёт?
У кого-нибудь есть идеи, что может отломаться, если сделать так?
Ясный перец. Потому-что есть DLL которые используются раз в день(например при запуске). А сканеры процессов могут дать не точную инфу о dll or exe файлах и что тогда. Это относиться и clear реестра "Профессиональная программа для переустановки ОС " откуда знать программе clear реестра нужны те или иные параметры. Есть программы которые делают снимок системы потом setup программу и если надо удалить применяется снимок. И то это не факт что удалится все т.к вовремя работы программы измениться реестр или добавиться файлы.
Я не могу понять , что Вы так волнуетесь о 16гб это во времена DOS диски были 40МБ. А наше время 100ГБ туда сюда.
Не мешайте системе работать!
Если dll была подгружена процессом хотя бы раз, то тут уже никак не ошибиться, если процесс, конечно, ещё в памяти. Всё остальное вытягивается, как из обычного бинарника на диске, хотя можно и таблицу загруженного процесса анализировать.
100Гб тоже не бесконечные. 25Гб Windows каталога становятся проблемой. Ни игр не поставить нормально, ни виртуальные машины. На SSD винтах итого меньше объём.
Насчет сканеров возмите два разных, и результат будет разный.
А просматривать километровые отчеты не благодарное дело. Да Вы сами понимаете, что это не прокатит. Думаю, что можно сделать это отключить Восстановление системы, уменьшить размер для корзины
Это мой вид
На счет SSD два диска накрылись сразу после гарантии решил пока не брать.
Использую RAID0 и RAID5
Сканер писать буду сам, поэтому и хочу узнать, что не учёл, чтобы случайно не удалить что-то нужное.
тоже шерстил гугль, тоже ничего путного не нашел
единственное, что сделал - это поставил наследуемый атрибут сжатия папки
выиграл слезы
На самом деле не всё так просто. Ведь название WinSxS дано не просто так, и расшифровывается оно как syde-by-side. Зависимости из бинарника так просто не вытянешь, ибо они не прописаны в импорте напрямую, а реализуются с учётом файла манифеста. Тогда тебе у каждого исполнимого (желательно не по расширению, а по содержимому смотреть) файлу читать ресурсы, вычленять оттуда манифест и нутыпонел
Кстати, затея меня немного заинтересовала, и я бы даже взялся за реализацию каким-нибудь образом. Обросчайса
P.S. Ты норкоман штоле? Мне прям интересно, что ты туда ставил, потому что у меня эта папка весит всего лишь 112 Мб
Имеешь в виду, что строки для LoadLibrary не прописаны в сегменте данных, а находятся в ресурсах?
Можно будет покодить эту шняжку вместе.
Ну охренеть теперь, я что, уникален по этому параметру?
Обновления ставил и ставлю регулярно, да и всякие программки, которые используют S×S, тоже иногда проскакивают
Не совсем так, но идею ты понял. Более конкретно — S×S-модули прописаны в секции импорта так же, как и обычные (т.е. только по имени), а загрузчик берёт конкретный путь к ним с учётом манифеста. Подробности не скажу где (понимаю, размер большой, но оно того стоит)
Вот в том самом манифесте он и есть
Используются все, но только установленными приложениями. После удаления приложения (если, конечно, установщик не кривой) сборки тоже должны удаляться
Собственно, почему бы и нет? Правда, я не предполагаю, как мы будем делать это совместно, но как минимум обсудить и подсказать что-то я могу
2. Папка WinSxS содержит hard links(жесткие ссылки) на системые файлы расположенные в других местах. Поэтому Explorer покажет вам размер системы гораздо больший, чем это есть на самом деле (огромное число файлов посчитается не по одному разу).
3. Папка WinSxS содержит подпапку Backup, где храниться копия восстановления системы. Если раньше она расла и росла после установки компонент, сервис паков, обновлений системы и драйверов, то сейчас через некоторое время папка будет самоочищаться.
Проблема размера системы самым серьезным образом проанализирована разработчиками Windows 7 (не только папки WinSxS!) и в систему внесены существенные изменения, которые не только уменьшили начальный ее размер, но и предотвращают ее раздувание со временем.
Некоторые блоги и ряд утилит для тонкой настройки говорят вам о том, что ничего страшного в том, чтобы удалить папку WinSxS, нет. И это правда, что сразу после установки вы можете удалить ее, но после загрузки она появится вновь. Но как вы понимаете, ничего, кроме лишней головной боли, это не принесет, поскольку удалив эту папку, вы лишите систему возможности обслуживания, обновления и настройки опциональных компонентов системы. Высвобождаемое при удалении или перемещении папки пространство не стоит этого риска.
источник
mklink /h новая_ссылка источник
fsutil hardlink create новая_ссылка источник
P.S. Как я понял, задача решения этой проблемы уже неактуальна? Я тут подумал, что было бы глупо делать хардлинки на имеющиеся файлы, потому как изоляция на то и изоляция, чтобы разделять РАЗЛИЧНЫЕ версии. Но тут вопрос спорный, да, не мешало бы проверить
В сети есть скрипт, который заменяет хардлинки на старые библиотеки хардлинками на новые, а старые вообще сносит, но вот это делать как-то боязно.
• найденных модулей с зависимостями от WinS×S
• не-/используемых сборок
В процессе прогона выяснились как минимум 2 неприятные вещи: 1-я вполне логична — грузятся абсолютно все файлы (вернее, осуществляется попытка их загрузки), что не есть быстро; 2-я — в загрузке SFX-архивов размером в несколько сотен Мб хорошего тоже мало, особенно когда у тебя 1 Гб оперативки на всё про всё ☺
Так что вижу следующие направления изменений в порядке приоритетности: проверка размер файлов (задать какой-то максимальный порог, выше которого файл не загружается), проверка исполнимости файла (просто хотя бы по сигнатуре MZ, ибо DOS- и NE-приложений много вряд ли будет), создание списка, какое приложение какую сборку использует (ну это уже финальная фича, просто для информации)
А с диска С запустился.
Сдаётся мне, это умолчанский C++сный main() напортачил
Ну а когда запускал с С:, то в консоли появилось много чего. Даже чересчур много. Ты как-нибудь проверял, что выводятся именно неиспользуемые сборки?
И чего так медленно работает? Диск почти не дёргает, да и памяти всего ~3 мегабайта заняло. На чём ты там экономишь?
В консоли пишутся имена модулей, в которых найдены зависимости, затем, как можно догадаться из текстов, найденные зависимости (когда processorArchitecture="*", туда ещё 64-разрядные подставляются) и затем неиспользуемые папки (среди всего прочего manifests и policies, но их уже вручную можно отфильтровать, раз голова есть)
Скорость работы ты можешь оценить, глянув код программы (я бы написал «ке-ке-ке, там вирус, но не могу, т.к. выложил исходник, а не егзе). Просто анализирутся вообще все файлы. Сейчас займусь оптимизацией
Экономлю ни на чём =) У меня памяти не более мегабайта отнимало (если не учитывать отмапаные модули), а вот диск дёргало нипадецки. Ещё бы, рекурсивный поиск, а затем загрузка каждого модуля
Upd.: вполне возможно, что ругается на символ «×» в названии папки. Сразу-то и не догадался ☺