Мне любопытно, я немного почитал, но у меня остались вопросы.
Что отличает CPIO от TAR? В другом вопросе мне сказали, что tar предназначен для объединения многих файлов в 1 архив, который обычно является gzip'd или bzip'd.
Также мне сказали, что TAR не может сжимать из STDOUT. Я хочу заархивировать / сжать снимки ZFS для резервного копирования. Мне было интересно, смогу ли я объединить CPIO с bzip2, чтобы получить этот эффект.
Или у меня совершенно неверная идея? Разве это не цель CPIO?
К таким командам я пришел после прочтения, поэтому документы Oracle о резервном копировании снимков ZFS.
# Backup snapshot to cpio and bzip2 archive
zfs send media/mypictures@20070607 | cpio -o | bzip2 -9c > ~/backups/20070607.bz2
# Restore snapshot from cpio and bzip2 archive
zfs recieve media/mypictures@20070607 | cpio -i | bunzip2 -c ~/backups/20070607.bz2
pax
: PОтветы:
Оба
tar
иcpio
имеют единственную цель: объединить множество отдельных файлов в один поток. Они не сжимают данные. (Эти дниtar
более популярны из-за своей относительной простоты - они могут принимать входные файлы в качестве аргументов, вместо того, чтобы соединяться с нимиfind
какcpio
есть.)В вашем случае вам не нужен ни один из этих инструментов; они не будут иметь никакого полезного эффекта, потому что у вас не так много отдельных файлов.
zfs send
уже сделал то же самое,tar
что сделал бы. Таким образом , у вас нет никаких файлов, только поток безымянного.Чтобы сжать моментальный снимок, все, что вам нужно сделать, это направить
zfs
вывод через программу сжатия:(Вы можете заменить
gzip
сxz
илиbzip2
или любым другим инструментом потока сжатия, если вы хотите.)источник
zfs send
уже делает то же самое,tar
что сделал бы.В дополнение к тому, что было сказано ранее Гравитацией и Полом :
история
В «старые времена», CPIO (с опцией
-c
используется) был инструмент , чтобы использовать , когда он пришел , чтобы переместить файлы в другие дериваты UNIX , так как это было более портативным и гибким , чем смолы . Но проблемы переносимости смолы можно считать решенными с конца 1980-х годов.К сожалению, примерно в это время разные производители исправили
-c
формат cpio (просто посмотрите страницу руководства по GNU cpio и ее опцию-H
). В то время tar стал более переносимым, чем cpio ... Прошло почти целое десятилетие, пока разные производители UNIX не разобрались в этом. Имея GNU дегтя и GNU CPIO установлен был обязательным для всех администраторов , которые должны были иметь дело с лентами из различных источников , тогда (даже в настоящее время я полагаю).Пользовательский интерфейс
tar может использовать файл конфигурации ленты, где администратор может настроить накопители на магнитной ленте, подключенные к системе. Затем пользователь просто сказал бы: «Ну, я возьму ленточный накопитель 1», вместо того, чтобы запоминать точный узел устройства для ленты (что может быть очень запутанным, а также не стандартизированным на разных платформах UNIX.
Но главное отличие заключается в следующем:
tar может самостоятельно искать каталоги и берет список файлов или каталогов, которые должны быть скопированы из аргументов командной строки.
cpio архивирует только те файлы или каталоги, к которым оно относится, но не выполняет рекурсивный поиск в подкаталогах. Также cpio получает список элементов, которые будут заархивированы из stdin - поэтому он почти всегда используется в сочетании с find .
Команда cpio часто выглядит пугающе для новичка по сравнению с tar :
Я думаю, что это основная причина, по которой большинство людей используют tar для создания архивных файлов: для простых задач, таких как создание полного каталога, его просто использовать.
Также GNU tar предлагает опцию,
-z
которая заставляет архив сжиматься с помощью GNU zip на лету, что делает вещи еще проще.С другой стороны, можно делать отличные вещи с помощью команды find & cpio . На самом деле это более UNIX-подобный подход: зачем включать поиск по дереву каталогов в cpio, если уже есть инструмент, который позаботится почти обо всем, что только можно придумать: find . На ум приходят только резервные копии файлов, которые новее определенной даты, ограничение файлов теми, которые находятся в той же файловой системе, или фильтрация поиска-вывода с
grep -v
целью исключения определенных файлов ...Люди из GNU tar потратили много времени на то, чтобы включить те вещи, которые раньше были возможны только с помощью cpio . Фактически оба инструмента учились друг у друга - но только cpio может читать формат tar - не наоборот.
обработка смолы и вывода
Последнее примечание к тому, что вы сказали:
Ну, любая версия tar (GNU или нет) может использоваться в конвейере. Просто используйте знак минус (
-
) в качестве имени архива:Также GNU tar предлагает опцию
--to-command
для указания команды постпроцессора - хотя я бы все же предпочел трубу. Может быть, это полезно при записи на определенные устройства.источник
cp
), move (mv
)diff
и т. Д .; )BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. Вы сказали:only cpio may read the format of tar
. разве это не противоречие?У tar и cpio, по сути, одна и та же функция, которая заключается в создании единого непрерывного файла из входных данных нескольких файлов и каталогов. Первоначально это было для того, чтобы поместить результат на ленту, но в наши дни его обычно используют для подачи в утилиту сжатия, как вы делали выше. Это связано с тем, что сжатие одного большого файла требует больше времени и пространства, чем сжатие большого количества маленьких файлов. Вы должны заметить, что многие форматы изображений (png, jpg и т. Д.) Уже сильно сжаты и могут на самом деле стать немного больше, если использовать утилиту сжатия.
Ни tar, ни cpio не делают сжатия самостоятельно. Tar эффективно «выиграл» войну «что мы будем использовать для создания совокупных файлов», но cpio может найти применение в разных местах. Я не знаю ни о каких преимуществах одного над другим, деготь выигрывает благодаря более широкому использованию.
tar действительно может принимать входные данные в stdin и выводить в stdout - который затем будет передан в bzip2, как у вас, или что-то подобное. Если вызывается с параметром «z», он автоматически вызовет gzip на выходе.
источник
-j
вызывать bzip2?tar -caf myfiles.tar.xz myfiles/
сжимать с помощьюxz
и этоtar -caf myfiles.tar.gz myfiles/
будет сжимать с помощьюgzip
.Я попросил техническую поддержку HP в ок. 1996, почему использование
cpio
законченоtar
.Мне сказали, что ленты растягиваются и изнашиваются. Когда
tar
достигает нечитаемой части ленты, происходит сбой и возвращается номер ошибки. Когдаcpio
достигает нечитаемой части, она переходит к следующему читаемому блоку, выполняет повторную синхронизацию и продолжается.Я никогда не видел документацию, подтверждающую это, но всегда использовал
cpio
.источник
Также стоит отметить: на (по крайней мере) FreeBSD и Mac OS X вы можете манипулировать файлами cpio с помощью tar. BSD tar использует libarchive под капотом, поэтому он может обрабатывать cpio, pax, shar ...
Это означает, что проблемы с удобством использования
cpio
команды не должны мешать вам взаимодействовать с файлами cpio.источник
only cpio may read the format of tar
. Вы сказали:BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. разве это не противоречие?Хотя ответы здесь уже сравниваются
cpio
иtar
очень хорошо, я хотел бы выделить одну изcpio
функций, называемых конвейерным режимом, которая позволяет более эффективно копировать отдельные файлы (например, черезfind
и фильтровать), сохраняя при этом их структуру каталогов. Эта функция хорошо документирована и в своей основной предпосылке выглядит следующим образом:Эквивалент с
tar
будет включать что-то вроде этого:Конечно, есть и другие альтернативы, такие как
rsync
иcp --parents
обсуждаемые в другой ветке , но ничто не сравнится с гибкостью, предлагаемой комбинациейfind
иcpio
. Ввидуtar
повсеместного создания архивов, это единственная причина, по которой я до сих пор пользуюсьcpio
.источник