Я только что узнал, что у cpio есть три режима: копирование из сети, копирование в сеть и сквозное копирование.
Мне было интересно, каковы преимущества и недостатки cpio в режимах копирования извне и копирования в сравнении с tar. Когда лучше использовать cpio, а когда tar?
Аналогичный вопрос для cpio в режиме сквозного пропускания по сравнению с cp.
Спасибо и привет!
решение1
Это крайне общий обзор:
CPIO лучше справляется с дублированием файловой системы, включая создание резервных копий. Он сохраняет такие вещи, как жесткие ссылки, fifo и другие нестандартные функции файлов. Большинство реализаций CPIO делают все, что делает TAR, включая чтение и запись файлов .tar. CPIO обычно берет список файлов из стандартного ввода в архив; это позволяет очень легко передать список из чего-то еще (например, find
).
Сквозная передача CPIO очень полезна, если у вас есть очень длинный список файлов, которые вы хотите скопировать из каталога A в каталог B. (Например, вы можете использовать его find
для поиска всех файлов, которые были изменены за последние 2 года в вашей системе)
TAR лучше справляется с простой записью всех стандартных файлов на/с ленты (или архивного файла). Он немного проще в использовании (для большинства обычных задач). Он легко удовлетворяет простым требованиям резервного копирования большинства людей; и большая часть его популярности обусловлена этим фактом.
А теперь мелкий шрифт. Существует несколько различных версий и реализаций как CPIO, так и TAR. У каждой из них разные функции, а у некоторых разные параметры командной строки. Есть вещи, которые каждый может делать там, где другой не может; если вы обнаружили, что ограничены одним, попробуйте другой. У каждого есть любимый, и в 99% случаев любой из них справится с задачей.
решение2
На AE 3 redhat я обнаружил, что cpio имеет ограничение по размеру в 2 ГБ на выходном потоке. Однако tar не имеет этого ограничения.
Другие системы могут иметь иные ограничения.
решение3
Я понимаю из комментариев и другой предыстории, что cpio
сейчас это менее распространено и непоследовательно между версиями. Но cpio
есть одно преимущество, которое я недавно обнаружил бесценным при работе с большим количеством поврежденных архивов tar. Он не останавливается на первой ошибке в файле tar, а пытается пропустить плохие данные и извлечь как можно больше. Например,
tar xf ./sample.corrupt.tar
напечатает
tar: Skipping to next header
tar: Exiting with failure status due to previous errors
после первой обнаруженной ошибки, тогда как
cpio -F ./sample.corrupt.tar -i -v
распечатает извлеченные файлы и для каждой ошибки выведет:
cpio: invalid header: checksum error
cpio: warning: skipped 6 bytes of junk
cpio: invalid header: checksum error
cpio: warning: skipped 2 bytes of junk
etc...
Формат tar предполагает, что каждый заголовок архива будет выровнен по границе 512, но если из-за повреждения заголовки будут выровнены неправильно, то cpio
будут предприняты все усилия для извлечения как можно большего количества данных.
решение4
Я не вижу причин использовать cpio ни для каких других целей, кроме копирования открытых RPM-файлов черезdisrpmилиrpm2cpio, но могут быть особые случаи, в которых cpio предпочтительнее tar.
История и популярность
Обасмолаиcpioявляются конкурирующими форматами архивов, которые были введены вВерсия 7 Unixв 1979 году, а затем включен вPOSIX.1-1988, хотя в следующем стандарте, POSIX.1-2001, остался только tar1.
Формат файла Cpio менялся несколько раз и не оставался полностью совместимым между версиями. Например, теперь существует представление двоичных данных файла в кодировке ASCII.
Tar более известен, стал более универсальным с годами и, скорее всего, будет поддерживаться в данной системе. Cpio все еще используется в нескольких областях, таких какПакет Red Hatформат (RPM), хотяРПП v5(что, по общему признанию, неясно) используетксарвместо cpio.
Оба существуют в большинстве Unix-подобных систем, хотя tar более распространен. ВотСтатистика установок Debian:
#rank name inst vote old recent no-files (maintainer)
13 tar 189206 172133 3707 13298 68 (Bdale Garbee)
61 cpio 189028 71664 96346 20920 98 (Anibal Monsalve Salazar)
Режимы
Копирование: Это для создания архива, похожего наtar -pc
Копирование в: Это для извлечения архива, похоже наtar -px
Пройти через: Это в основном оба вышеперечисленных, похожие на , tar -pc … |tar -px
но в одной команде (и поэтому микроскопически быстрее). Это похоже на cp -pdr
, хотя и cpio, и (особенно) tar имеют больше возможностей для настройки. Также рассмотрите rsync -a
, о котором люди часто забывают, поскольку он чаще используется через сетевое соединение.
Я не сравнивал их производительность, но предполагаю, что они будут примерно одинаковыми по загрузке процессора, памяти и размеру архива (после сжатия).