Какой формат файла tar мне использовать?
tar может создавать архив в разных форматах. GNU tar, ustar, pax, v7. Что будет лучшим для длительного архивирования? Есть ли существенные различия в этих форматах?
Я бы использовал лучший формат для общих резервных копий, и я не хочу, чтобы, возможно, я мог извлечь данные, потому что проблемы с форматированием. (v7 исчезнет из реализации, например)
4 ответа
В руководстве по GNU tar фактически есть целый раздел, посвященный форматам архивов tar. Форматы ustar
а также pax
основаны на стандартах POSIX, и gnu
очень широко распространен. Я бы держался подальше от других.
Мое предложение будет выбиратьpax
, то есть POSIX.1-2001. GNU tar делает его по умолчанию в будущем и даже старым ustar
реализации могут распаковать его. Это также наименее ограничивающий формат.
Вы можете создавать архивы POSIX.1-2001, например, с помощью GNU tar, указав --format pax
или с отдельным архиватором pax.
Некоторые технические сравнения среди v7
, ustar
а также pax
форматы:
v7
Формат до POSIX.1-1988.
- Максимальная длина имени файла составляет 99 символов. (100 байт минус завершающий нулевой байт.)
- Максимальная длина цели ссылки составляет 99 символов.
- Разрешенные типы файлов: обычный файл (typeflag
'\0'
), каталог, жесткая ссылка (typeflag1
), символическая ссылка (typeflag2
). Каталог идентифицируется через косую черту в поле имени. ссылка 1 - Максимальный размер файла составляет 8589934591 байт (8 ГиБ - 1).
- Хранит числовые идентификаторы пользователей и групп. Не хранит имена пользователей и групп. Максимальный UID и GID - 2097151 (восьмеричное 7777777).
- Хранит время модификации. Максимально допустимая временная метка в формате: 2242-03-16 12:56:31 UTC (8589934591 секунда с начала эпохи), однако читатели tar могут не распознать их из-за проблемы 2038 года, существующей в 32-битных системах.
USTAR
ustar расширяет блок заголовка из формата v7, а в несжатом виде размер архива ustar идентичен размеру архива v7. Нет особой причины предпочитать формат v7, если только вы не намеренно извлекаете информацию, которую ustar может заархивировать.
- Максимальная длина имени файла составляет 256 символов ASCII, если путь можно разделить на префикс длиной 155 байт, косую черту и 100-байтовые части имени. ustar предоставляет дополнительное поле префикса для хранения дополнительных компонентов пути, но поля должны быть разделены на разделители каталогов, поэтому вы не можете иметь имя файла длиннее 100 байт или имя каталога длиннее 155 байт.
- Максимальная длина цели ссылки составляет 100 символов. (Т.е. больше не требуется завершающий нулевой байт.)
- Разрешенные типы файлов: обычный файл (typeflag
'\0'
или же0
), каталог (помеченный флажком типа)5
), жесткая ссылка, символическая ссылка, символьное устройство (3
), блочное устройство (4
), FIFO (6
). (Расширения поставщиков для типов файлов разрешены вA
черезZ
.) - Максимальные старшие и младшие номера для файлов устройств равны 2097151 (восьмеричное 7777777).
- Хранит имена пользователей и групп, а также UID и GID. Имена пользователей и групп указаны в ASCII и максимум 32 символа каждый.
- Ограничение размера файла, ограничения UID/GID и ограничение отметки времени остаются такими же, как в формате v7.
У ustar есть незначительные, обратно несовместимые отличия от стандартного формата v7 - флаги типа 0
а также 5
для обычных файлов и каталогов соответственно. В версии 7 поле typeflag использовалось только для указания ссылок, а не для других типов файлов.
чел
pax расширяет формат ustar с помощью (необязательных) блоков расширенного заголовка, эти расширенные заголовки будут выглядеть как обычные текстовые файлы при извлечении из старых программ tar. Расширенные заголовки идентифицируются внутри с помощью флагов типа x
(расширенный заголовок файла) и g
(глобальный расширенный заголовок). Их неограниченная расширяемость также означает, что paxtarball обычно больше, чем ustar. Это хорошо для архивирования, но немного ненормальный для формата распространения программного обеспечения.
pax - это расширенный набор формата ustar - tar-архив pax ничем не отличается от ustar, если все его расширенные заголовки удалены.
Вы можете прочитать это для того, что можно расширить в формате pax. Но по сравнению с устаром в заключение:
- Имена файлов и пути могут быть неограниченной длины (через
path=
ключевое слово в расширенном заголовке). - Цели ссылки могут быть неограниченной длины (
linkpath=
ключевое слово) size
(размер файла),uid
(Идентификатор пользователя),uname
(имя пользователя),gid
(идентификатор группы),gname
(название группы), все могут быть расширены до неограниченной длины.- Кодировка UTF-8 для
path
,linkpath
,uname
а такжеgname
, - Отметки времени допускают точность менее секунды и потенциально неограниченную длину, но по-прежнему не могут хранить високосные секунды (пока) из-за своего формата как "количество секунд с начала эпохи". Доли секунд даны в десятичном формате.
- Время доступа к файлу (
atime
) может храниться вместе со временем модификации (mtime
).
Примечание. POSIX не обязывает шаблон имени файла для хранения расширенных заголовков, поэтому реализации могут создавать любой шаблон имени по своему усмотрению. Например, в GNU tar шаблон имени управляется через --pax-option=exthdr.name=
вариант. Если вы планируете сделать детерминированный тарбол (среди tar
/ pax
реализации), остерегайтесь этого.
форматы GNU и OldGNU
Согласно руководству по GNU tar, GNU tar был основан на ранней версии POSIX.1 ustar
стандарт. Но расширения GNU для tar
делает его несовместимым с ustar
формат. Если вы хотите сделать переносимый архив, вам следует избегать формата GNU tar и предпочитать pax
или же ustar
вместо.
Формат GNU tar может быть идентифицирован с помощью магического поля (8 байт) ustar<space><space><nul>
, сравнивая с полями магии и версий устар ustar<nul>00
,
Тем не менее, формат GNU tar обратно совместим с форматом v7.
- GNU tar имеет неограниченную длину для имен файлов и целей ссылок. В отличие от
ustar
который использует поле префикса для расширения пути, GNU tar хранит длинное имя файла в расширенном заголовке (не pax), который имеет typeflagL
, Точно так же цели ссылки расширены, хотя расширенный заголовок с typeflagK
, - Формат GNU tar хранит atime (время доступа) и ctime (время изменения состояния) в дополнительных полях заголовка вместе с mtime, который уже доступен в формате v7.
- Формат GNU tar поддерживает дополнительные типы файлов по сравнению с ustar ( ссылка 2):
- Каталог в инкрементном резервном копировании ( "dumpdir", typeflag
D
). См. GNU tar--incremental
вариант. - Продолжение данных файла для многотомного архива (typeflag
M
). См. GNU tar--multi-volume
вариант. - Разреженный файл (typeflag
S
). - Заголовок тома (typeflag
V
) или метка для объема архива. См. GNU tar--label
вариант.
- Каталог в инкрементном резервном копировании ( "dumpdir", typeflag
- Разница между
oldgnu
(GNU tar <= 1.12) иgnu
(GNU tar >= 1.13.12) форматы являются второстепенными для конечных пользователей, но согласно руководству и create.c и NEWS из исходного кода, есть как минимум два различия:oldgnu
Формат всегда завершает имена файлов строк, имен пользователей и групп с нулевыми байтами. (Это означает, что имена файлов должны содержать не более 99 символов перед использованием расширенного заголовка.)- GNU 1.13.12 и более поздние версии могут пытаться "сжать" поля uid, gid, mtime, devmajor и devminor, выводя их в двоичные числа со старшим порядком байтов со знаком, если они слишком велики, чтобы быть представленными в восьмеричном ASCII в полях. Это увеличивает максимальное значение UID и GID до [-2^56, 2^56-1], а старшие и младшие номера устройства - [-2^56, 2^56-1]. (Представления в исходном коде резервируют несколько битов для предотвращения коллизий с представлением ASCII.)
tar.gz является довольно стандартным.
tar архивирует все файлы в один файл, например.iso, но не сжимает их.
gzip (gz) сжимает файлы tar.
Командная строка *nix для этого:
tar -pczf name-of-new-archive.tar.gz /path/of/the/directory
pax совместим с POSIX... Как уже было сказано, я использую только tar, tar+gz и tar+bz2