среда, 19 июня 2019 г.

Что такое WofCompressedData?

Это перевод What is WofCompressedData? Does WOF mean that Windows is a dog? Автор: Реймонд Чен.

При выполнении анализа производительности своей программы клиент обнаружил, что в программе происходят чтения из альтернативного потока данных с названием WofCompressedData. Если вы поищите упоминания «WofCompressedData» в Интернете, то в основном найдёте вопросы о том, что это такое. В ответах кто-то высказывает предположение, что это вредоносное ПО, а кто-то подозревает (или даже уверенно заявляет), что это артефакт антивирусного программного обеспечения, и его можно удалить.

Что же такое WofCompressedData?

В документации к wofapi.h сказано просто: «Этот заголовочный файл используется Data Access and Storage». Он также ссылается на другую веб-страницу, которая не содержит никакой дополнительной информации.

WOF расшифровывается как Windows Overlay Filter (фильтр наложения Windows) - хорошее название, которое мало что говорит о том, что же оно делает и для чего.

Во-первых, давайте посмотрим, как устанавливалась Windows ​​до введения Windows Overlay Filter.

Установка Windows начинается с файла install.wim, который содержит практически всю Windows. WIM-файл - это файл-контейнер, по духу похожий на другие файлы-контейнеры, такие как ZIP и Cabinet. Традиционно файл WIM копируется в раздел восстановления для использования в чрезвычайных ситуациях, таких как кнопка сброса. При установке Windows содержимое файла WIM распаковывается, и на загрузочном томе создаются копии файлов, и именно эти несжатые файлы используются при запуске Windows. Файл WIM находится в вашем разделе восстановления, он игнорируется при запуске, но ожидает своей возможности принести пользу в случае необходимости.

Этот традиционный способ установки означает, что каждый системный файл Windows присутствует дважды: как сжатая копия в файле WIM в разделе восстановления, и как несжатая копия - в уже установленной Windows.

В Windows 8.1 появилась функция, известная как загрузка Windows из файла образа (Windows Image File Boot, WIMBoot): производитель системы может настроить систему так, чтобы раздел восстановления содержал файл install.wim (а также файл custom.wim, содержащий настройки OEM вроде драйверов для любого специального оборудования). Но вместо того, чтобы распаковывать файлы и копировать их в живую установку Windows, WIMBoot создает крошечные маленькие заглушки в установленной Windows, которые говорят: «Эй, я просто заглушка. Если вы хотите просмотреть содержимое, вы должны распаковать вон те байты оттуда». Поэтому WIMBoot избегает дублирования, позволяя установленной Windows совместно использовать дисковое пространство с файлом WIM в разделе восстановления.

Кроме того, поскольку файлы в WIM хранятся сжатыми, это уменьшает объём дискового ввода-вывода, хотя, естественно, за счёт более высокой загрузки ЦП для выполнения распаковки.

Эта магия работает за счёт того, что файлы Windows формально являются разрежёнными (sparsed) файлами NTFS, поэтому при запросе размера файла вы получаете правильное число, даже если в них нет фактических данных. Когда вы открываете файл, включается Windows Overlay Filter и генерирует данные, распаковывая данные из файла WIM по требованию.

В отличие от собственного сжатия файлов NTFS, Windows Overlay Filter поддерживает только операции чтения. Это означает, что нет необходимости выравнивать секторы каждого сжатого фрагмента¹, так что сжатые данные могут быть сохранены более плотно. Если вы открываете файл для записи², Windows Overlay Filter просто распаковывает весь файл, превращая его обратно в простой файл³. Во время выхода в свет возможности WIMBoot был также опубликован документ с инструкциями, предупреждающими вас не открывать файлы для записи без необходимости. Вообще, это хороший совет в целом, без привязки к WIMBoot - не открывать файлы для записи без необходимости, но это особенно важно для WIMBoot, чтобы предотвратить ненужное преобразование.

