Что: b4b36a45ec721be274a4b6c0f9f243d5672f3a48
Когда: 2017-09-20 15:12:25+03:00
Темы: tip
Про форматы архивов Когда-то давно, делая бэкапы, столкнулся с тем, что cpio или tar команда у меня не смогли сделать архив большого размера и часть имён файлов там не умещалась. Начитался про разные форматы одного только tar-а, но позабыл. Решил вспомнить. В POSIX/UNIX мире можно выделить три команды для работы с архивами: tar, cpio и pax (ar не в счёт). Вне POSIX мира единственный формат имеющий самую широкую поддержку это ZIP (какие конкретно версии -- не знаю). Про него речь тоже не веду. Лично мне tar мало когда нравился своим интерфейсом. После знакомства с cpio я для себя сделал вывод что вот именно вот так должен выглядеть архиватор. Долгое время использовал исключительно cpio, бойкотируя tar, ибо уж правильно в нём всё с точки зрения интерфейса. Однако его формат (cpio) имел и имеет существенные ограничения из-за которых им нельзя просто так брать и архивировать всё что угодно. После cpio я узнал о существовании pax. Pax создавался POSIX-ом именно как архиватор всех архиваторов -- подружить ("pax" это "мир", с греческого, вроде бы) tar и cpio, сделав что-то унифицированное. Интерфейс pax повторяет cpio-шный: что круто. Формат поддерживаемый pax-ом это один из tar-ов в котором нет крупных ограничений cpio -- тоже хорошо. Вроде бы идеальная команда -- интерфейс cpio, формат tar, однако pax мало популярен и большинстве дистрибутивов его не будет из коробки. Остаётся tar. Однако форматов tar-а которые сейчас можно увидеть на практике целых три: GNU tar, UStar, pax, всякое старьё о котором стоит забыть. Всякое старьё это между собой не очень совместимые vendor-specific форматы, которые POSIX решил унифицировать и сделать "Unix standard TAR". UStar поддерживает длину *полного* имени файла в 256 байт -- это единственное что на данный момент прям может сильно "ударить" по глазам. Но, насколько понимаю, UStar поддерживается широко и это формат который должны открыть все и везде. Ну уж, существуя с 1988 года, не удивительно. GNU tar, как всегда всё GNU-шное, куда более сложный формат, только с собой совместимый, но в него можно запаковать вс�� без ограничений в 256 байт. Но в POSIX.1-2001 стандарте, Sun предложила обновить UStar, сделав pax-формат. Это UStar в котором в виде расширений добавлена дополнительная информация о файлах: точность timestamp-ов хоть до наносекунд, нет ограничений на длину имён файлов, как и символических ссылок, пользователей/групп. Нет ограничений по размеру файлов. Сделан этот архив так, что его отличия от UStar хранятся в виде PaxHeaders файлов -- открыв такой архив мы увидим эти специфичные файлы, но многое сможет достать. В FreeBSD версии tar есть restricted-pax формат который, везде где можно, убирает PaxHeaders, добавляя только при необходимости. То есть, если можно сделать архив UStar, то он и будет делаться и только в худшем случае будет создан pax. pax формат открывают все современные дистрибутивы. И именно его и стоит использовать. А если точнее, то стоит использовать наверное restricted-pax -- создавая UStar если это можно. Что забавно: pax команда не поддерживает pax формат. Подводя итог (в том числе субъективный, зависящий от моих дистрибутивов): Формат(ы) cpio: все архаичны и имеют существенные ограничения Формат UStar: до сих пор может быть часто использован без геморроя Формат pax: лучший, может быть часто обратно-совместим с UStar Команда cpio: хороший интерфейс, не может pax Команда pax: хороший интерфейс, не может pax Команда tar: плохой интерфейс, может pax Хотя моя FreeBSD версия cpio умеет pax.
Сгенерирован: SGBlog 0.34.0