Как из папки с файлами сделать список файлов

как из папки с файлами сделать список файлов compress-96Недавно я рассказал о том, как грамотно уменьшить объем папки WinSxS. Сегодня я бы хотел вернуться к этой теме и показать вам, что происходит под капотом системы в процессе оптимизации хранилища компонентов Windows.

В предыдущей статье мне не удалось достичь желаемого баланса между простотой инструкций и глубиной объяснений. Задачу также усложняли различия в функциональных возможностях Windows 8 и 8.1. Я решил оставить первый материал в качестве пошаговой инструкции, а в этой статье рассмотреть технические аспекты.

У вас Windows 7? Читайте Как грамотно уменьшить размер папки WinSxS в Windows 7 SP1

[+] Сегодня в программе

Три способа уменьшить объем папки WinSxS

Напомню, что в Windows 8 и 8.1 предусмотрено три способа:

  1. Параметр /StartComponentCleanUp утилиты DISM
  2. Очистка обновлений Windows в утилите «Очистка диска»
  3. Запланированное задание StartComponentCleanup

Технически все они делают одно и то же, хотя задание в планировщике не трогает компоненты обновлений, установленных в последние 30 дней. Давайте посмотрим, как проходит оптимизация.

Что происходит в процессе оптимизации папки WinSxS

При использовании любого из трех способов в Windows 8 и 8.1 оптимизация ведется по двум направлениям:

  1. Удаление старых версий компонентов.
  2. Сжатие неиспользуемых и старых версий некоторых компонентов.

Чем дольше проработала система, тем больше обновлений установилось, и тем больше компонентов удаляется и/или сжимается. Поэтому процесс может быть долгим, поскольку сжатию подвергается много файлов.

Эксперимент по оптимизации папки WinSxS

В моем распоряжении была виртуальная машина с Windows 8, на которой оптимизация ни разу не выполнялась. Папка WinSxS содержала 15755 подпапок (количество файлов я не подсчитывал).

Утилита cleanmgr, запущенная с полными правами, обещает златые горы! Но не стоит особо полагаться на ее данные, т.к. утилита склонна сильно ошибаться, причем в обе стороны.

Как уменьшить размер папки winsxs

В таблице ниже вы видите результаты оптимизации. Отмечу, что экономия дискового пространства определялась по данным, которые проводник показывает в свойствах диска (о корректности различных методов измерения места на диске как-нибудь в другой раз).

Как уменьшить размер папки winsxs

Как видите, удалось сэкономить чуть ли не в два раза больше места, чем обещала утилита очистки диска! Давайте разберемся, что стоит за цифрами в таблице.

Какие файлы удаляются и почему

Я не задавался целью отслеживать конкретные файлы, и ограничился только папками. Чтобы получить список удаленных папок, нужно сравнить состав папки WinSxS до и после оптимизации. Ниже вы видите, что произошло с компонентами Adobe Flash Player.

Как уменьшить размер папки winsxs
Увеличить рисунок

В процессе оптимизации исчезли шесть папок с предыдущими версиями, но три папки сохранились. Чтобы разобраться в происходящем, нужно изучать систему обслуживания (Component Based Servicing) и CBS.log, объемом в десятки мегабайт. Это довольно скучное занятие, поэтому я постараюсь описать процесс покороче :)

Во время оптимизации CBS ориентируется на хранилище пакетов, извлекая оттуда информацию о состоянии и атрибутах сохранения пакетов, а также версиях компонентов. Например, если пакет помечен в качестве постоянного, система обслуживания его пропускает, оставляя в целости и сохранности.

2013-09-04 21:51:58, Info CBS Skipping package [Package_for_KB277143131bf3856ad364e35amd646.2.1.3] since it is permanent

В случае же с версиями, CBS ищет предыдущую версию компонента, которая необходима для отката при удалении обновления. Продолжая пример с Adobe Flash на картинке выше, самой новой версией является 20760, но для корректного отката компонентов Adobe Flash необходима предыдущая версия за номером 16653.

2013-09-04 21:52:24, Info CBS Appl: Selfupdate, Component: amd64_adobe-flash-for-windows_31bf3856ad364e35_0.0.0.0_none_ab9875376a174135 (6.2.9200.20760), elevation:3, lower version revision holder: 6.2.9200.16653

Сохранение предыдущей версии позволяет удалить обновление KB2857645, доставившее версию пакета 20760 (к версии файлов Adobe она не имеет отношения, как вы можете убедиться из статьи базы знаний).

Как уменьшить размер папки winsxs

Ситуацию запутывает тот факт, что предыдущей версией для 20760 считается 16653, а не 20711, но тут я ничего не могу поделать :) Что же касается версии 16384, то она была исходной, т.е. частью ОС, а не пришедшего обновления.

Остальные шесть папок были удалены, потому что с версией 20760 их ничто не связывает. Одной из них являлась 20711, пришедшая в составе KB2837385. Удаление ненужного пакета и зачистка его регистрации в системе отражаются в журнале.

Фрагмент журнала CBS.log

Если вы хотите углубиться еще дальше в темный лес системы обслуживания и владеете английским языком, рекомендую материалы из блога Джозефа Конвея:

