Назад | Перейти на главную страницу

Какой формат файла tar мне следует использовать?

tar может создавать архивы в разных форматах. GNU tar, ustar, pax, v7. Что лучше всего подходит для длительного архивирования? Есть ли существенные различия в этих форматах?

Я бы использовал лучший формат для обычных резервных копий, и я не хочу, чтобы я мог извлечь данные из-за проблем с форматированием. (например, v7 исчез из реализации)

В руководстве по 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'), каталог, жесткая ссылка (typeflag 1), символическая ссылка (typeflag 2). Каталог обозначается конечной косой чертой в название поле. ссылка 1
  • Максимальный размер файла составляет 8589934591 байт (8 ГиБ - 1).
  • Хранит числовой идентификатор пользователя и идентификаторы группы. Не сохраняет имена пользователей и групп. Максимальный UID и GID - 2097151 (восьмеричное 7777777).
  • Сохраняет время модификации. Максимально допустимая временная метка в формате: 2242-03-16 12:56:31 UTC (8589934591 секунда с эпохи), однако программы чтения tar могут быть не в состоянии распознать их из-за проблема 2038 года присутствует в 32-битных системах.

Устар

ustar расширяет блок заголовка из формата v7, и в несжатом виде размер tar-архива ustar идентичен тарболу v7. Нет большой причины отдавать предпочтение формату v7, если только вы намеренно не удаляете информацию, которую ustar будет архивировать.

  • Максимальная длина имени файла - 256 символов ASCII. если путь может быть идеально разделен на 155 байт префикс, косая черта и 100 байт название части. устар предоставляет дополнительные префикс поле для хранения дополнительных компонентов пути, но поля должны быть разделены по разделителям каталогов, поэтому вам не разрешается иметь имя файла длиннее 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 для обычных файлов и каталогов соответственно. В v7 typeflag поле, используемое для указания ссылки только, а не другие типы файлов.

человек

pax расширяет формат ustar с помощью (необязательных) блоков расширенных заголовков, эти расширенные заголовки будут выглядеть как обычные текстовые файлы при извлечении через старые программы tar. Расширенные заголовки идентифицируются внутри с помощью флагов типа. x (расширенный заголовок файла) и g (глобальный расширенный заголовок). Их неограниченная расширяемость также означает, что tarball pax обычно больше, чем ustar. Это хорошо для архивирования, но немного громоздко для формата распространения программного обеспечения.

pax - это надмножество формата ustar - tarball 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 формат. Если вы хотите сделать переносимый архив, вам следует избегать формата tar GNU и пользу pax или ustar вместо.

Формат tar GNU может быть идентифицирован с магия поле (8 байт) из ustar<space><space><nul>, по сравнению с устарским магия и версия поля ustar<nul>00.

Тем не менее, формат GNU tar обратно совместим с форматом v7.

  • GNU tar имеет неограниченную длину имен файлов и целей ссылок. в отличие ustar который использует префикс поле для расширения пути, GNU tar сохраняет длинное имя файла в расширенном заголовке (не pax), который имеет флаг типа L. Точно так же цели ссылки расширяются через расширенный заголовок с флагом типа. K.
  • Формат GNU tar хранит atime (время доступа) и ctime (время изменения статуса) в дополнительных полях заголовка вместе с mtime, который уже доступен в формате v7.
  • Формат GNU tar поддерживает дополнительные типы файлов по сравнению с ustar (ссылка 2):
    • Каталог в инкрементной резервной копии ("dumpdir", typeflag D). См. GNU tar --incremental вариант.
    • Продолжение файловых данных для многотомного архива (флаг типа M). См. GNU tar --multi-volume вариант.
    • Разреженный файл (typeflag S).
    • Заголовок тома (typeflag V) или метку для тома архива. См. GNU tar --label вариант.
  • Разница между oldgnu (GNU tar <= 1.12) и gnu (GNU tar> = 1.13.12) форматы второстепенны для конечных пользователей, но согласно руководство и create.c и НОВОСТИ от исходного кода есть как минимум два отличия:
    • oldgnu format всегда завершает имена файлов строк, имена пользователей и имена групп нулевыми байтами. (Это означает, что до использования расширенного заголовка имена файлов содержат не более 99 символов.)
    • GNU 1.13.12 и более поздние версии могут попытаться "сжать" uid, гид, время, 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