Каковы различия между bsdtar и GNU tar?

46

Я всегда использовал GNU tar. Однако все дистрибутивы GNU / Linux, которые я видел, поставляются bsdtarв их репозиториях. Я даже видел, как он установлен по умолчанию в некоторых, IIRC. Я точно знаю, что Arch GNU / Linux требует этого как часть basedevel(может быть base, но я не уверен), как я видел это в PKGBUILD.

Почему вы хотите использовать bsdtarвместо GNU tar? Каковы преимущества?

Обратите внимание, что я тот человек, который спросил, каковы основные различия между пользовательским интерфейсом BSD и GNU / Linux? ,

strugee
источник
1
Это ответ на вопрос: почему при извлечении этого tgz выдается ошибка на моем Mac, но не на Linux? на Apple.SE также имеет отношение к этому вопросу.
Адам Литер

Ответы:

29

Ubuntu bsdtarна самом деле является реализацией tar, связанной с libarchive; и это следует отличать от классического bsdtar. Некоторые варианты BSD используют libarchiveдля своей реализации tar, например, FreeBSD.

GNUtarподдерживает другие варианты tar и автоматическое определение сжатия.

Когда визуализация вставила рекламный ролик из Ubuntu, есть несколько вещей, которые относятся к libarchive:

  1. libarchiveпо определению является библиотекой, и отличается от классической bsdtarи GNUtarв этом смысле.
  2. libarchive не может прочитать некоторые старые непонятные изменения tar GNU, наиболее заметной была кодировка некоторых заголовков в base64, так что файл tar был бы 7-битным чистым ASCII (это было в случае 1.13.6-1.13.11 и изменено в 1.13.12 этот код был только официально в tar в течение 2 недель)
  3. libarchives bsdtarбудет читать файлы, не относящиеся к tar (например, zip, iso9660, cpio), а классический bsdtar - нет.

Теперь, когда мы libarchiveушли с дороги, все сводится к тому, что поддерживается в классической bsdtar.

Вы можете увидеть сами страницы здесь:

В своем первоначальном вопросе вы спросили, какие преимущества у классики bsdtar, и я не уверен, что они действительно есть. Единственное время, когда это действительно важно, - это если вы пытаетесь писать сценарии оболочки, которые должны работать на всех системах; Вы должны убедиться, что то, что вы передаете, tarдействительно во всех вариантах.

GNUtar, libarchive«S bsdtar, классические bsdtar, starи BusyBox» s tar, конечно , в реализации деготь , что вы будете работать в большую часть времени, но я уверен , есть и другие , там ( в начале QNX, например). libarchive/ GNUtar/ starявляются наиболее функциональными, но во многих отношениях они давно отклоняются от первоначальных стандартов (возможно, в лучшую сторону).

robbat2
источник
15

BSDTAR против TAR и многое другое

Вот одно преимущество !!

Я собираюсь перейти к 5 темам здесь (и далеко от темы, но она также охватит то, что вы хотите):

  1. Бсдтар против Тар
  2. разреженные файлы против не
  3. толстые и тонкие файлы / лун с btrfs
  4. толстые и тонкие файлы / лун без btrfs
  5. разница между толстым и тонким и как это не относится только к лунам

bsdtar лучше обрабатывает разреженные файлы, чем обычный tar

  • bsdtar будет принимать все нули и просто метадать их
  • tar фактически обрабатывает каждый ноль

* пример: представьте разреженный файл размером 20 ТБ (называемый biglun) с 10 мегабайтами данных в разреженном файле размером 20 ТБ (biglun) ... теперь, поскольку этот файл является разреженным, он займет всего 10 мегабайт на диске.

Как сделать разреженный файл:

Разреженный файл - как это сделать - обнаружить его - все Разреженные файлы похожи на "тонкие" лунные (если вы использовали его для лунных). "толстые" лун были бы другой историей.

* вернуться к теме:

  • если вспомнить, что biglun заставит tar пройти все 10 мегабайтов вместе со всеми худшими нулями, разбросанными по ~ 20 ТБ, по луне ... я предполагаю, что это займет некоторое время, и файл tar будет довольно большим. Кроме того - извлекая его - я никогда не делал извлечения файла tar из разреженного файла, но это может быть не красиво; Я могу ошибаться здесь.

  • bsdtarring biglun просто обработает 10 мегабайт данных и создаст небольшие метаданные для ~ 20 ТБ нулей.

Выгода? Ну, их много; Я просто написал несколько выше.