Windows Overlay Filter может использовать преимущества более новых алгоритмов сжатия, разработанных за последние 20 лет - алгоритмов, которые обеспечивают более высокие коэффициенты сжатия, могут выполняться параллельно на нескольких ядрах и которые требуют меньше ресурсов ЦП и памяти для декомпрессии. Он также может использовать алгоритмы, адаптированные к сценарию: например, он может выбирать алгоритмы, в которых сжатие стоит дорого, а распаковка - дёшево.

Изменение собственного сжатия файлов NTFS будет переломным изменением формата диска. Поэтому реализация в виде отдельного фильтра обеспечивает гораздо большую гибкость. Недостатком является то, что если вы смонтируете том в системе, которая не поддерживает Windows Overlay Filter, всё, что вы увидите, - это пустые файлы. К счастью, WOF используется только для файлов, установленных системой, и если вы монтируете том в другую систему, то делаете это, вероятно, для целей восстановления данных, поэтому вас интересуют пользовательские данные, а не системные файлы.

Фильтр называется «фильтром наложения Windows», потому что он «накладывает» виртуальные файлы в каталог, который также содержит обычные физические файлы.

Прочитав приведенное выше описание, вы, возможно, поняли ещё кое-что: всякий раз, когда Центр Обновления Windows обновляет файл, этот файл преобразуется из виртуального файла в обычный несжатый физический файл, поскольку данные файла больше не находятся в файле WIM. Это означает, что со временем системные файлы Windows занимают всё больше и больше дискового пространства, преобразуясь из сжатой формы в обычные файлы.

В Windows 10 появилась функция, известная как Compact OS, которая использует другой подход. Благодаря Compact OS Windows Overlay Filter получает возможность повторного сжатия файлов: на основе проверки производительности система может принять решение взять обновленные файлы, повторно сжать их, сохранить сжатые данные в альтернативном потоке данных WofCompressedData и освободить исходные несжатые данные, используя тот же прием «разрежённого файла», чтобы файл выглядел так, как если бы он был обычным файлом.

Если вы откроете один из этих повторно сжатых файлов, файл будет распакован на лету из данных в альтернативном потоке данных WofCompressedData. И, как и раньше, если вы откроете один из этих файлов для записи, то файл вернётся в несжатый вид.

Бонусное обсуждение:
Вы можете использовать функцию WofShouldCompressBinaries, чтобы определить, использует ли система WOF для сжатия системных файлов. Из командной строки вы можете использовать программу compact.exe для проверки состояния сжатия выбранного файла или системы.

Да, и возвращаясь к первоначальному вопросу клиента: выбор системы использовать сжатие Windows Overlay Filter требует небольшого количества параллельных вычислений, чтобы сэкономить небольшое количество операций ввода-вывода. Теоретически возможно, что вы наткнулись на конфигурацию оборудования, когда автоматическая оценка системы предложила использовать Windows Overlay Filter, хотя это была чистая потеря производительности. Я полагаю, что это произойдет, если у вас будет действительно быстрое устройство хранения данных, подключенное к медленному ЦП, и ему каким-то образом удалось обмануть автоматическую оценку, которая посчитала, что сжатие было хорошей идеей. На практике довольно необычно иметь аппаратную конфигурацию, состоящую из быстрого хранилища и медленного процессора.

Большое спасибо Малкольму Смиту за помощь в этой статье.

¹ Выравнивание секторов было необходимо для того, чтобы данные могли быть перезаписаны в середине файла. Но поскольку Windows Overlay Filter не поддерживает запись, то не требуется и принудительное выравнивание секторов.

² Поскольку эти файлы являются системными файлами Windows, для открытия их для записи требуется доступ администратора. Поэтому обычное использование системы не приведёт к декомпрессии файлов.

³ Такое поведение «распаковка при записи» просто описывает текущее поведение и не является договорным.

Читать далее:

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.

Примечание. Отправлять комментарии могут только участники этого блога.