PAX (Pre-Allocate eXtension) — это формат сжатого архива с открытым исходным кодом, разработанный Microsoft как современная альтернатива существующим форматам, таким как ZIP, RAR и tar. Он был разработан для устранения ограничений и улучшения сжатия, производительности, безопасности и функциональности обработки архивов на современных системах и устройствах.
Ключевые отличительные особенности формата PAX включают улучшенное сжатие с использованием современных алгоритмов, эффективный произвольный доступ к файлам в архивах, встроенную поддержку многопоточности, расширяемые метаданные, встроенное шифрование и проверку целостности, а также документированную открытую спецификацию для поощрения широкого внедрения и взаимодействия.
Архивы PAX используют расширение файла .pax и имеют многокомпонентную внутреннюю структуру, состоящую из заголовка, центрального каталога, сжатых блоков данных и нижнего колонтитула. Это позволяет хранить ключевую информацию, такую как содержимое архива, параметры сжатия и хэши целостности, отдельно от фактических сжатых данных файла.
Заголовок PAX начинается с 4-байтового магического числа (50 41 58 00 в шестнадцатеричном формате) для идентификации. Затем он содержит поля для версии PAX, метода сжатия, метода шифрования, метода хэширования, размера блока, количества параллельных потоков сжатия и различных флагов. Заголовок заканчивается расширяемыми метаданными XML, содержащими подробную информацию об архиве.
За заголовком следует центральный каталог PAX. Он содержит запись для каждого сжатого файла/папки в архиве, храня полный путь, атрибуты, размеры, смещения блоков и хэши. Наличие этого в одном месте позволяет эффективно перечислять содержимое архива и осуществлять произвольный доступ к отдельным файлам без сканирования сжатых данных.
Основная часть архива PAX представляет собой серию сжатых блоков данных. Каждый блок имеет небольшой заголовок, указывающий несжатый и сжатый размер, за которым следует фрагмент данных файла, сжатый с помощью настроенного алгоритма. По умолчанию размер блоков составляет 1 МБ, но это можно настроить в заголовке архива.
Сжатые блоки данных по желанию шифруются, если указан метод шифрования. PAX поддерживает современные схемы шифрования, такие как AES-256. Пароль архи ва используется для получения ключа, который шифрует каждый блок независимо, что обеспечивает эффективный произвольный доступ. Для аутентификации PAX хэширует пароли с помощью защищенного KDF.
Для сжатия PAX поддерживает множество современных универсальных кодеков, оптимизированных для быстрой декомпрессии: LZMA, LZ4, Brotli, Zstandard и т. д. Он также допускает использование препроцессоров для дальнейшего уменьшения размера для определенных типов файлов (например, кодирование Delta для EXE/DLL, кодирование E8E9 для кода x86). Кодеки и препроцессоры применяются в конвейере.
Чтобы обеспечить эффективное многопоточное сжатие, файлы разделяются на независимо сжатые блоки, которые могут обрабатываться параллельными экземплярами кодека. Компрессор PAX автоматически масштабируется для использования всех доступных ядер ЦП. Подобное разделение позволяет осуществлять параллельную декомпрессию для более быстрой распаковки.
PAX обеспечивает целостность данных и обнаружение несанкционированного доступа путем хранения хэшей исходных и сжатых данных. Архивы содержат хэш заголовка для обнаружения усечения. Центральный каталог также хэшируется, чтобы предотвратить несанкционированный доступ к метаданным файла. Повреждение битов в сжатых данных обнаруживается путем хэширования каждого блока.
В конце архива PAX находится нижний колонтитул. Он содержит копию полей заголовка, смещение/размер центрального каталога и хэш всего архива. Нижний колонтитул имеет фиксированный размер и всегда находится в конце файла, что позволяет легко находить и проверять архивы PAX.
Архивы PAX можно эффективно обновлять, изменяя центральный каталог и добавляя измененные блоки данных, вместо того чтобы переписывать целые архивы, как в ZIP. Целые файлы можно вставлять, удалять или заменять, обновляя метаданные и добавляя/удаляя соответствующие блоки. Архивы также можно быстро добавлять.
Чтобы смягчить уязвимости zip-slip, PAX требует явных путей (без перехода ../) и предотвращает запись за пределами корня извлечения. Длинные поля метаданных ZIP, которые допускали отказ в обслуживании, ограничены. Бомбы сжатия смягчаются за счет ограничений коэффициента сжатия и использования памяти.
Временные метки файлов в архивах PAX используют стандартный 64-битный формат, охватывающий широкий диапазон дат с точностью до 1 секунды. Поддерживаются атрибуты для разрешений POSIX и списков управления доступом Windows. PAX может хранить альтернативные потоки данных NTFS и разветвления ресурсов. Символьные и жесткие ссылки также могут быть представлены.
Пакет SDK PAX с открытым исходным кодом предоставляет простые API для создания, извлечения, обновления и проверки архивов PAX программным способом. Он обрабатывает все низкоуровневые детали формата PAX. Пакет SDK доступен на нескольких языках, включая C, C++, C#, Java, Python, JavaScript, Go и Rust.
Подводя итог, формат архива PAX опирается на основу проверенных форматов, таких как ZIP, при этом вводя современные функции и оптимизации — эффективное сжатие, многопоточность, произвольный доступ, безопасность и открытую спецификацию. Это делает PAX идеальным для широкого спектра сценариев архивирования в современных системах.
Сжатие файлов - это процесс, сокращающий размер файлов данных для эффективного хранения или передачи. Он использует различные алгоритмы для сжатия данных за счет выявления и удаления избыточности, что часто значительно сокращает размер данных без потери оригинальной информации.
Существует два основных типа сжатия файлов: без потерь и с потерями. Сжатие без потерь позволяет восстановить исходные данные из сжатых данных без потерь, что идеально подходит для файлов, где каждый бит информации важен, например, текстовые или базы данных. Обычные примеры включают форматы файлов ZIP и RAR. С другой стороны, сжатие с потерями удаляет менее важные данные, чтобы еще больше уменьшить размер файла, что часто используется в аудио-, видео- и графических файлах. Примерами могут служить JPEG и MP3, где некоторые потери данных не существенно снижают восприятие качества контента.
Сжатие файлов полезно многими способами. Оно экономит пространство хранения на устройствах и серверах, снижает затраты и повышает эффективность. Также ускоряет время передачи файлов по сетям, включая интернет, что особенно ценно для больших файлов. Более того, сжатые файлы можно сгруппировать в один архивный файл, что помогает в организации и облегчает передачу нескольких файлов.
Однако у сжатия файлов есть и некоторые недостатки. Процесс сжатия и распаковки требует вычислительных ресурсов, что может замедлить работу системы, особенно для больших файлов. Кроме того, в случае сжатия с потерями, некоторые исходные данные теряются в процессе сжатия, и результирующее качество может не быть приемлемым для всех целей, особенно для профессиональных приложений, требующих высокого качества.
Сжатие файлов - критически важный инструмент в современном цифровом мире. Оно повышает эффективность, экономит место хранения и уменьшает время загрузки и выгрузки. Тем не менее, оно имеет свои недостатки в отношении производительности системы и риска ухудшения качества. Поэтому важно учитывать эти факторы при выборе подходящего метода сжатия для конкретных потребностей в данных.
Сжатие файлов - это процесс, который уменьшает размер файла или файлов, обычно для экономии места на диске или ускорения передачи по сети.
Сжатие файлов работает путем идентификации и удаления избыточности в данных. Оно использует алгоритмы для кодирования исходных данных в более маленьком пространстве.
Два основных типа сжатия файлов: без потерь и с потерями. Сжатие без потерь позволяет восстановить исходный файл целиком, в то время как сжатие с потерями обеспечивает более значительное уменьшение размера за счет небольшой потери в качестве данных.
Популярным примером инструмента для сжатия файлов является WinZip, который поддерживает несколько форматов сжатия, включая ZIP и RAR.
При сжатии без потерь качество остается неизменным. Однако при сжатии с потерями может быть заметное снижение качества, поскольку оно удаляет менее важные данные для более значительного уменьшения размера файла.
Да, сжатие файлов безопасно с точки зрения целостности данных, особенно при сжатии без потерь. Однако, как и любые файлы, сжатые файлы могут стать целью для вредоносного ПО или вирусов, поэтому всегда важно иметь надежное программное обеспечение безопасности.
Почти все типы файлов можно сжимать, включая текстовые файлы, изображения, аудио, видео и программные файлы. Однако уровень достижимого сжатия может значительно варьироваться в зависимости от типа файла.
ZIP-файл - это тип формата файла, который использует сжатие без потерь для уменьшения размера одного или нескольких файлов. Несколько файлов в ZIP-файле фактически объединяются в один файл, что также упрощает обмен данными.
Технически, да, хотя дополнительное уменьшение размера может быть минимальным или даже противопродуктивным. Сжатие уже сжатого файла иногда может увеличить его размер из-за метаданных, добавленных алгоритмом сжатия.
Чтобы распаковать файл, обычно вам нужен инструмент для распаковки или разархивации, такой как WinZip или 7-Zip. Эти инструменты могут извлечь исходные файлы из сжатого формата.