Qual é a diferença entre os formatos de arquivo morto TAR vs CPIO?

37

Estou curioso e li um pouco, mas ainda tenho dúvidas.

O que torna o CPIO diferente do TAR? Foi-me dito em outra questão que o tar é para reunir muitos arquivos em um arquivo, que geralmente é gzip'd ou bzip'd.

Também me disseram que o TAR não pode compactar a partir do STDOUT. Desejo arquivar / compactar instantâneos do ZFS para backups. Eu queria saber se eu poderia combinar o CPIO com o bzip2 para obter esse efeito.

Ou eu tenho a ideia completamente errada? Não é esse o propósito do CPIO?

Este é o tipo de comandos que eu tenho depois de ler, então o Oracle faz um backup de instantâneos do 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
    
por ianc1215 07.10.2011 / 09:11

6 respostas

27

Tanto tar como cpio têm um único objetivo: concatenar muitos arquivos separados em um único fluxo. Eles não compactam dados. (Atualmente o tar é mais popular devido à sua relativa simplicidade - ele pode receber arquivos de entrada como argumentos em vez de ter que ser acoplado com find como cpio .)

No seu caso, você não precisa dessas ferramentas; eles não teriam nenhum efeito útil, porque você não tem muitos arquivos separados. zfs send já fez a mesma coisa que tar teria feito. Você não tem arquivos , apenas um fluxo sem nome.

Para compactar o instantâneo, tudo o que você precisa fazer é canalizar a saída zfs por meio de um programa de compactação:

zfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz

gzip -dc ~/backups/20070607.gz | zfs receive media/mypictures@20070607

(Você pode substituir gzip por xz ou bzip2 ou qualquer outra ferramenta de compactação de fluxo, se quiser.)

    
por 07.10.2011 / 10:30
60

Além do que foi dito antes por grawity e Paul :

História

Nos "velhos tempos", o cpio (com a opção -c usada) era a ferramenta usada para mover arquivos para outros derivados do UNIX, já que era mais portátil e flexível que o tar . Mas as questões de portabilidade tar podem ser consideradas como resolvidas desde o final dos anos 80.

Infelizmente foi nessa época que diferentes fornecedores mangled o formato -c de cpio (basta olhar a página de manual para GNU cpio e a opção -H ). Naquela época, o tar tornou-se mais portátil que o cpio ... Demorou quase uma década até que os diferentes fornecedores de UNIX tivessem resolvido isso. Ter o GNU tar e o GNU cpio instalados era uma obrigação para todos os administradores que tinham que lidar com fitas de diferentes fontes naquela época (até hoje presumo).

Interface do usuário