Какие файлы сжимаются и почему (устарело)

Этот раздел файлов статьи был написан до того, как Microsoft изменила технологию сжатия в Windows 8.1 и портировала ее в Windows 8. Неизменным осталось лишь то, что сжатию подвергаются замененные и неиспользуемые компоненты, а в остальном раздел представляет теперь только исторический интерес. Подробности вы найдете ниже в статье.

Экономия дискового пространства при оптимизации хранилища достигается также за счет сжатия. Проводник выделяет сжатые файлы и папки синим цветом, но из корня папки WinSxS наличие сжатых файлов неочевидно. Дело в том, что сжимаются не папки целиком, а отдельные файлы. Здесь сподручнее воспользоваться утилитой TreeSize, которая сходу подсвечивает синим папки со сжатыми файлами.

Как уменьшить размер папки winsxs
Увеличить рисунок

Как видно на левой части рисунка, в Windows 8 сжатию подверглись файлы в папках Backup и Manifests, а также некоторые папки с компонентами. (В скобках замечу, что в Windows 8.1 Preview папки Backup и Manifest не сжались, что оставляет поле для исследований по мере выхода дальнейших обновлений). Утилита также умеет отображать степень сжатия для папки, что показано на правой части рисунка.

Файлы в папке Manifests сжимаются хорошо, поскольку манифесты представляют собой текстовые файлы в формате XML. Выполнив команду compact в папке, можно получить подробную статистику:

Всего файлов: 22086, каталогов: 1. Из них сжато: 19510, не сжато: 2576. Данные объемом 347 734 445 байт сохранены в 139 504 361 байт. Степень сжатия 2,5 к 1.

В CBS.log можно увидеть отчет о числе сжатых компонентов и файлов. При этом манифесты, составляющие подавляющее большинство, подсчитываются отдельно, хотя их окончательное число не указывается.

2013-09-04 21:54:44, Info CSI 00000036 NTFS compress for: [l:136{68}]"amd64_1394.inf_31bf3856ad364e35_6.2.9200.16384_none_53f8fe038fac2809" … 2013-09-04 21:59:00, Info CSI 00000570 NTFS compression complete. Total component compressed: 1338 (0x0000053a), total file compressed: 3125 (0x00000c35) … 2013-09-04 22:23:41, Info CSI 0000059c@2013/9/4:18:23:41.607 Completed compression of 19000 (0x00004a38) manifests … 2013-09-04 22:24:18, Info CSI 000005a5@2013/9/4:18:24:18.065 Completed compression of manifests

Обратите внимание на длительность выполнения операций (символами … я обозначил вырезанные из журнала строки) — сжатие заняло полчаса. Конечно, нужно сделать поправку на два момента:

  1. Система работала на виртуальной машине Hyper-V с одним выделенным процессором, 2GB RAM и VHD на SSD.
  2. Объем установленных обновлений был достаточно велик, а оптимизация папки WinSxS ранее не проводилась.

Журнал CBS не раскрывает подробностей о критериях, служащих основанием для сжатия. Но с помощью утилиты TreeSize можно увидеть, например, что сжимаются отключенные компоненты. Так, в Windows изначально отключен компонент Telnet, и все его компоненты подверглись сжатию.

Как уменьшить размер папки winsxs
Увеличить рисунок

Похожая картина наблюдается и с компонентом Hyper-V, который не активирован в моей экспериментальной системе.

Какое сжатие применяется

Этот раздел статьи я добавил значительно позже, когда появилась официальная информация об изменениях в стеке обслуживания Windows 8.1.

В Windows 8, 8.1 и 10 сжимаются компоненты, для которых уже установлены более новые версии. Изначально в Windows 8 для этого применялось сжатие NTFS. Разностное сжатие появилось только в Windows 8.1 и продолжает использоваться в Windows 10 (его также портировали в Windows 8, выпустив обновление KB2821895).

Разностное сжатие

В блоге Ask the Core Team появилась серия статей об изменениях в системе обслуживания Windows 8.1. В частности, во второй записи подробно разбирается алгоритм разностного сжатия (delta compression).</п>

Разностное сжатие применяется только для замененных компонентов. Одна версия файла используется в качестве базовой, а остальные выражаются как «база + дельта изменений». Сжимаются только дельты, поэтому для декомпрессии необходима базовая версия файла.

Разностное сжатие применяется к актуальному компоненту на момент выполнения операции сжатия, поэтому дельты конкретных компонентов могут отличаться на разных ПК (например, в зависимости от частоты установки обновлений).

Ниже приводятся выдержки из CBS.log, где многоточия обозначают удаленные мной фрагменты. Вы видите операции сжатия, впервые появившиеся в Windows 8.1 (сам лог из Windows 10, кстати). Сначала анализ определяет кандидатов на разностное сжатие, а спустя 10 минут рапортует о завершении, после чего начинаются совсем загадочные операции Null-Delta compression.