Это похоже на rsync vs cp

  • Кроме того, если вы rsync гигантский разреженный файл, он будет вести себя как tar
  • Если вы скопируете гигантский файл, он будет вести себя автоматически, как bsdtar (вы можете изменить поведение cp'ss, чтобы переходить через нули или не проходить через нули)

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

Следующая тема BTRFS тонкая против толстой LUNs:

  • В таких файловых системах , как BTRFS , тонкие лунки - это редкие файлы (делайте это с помощью усечения, как в вики-документе).

     truncate -s <size in kilobytes> filename
    

    совет: резервное копирование с помощью bsdtar , копирование с помощью cp

  • толстые лунные файлы - это обычные файлы с атрибутом + C (+ C, что делает его не COW, копировать при записи, так что все записи, по существу, остаются там, где они выделены, и новые записи для этого файла не происходят при перезаписи или удаляет - исследуй COW и BTRFS ). Вместо того, чтобы создавать файл с усечением, сделайте это с помощью "fallocate -l"

    fallocate -l <size in kilobytes> filename
    chattr +C filename
    

    совет: сделайте резервную копию с помощью bsdtar или tar, скопируйте с помощью rsync или cp

Следующая тема - EXT тонкий против толстых луны:

  • тонкие луны, которые редки

    truncate -s <size in kilobytes> filename
    

    совет: резервное копирование с помощью bsdtar , копирование с помощью cp

  • толстые лунные файлы - это обычные файлы с атрибутом + C (+ C, что делает его не COW, копировать при записи, так что все записи, по существу, остаются там, где они выделены, и новых записей для этого файла не происходит при перезаписи или удаляет - исследуй COW и BTRFS ). Вместо того, чтобы создавать файл с усечением, сделайте это с помощью "fallocate -l"

    touch filename
    fallocate -l <size in kilobytes> filename
    

    совет: сделайте резервную копию с помощью bsdtar или tar, скопируйте с помощью rsync или cp

что толстый против тонкого файла

  • толстые лунные файлы / файлы, заполняют свои данные от 0 до выделенного размера, метаданные претендуют на то, где 0. когда вы заполняете данные, данные заполняются
  • толстые лунные файлы / файлы: заполняйте свои данные в начале нулями или чем-то еще (ленивый ноль или нетерпеливый ноль) - эти наборы резервирований (или, как ZFS любит вызывать резервирования)

СТАТЬЯ VMWARE ЗДЕСЬ описывает ленивый против нетерпеливого нуля с толстыми лунами / файлами: https://communities.vmware.com/message/2199576

чаевые

помните, что толстые и тонкие не только применимы к лунам, они также могут относиться к файлам, файловым системам zfs (share / volume / luns) и, я уверен, к другим вещам (просто посмотрите на zfs).

kobbsoss
источник
1
Хорошо и тщательно. Добро пожаловать на сайт ...
eyoung100
1
- Разрежьте с любым tar: просто передайте -S большинству реализаций tar, они все поддерживают это долгое время. - Разрежьте с помощью rsync: снова передайте --sarse, все работает. Недостатком использования любого разреженного обнаружения является то, что инструмент должен на самом деле читать больше блоков, что может привести к большой загрузке ЦП (особенно в случае чередующихся нулевых / ненулевых циклов).
robbat2
Лучше использовать bsdtar, даже если gnu tar поддерживает флаг разреженности, поскольку bsdtar знает, как пропускать разреженные дыры, не обрабатывая их (например, если у вас есть разреженный файл объемом 1 ТБ, содержащий только 1 КБ данных, bsdtar обработает 1 КБ из данные. Gnu tar обработает 1 ТБ.
moveaway00
13

Из описания пакета Ubuntu ( http://packages.ubuntu.com/de/lucid/bsdtar )

«Программа bsdtar имеет ряд преимуществ перед предыдущими реализациями tar:

  • Библиотека. Поскольку основная функциональность находится в библиотеке, она может использоваться другими инструментами, такими как pkg_add.
  • Автоматическое определение формата. Libarchive автоматически определяет сжатие (none / gzip / bzip2) и формат (старый tar, ustar, gnutar, pax, cpio, iso9660, zip) при чтении архивов. Это делается для любого источника данных.
  • Поддержка формата обмена Pax. Это расширение POSIX / SUSv3 к старому формату tar «ustar», которое добавляет произвольные расширенные атрибуты к каждой записи. Делает все, что делает формат GNU tar, только лучше.
  • Обрабатывает флаги файлов, списки ACL, произвольные имена путей и т. Д. Формат обмена Pax поддерживает атрибуты ключ / значение, используя легко расширяемый метод. Произвольные пути, имена групп, имена пользователей, размеры файлов являются частью стандарта POSIX; libarchive расширяет это за счет поддержки файловых флагов, списков ACL и произвольных номеров устройств.
  • Поддержка GNU tar. Libarchive читает большинство tar-архивов GNU. Если есть спрос, это может быть улучшено в дальнейшем ».
visualication
источник
1

Нижеследующее основано на чтении, а не на опыте - я только начинаю с Freebsd, поэтому у меня почти нет реального опыта (я в основном из Linux). Я прошу прощения (и смиренно требую исправления), если я пропустил что-то важное, и что я говорю здесь, это мусор ...

Из моего прочтения страниц справочника (последняя ссылка была выше http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1 ), в смоле Freebsd отсутствует (-d, --diff). возможность. Это неудивительно, так как авторы FreeBSD dump / restore также не предоставили ничего подобного.

Я не знаю наверняка, будет ли tar Gnu включать все метаданные UFS, как об этом говорит tar Freebsd, и это важная проблема. Но на мой вкус, я НИКОГДА не могу считать, что дамп будет завершен, пока я не сохраню сумму MD5 выходного файла, И ТОГДА сравнил файл дампов с данными, которые я только что предположительно сбросил. Различные проблемы могут привести к тому, что сбрасываемые данные будут отличаться от данных на диске. (Не только изменения файла, но и ошибки диска, ошибки памяти, ошибки компьютера и т. Д. Все это на самом деле произошло со мной.)

По моему мнению, это делает Gnu tar единственным вариантом, который я нашел для создания настоящих резервных копий в стандартной системе Freebsd.

Мне бы очень хотелось узнать иначе, FWIW. Я бы предпочел использовать нативные утилиты по крайней мере для клонирования разделов и резервного копирования с жестким восстановлением. Но если кто-то не может проверить правильность дампа, я не вижу смысла его создавать.

LOC
источник
1
  • bsdtar может читать и tar-члены из других архивов, используя @archiveсинтаксис

  • У GNU tar есть --deleteопция - хотя недавно я обнаружил, что она может испортить архив.

Барт
источник