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

cpio VS tar и cp

Я только что узнал, что cpio имеет три режима: копирование, копирование и сквозное копирование.

Мне было интересно, каковы преимущества и недостатки cpio в режимах копирования и вывода по сравнению с tar. Когда лучше использовать cpio, а когда использовать tar?

Аналогичный вопрос для cpio в сквозном режиме по сравнению с cp.

Спасибо и привет!

Это очень общий обзор:

CPIO лучше справляется с дублированием файловой системы, включая резервное копирование. Он сохраняет такие вещи, как жесткие ссылки, FIFO и другие нестандартные функции файла. Большинство реализаций CPIO делают все, что делает TAR, включая чтение и запись файлов .tar. CPIO обычно переносит список файлов из стандартного ввода в архив; это упрощает передачу списка из чего-то другого (например, find).

Пересылка CPIO очень полезна, если у вас есть очень длинный список файлов, которые вы хотите скопировать из каталога A в каталог B. (Например, вы можете использовать find чтобы найти все файлы, которые изменились в вашей системе за последние 2 года)

TAR лучше просто выгружает все ваши стандартные файлы на ленту (или архивный файл) или с нее. Это немного проще в использовании (для наиболее распространенных задач). Он легко удовлетворяет простые потребности большинства людей в резервном копировании; и большая часть его популярности объясняется этим фактом.

А теперь мелкий шрифт. Существует несколько различных версий и реализаций CPIO и TAR. Каждый из них имеет разные функции, а некоторые имеют разные параметры командной строки. Есть вещи, которые каждый может делать, а другой - нет; если вы обнаружите, что ограничиваетесь одним, попробуйте другое. У каждого есть любимчик, и в 99% случаев любой из них справится с задачей.

В Redhat AE 3 я обнаружил, что cpio имеет ограничение на размер выходного потока 2 ГБ. Однако у tar этого ограничения не было.

В других системах могут быть другие ограничения.

Я понимаю из комментариев и другой информации, что 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 делает все возможное, чтобы извлечь как можно больше

Я не вижу причин использовать cpio по какой-либо причине, кроме копирования открытых файлов RPM с помощью разгон или rpm2cpio, но могут быть крайние случаи, когда cpio предпочтительнее tar.

История и популярность

Обе деготь и cpio конкурирующие форматы архивов, которые были введены в Версия 7 Unix в 1979 г. и затем включили в POSIX.1-1988, хотя в следующем стандарте POSIX.1-2001 остался только tar.1.

Формат файла Cpio менялся несколько раз и не оставался полностью совместимым между версиями. Например, теперь существует представление данных двоичной информации файла в кодировке ASCII.

Tar стал более универсальным, с годами стал более универсальным и, скорее всего, будет поддерживаться в данной системе. Cpio все еще используется в нескольких областях, таких как Пакет Red Hat формат (RPM), хотя RPM v5 (что, по общему признанию, неясно) использует xar вместо 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, о котором люди часто забывают, поскольку он чаще используется через сетевое соединение.

Я не сравнивал их производительность, но полагаю, что они будут очень похожи по ЦП, памяти и размеру архива (после сжатия).

Я тоже предпочитаю CPIO. Однако при использовании cpio на наборе файлов неизвестного происхождения (например, файлы, созданные конечными пользователями) лучше работать с NUL-терминированные имена файлов: используйте -print0 флаг, чтобы найти и добавить 0 флаг cpio. Таким образом файлы со странными именами (например, CRNL символы) будут обрабатываться правильно.

cd / && find . -xdev -print0 | cpio -pmdu0 /mnt/