2015-10-20 15:10:50, Info CSI 00000026 Scavenge: Planning Complete. The following actions will be performed: Regeneration Candidates: 0 Removal Candidates: 3 Superseded/LDR (Delta Compression) Candidates: 133 Null-Delta Compression Candidates: Mutable file Candidates: 1 Boot-Recovery Candidates: 14 Deletion Candidates (Non Driver): 0 Driver Deletion Candidates: 1... 2015-10-20 15:20:42, Info CSI 00000255 Delta compression complete. Total number of components compressed: 133 (0x00000085), Total file compressed: 245 (0x000000f5), Total files untouched: 257 (0x00000101), Total file skipped due to backing: 0, Total file size compressed:472088576, Total delta file size: 23932928, compression ratio: 94% 2015-10-20 15:20:42, Info CSI 00000256 Beginning Null-Delta compression of components with mutable files... 2015-10-20 15:20:42, Info CSI 0000025b Null-Delta compression of mutable files complete. Total files compressed: 1, Total files untouched: 0, Total files skipped due to backing: 0, Total file size compressed:16384, Total delta file size: 4096, compression ratio: 75% 2015-10-20 15:20:42, Info CSI 0000025c Beginning Null-Delta compression of boot-recovery components... 2015-10-20 15:21:31, Info CSI 00000295 Null-Delta compression of boot-recovery components complete. Total files compressed: 26 (0x0000001a), Total files untouched: 0, Total files skipped due to backing: 0, Total file size compressed:102842368, Total delta file size: 35291136, compression ratio: 65%

В комментариях к записи блога я поинтересовался, можно ли визуально определить файлы под воздействием разностного сжатия. Сотрудники Microsoft ответили, что файлы получают атрибут «Сжатый», однако я пока не нашел этому подтверждений. В журнал имена сжимаемых файлов не пишутся (в отличие от пропускаемых), а в Windows 10 у меня в папке WinSxS вообще нет файлов с атрибутом «Сжатый», хотя в Windows 8.1 таковые имеются. Все очень запутано :)

Сжатие NTFS

В CBS.log Windows 8.1, однако, фигурирует и сжатие NTFS. В ответ на мой вопрос авторы публикации любезно пояснили, что оно применяется только к драйверам. Причиной тому жесткие ссылки между хранилищами компонентов и драйверов. В этом случае разностное сжатие повлечет за собой создание еще одной копии файла и увеличение занимаемого места на диске.

Неясности

Публикации в блоге Ask the Core Team раскрыли принципы технологии, но породили вопросы о тонкостях процесса. Я задал вопросы о regeneration, null-delta compression и т.д. в комментариях ко второй записи, но ответа не получил. Возможно, когда-нибудь срыв покровов произойдет…

Удаление всех предыдущих версий компонентов (8.1 и новее)

Эту часть в слегка измененном виде я перенес сюда из ранее опубликованной статьи, чтобы подчеркнуть нововведение в Windows 8.1, связанное с появлением у параметра /StartComponentCleanup нового ключа /ResetBase. Он отвечает за удаление всех предыдущих версий компонентов, включая исходные версии.

Для этого эксперимента я использовал виртуальную машину с 32-разрядной Windows 8.1 Preview, поэтому версии Adobe Flash отличаются от описанных выше на примере 64-разрядной ОС.

Как уменьшить размер папки winsxs
Увеличить рисунок

На рисунке выше вы видите состояние:

  1. До очистки.
  2. После очистки с ключом /StartComponentCleanup, что оставляет возможность откатиться к предыдущей версии.
  3. После очистки с ключом /StartComponentCleanup /ResetBase, что не оставляет возможности отката.

После применения ключа /ResetBase обновления удалить уже невозможно. Для установленных обновлений в списке appwiz.cpl пропадает кнопка «Удалить», потому что откатываться уже некуда.

Как уменьшить размер папки winsxs

Надеюсь, теперь белых пятен в механизме очистки папки WinSxS стало меньше :) А вы уже проводили оптимизацию папки WinSxS в Windows 8? Напишите в комментариях, сколько места сэкономили!


Источник: http://www.outsidethebox.ms/15302/


Рекомендуем посмотреть ещё:


Закрыть ... [X]

Как удалить стартовую страницу Казино Вулкан удачи Воспаление десна после установки коронки

Как из папки с файлами сделать список файлов Интернет-магазин канцтоваров Канцтовары оптом
Как из папки с файлами сделать список файлов Восстановление Windows 8 и 8.1 с помощью функции
Как из папки с файлами сделать список файлов Как сделать загрузочный флэш-брелок с WinPE?
Как из папки с файлами сделать список файлов Установка и настройка DC-клиента (на базе)
Как из папки с файлами сделать список файлов Восстановление поврежденных, удаленных
Как из папки с файлами сделать список файлов Скачать Grand Theft Auto V 2013 через торрент
Альманах попаданцев от А до Я. Библиотека - RusLit Губы Стали Чужими - скачать mp3 Слушать музыку онлайн Делаем крепление для эхолота своими руками видео Детский комбинезон крючком - Самое интересное в блогах КАК ПРАВИЛЬНО СДЕЛАТЬ ЭЛЕКТРО ПРОВОДКОМЕ СВОИМИ РУКАМИ