tar pode usar um arquivo de configuração de fita onde o administrador configuraria as unidades de fita conectadas ao sistema. O usuário, então, apenas diria "Bem, eu pegarei a unidade de fita 1" em vez de ter que lembrar o nó de dispositivo exato da fita (o que pode ser muito confuso e também não é padronizado em diferentes plataformas UNIX.

Mas a principal diferença é:

tar é capaz de pesquisar diretórios por conta própria e pega a lista de arquivos ou diretórios dos quais é feito backup dos argumentos da linha de comando.

O

cpio arquiva apenas os arquivos ou diretórios aos quais é contado, mas não procura subdiretórios de forma recursiva por conta própria. Também o cpio obtém a lista de itens a serem arquivados de stdin - é por isso que quase sempre é usado em combinação com find .

Um comando cpio geralmente parece assustador para o iniciante se comparado com tar :

 $ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
 $ tar czvf myfiles.tar.gz myfiles

Acho que essa é a principal razão pela qual a maioria das pessoas usa o tar para criar arquivos mortos: para tarefas simples, como agrupar um diretório completo, é mais fácil de usar.

Além disso, o GNU tar oferece a opção -z , que faz com que o arquivo seja compactado com GNU zip , tornando as coisas ainda mais fáceis.

Por outro lado, pode-se fazer coisas interessantes com encontrar & cpio . Na verdade, é uma abordagem mais parecida com o UNIX: Por que incluir a pesquisa de árvore de diretórios no cpio se já existe uma ferramenta que cuida de quase tudo que se pode pensar: localizar . As coisas que vêm à mente são apenas fazer backup de arquivos mais novos que uma determinada data, restringindo os arquivos àqueles que residem no mesmo sistema de arquivos ou filtrando a saída de localização com grep -v para excluir determinados arquivos ...

As pessoas do GNU tar gastaram muito trabalho para incluir muitas dessas coisas que anteriormente só eram possíveis com o cpio . Na verdade, ambas as ferramentas aprenderam umas com as outras - mas somente o cpio pode ler o formato tar - e não o contrário.

tar e processamento de saída

Uma última nota para algo que você disse:

Also I was told TAR cannot compress from STDOUT. I want to archive / compress ZFS snapshots for backups. I was wondering if I could combine CPIO with bzip2 to get this effect.

Bem, todas as versões do tar (GNU ou não) podem ser usadas em um pipe. Basta usar um sinal de menos ( - ) como nome do arquivo:

 $ tar cvf - myfiles | bzip > myfiles.tar.bz

Também o GNU tar oferece a opção --to-command para especificar um comando de pós-processamento - embora eu ainda prefira o pipe. Talvez seja útil ao gravar em determinados dispositivos de hardware.

    
por 07.10.2011 / 11:39
6

tar e cpio têm essencialmente a mesma função, que é criar um único arquivo contíguo a partir de uma entrada de múltiplos arquivos e diretórios. Originalmente, isso era colocar o resultado em fita, mas hoje em dia é geralmente usado para alimentar um utilitário de compactação como você tem acima. Isso ocorre porque a compactação de um único arquivo grande é mais eficiente em termos de tempo e espaço do que a compactação de muitos arquivos pequenos. Você deve notar que muitos formatos de imagem (png, jpg, etc) já estão altamente compactados, e podem realmente ficar um pouco maiores se forem colocados através de um utilitário de compressão.

Nem o tar nem o cpio fazem nenhuma compactação. Tar efetivamente "ganhou" o "o que vamos usar para fazer arquivos agregados" guerra, mas cpio fica olhando em vários lugares. Eu não estou ciente de nenhum benefício de um sobre o outro, alcatrão ganha sendo mais comumente usado.

O tar pode, de fato, receber entrada no stdin e na saída para o stdout - que então seria canalizado para o bzip2 como você tem ou algo parecido. Se chamado com a opção "z", invocará automaticamente o gzip na saída.

    
por 07.10.2011 / 09:47
4

Também vale a pena notar: em (pelo menos) FreeBSD e Mac OS X, você pode manipular arquivos cpio com tar. O tar do BSD usa o libarchive sob o capô, então ele pode manipular o cpio, pax, shar ...

Isso significa que os problemas de usabilidade do comando cpio não precisam impedir que você interaja com os arquivos do cpio.

    
por 02.10.2013 / 22:29
2

Perguntei a um suporte técnico da HP em ca. 1996 porque usar cpio over tar .

Foi-me dito que as fitas se esticam e se desgastam. Quando tar atinge uma parte ilegível da fita, ela falha e retorna o número do erro. Quando cpio atinge uma parte ilegível, continua até o próximo bloco legível, ressincroniza e continua.

Eu nunca vi documentação para suportar isso, mas sempre usei cpio .

    
por 15.10.2016 / 07:31
1

Enquanto as respostas aqui já comparam muito bem cpio e tar , gostaria de destacar um dos recursos de cpio chamado modo de pipeline, que torna mais eficiente a cópia seletiva de arquivos (por exemplo, via find e filtro), preservando sua estrutura de diretórios. Esse recurso é bem documentado e, em sua premissa básica, é assim:

find . <predicates> | cpio -pdmv /destination/dir

O equivalente a tar envolveria algo assim:

find . <predicates> | tar -T - -cf - | (cd /destination/dir; tar xvf -)

Existem outras alternativas, como rsync e cp --parents , discutidas em outro thread , mas nada se aproxima da flexibilidade oferecida pela combinação de find e cpio . Com tar sendo onipresente para criar arquivos, esta é a única razão pela qual eu ainda uso cpio .

    
por 21.06.2018 / 19:21