Estou curioso e li um pouco, mas ainda tenho dúvidas.
O que torna o CPIO diferente do TAR? Foi-me dito em outra pergunta 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 comprimir do STDOUT. Desejo arquivar / compactar snapshots do ZFS para backups. Eu queria saber se eu poderia combinar o CPIO com o bzip2 para obter esse efeito.
Ou tenho a ideia completamente errada? Não é esse o objetivo do CPIO?
Esse é o tipo de comando que eu criei depois de ler, para que o Oracle documente o backup de snapshots 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
pax
: PRespostas:
Ambos
tar
ecpio
têm um único objetivo: concatenar muitos arquivos separados em um único fluxo. Eles não compactam dados. (Hoje em diatar
é mais popular devido à sua relativa simplicidade - ele pode aceitar os arquivos de entrada como argumentos, em vez de precisar ser acopladofind
comocpio
tem.)No seu caso, você não precisa de nenhuma dessas ferramentas; eles não teriam efeito útil, porque você não possui muitos arquivos separados.
zfs send
já fez a mesma coisa quetar
teria feito. Então você não tem quaisquer arquivos, apenas uma corrente sem nome.Para compactar o instantâneo, tudo o que você precisa fazer é canalizar a
zfs
saída através de um programa de compactação:(Você pode substituir
gzip
porxz
oubzip2
qualquer outra ferramenta de compactação de fluxo, se desejar.)fonte
zfs send
já faz o mesmo quetar
faria.Além do que foi dito anteriormente por grawity e Paul :
História
Nos "velhos tempos", o cpio (com a opção
-c
usada) era a ferramenta a ser usada quando se tratava de mover arquivos para outros derivados do UNIX, pois era mais portátil e flexível que o tar . Mas os problemas da portabilidade do alcatrão podem ser considerados resolvidos desde o final dos anos 80.Infelizmente, foi nessa época que diferentes fornecedores manipularam o
-c
formato do cpio (basta olhar na página de manual do GNU cpio e a opção-H
). Naquele momento, o tar se tornou mais portátil que o cpio ... Levou quase uma década inteira até que os diferentes fornecedores do UNIX resolvessem 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 na época (até hoje em dia eu presumo).Interface de usuário
tar pode usar um arquivo de configuração de fita em que o administrador configuraria as unidades de fita conectadas ao sistema. O usuário então dizia apenas "Bem, eu levarei a unidade de fita 1" em vez de ter que lembrar o nó exato do dispositivo para a fita (o que pode ser muito confuso e também não é padronizado em diferentes plataformas UNIX.
Mas a principal diferença é:
O tar é capaz de pesquisar diretórios por conta própria e usa a lista de arquivos ou diretórios para backup dos argumentos da linha de comando.
O cpio arquiva apenas os arquivos ou diretórios informados, mas não pesquisa subdiretórios por conta própria. Além disso, o cpio obtém a lista de itens a serem arquivados do stdin - é por isso que quase sempre é usado em combinação com o find .
Um comando cpio geralmente parece assustador para o iniciante, se comparado ao tar :
Eu acho que essa é a principal razão pela qual a maioria das pessoas usa o tar para criar arquivos compactados: para tarefas simples, como agrupar um diretório completo, é apenas 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 o GNU zip em tempo real, tornando as coisas ainda mais fáceis.Por outro lado, pode-se fazer coisas bacanas com o find & cpio . Na verdade, é uma abordagem mais semelhante ao UNIX: por que incluir a pesquisa em árvore de diretórios no cpio se já existe uma ferramenta que cuida de quase tudo o que se pode pensar: find . O que vem à mente é apenas fazer backup de arquivos mais recentes que uma determinada data, restringindo os arquivos àqueles que residem no mesmo sistema de arquivos ou filtrando a saída de localização
grep -v
para excluir determinados arquivos ...O pessoal do GNU tar gastou muito trabalho para incluir muitas das coisas que antes eram possíveis apenas com o cpio . De fato, as duas ferramentas aprendidas umas com as outras - mas apenas o cpio pode ler o formato do tar - e não o contrário.
processamento de alcatrão e saída
Uma última nota para algo que você disse:
Bem, toda versão do tar (GNU ou não) pode ser usada em um pipe. Basta usar um sinal de menos (
-
) como nome do arquivo:O GNU tar também oferece a opção
--to-command
de especificar um comando pós-processador - embora eu ainda prefira o pipe. Talvez seja útil ao gravar em determinados dispositivos de hardware.fonte
cp
), mover (mv
)diff
, etc.; - )BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. você disse:only cpio may read the format of tar
. isso não é uma contradição?tar e cpio têm essencialmente a mesma função, que é criar um único arquivo contíguo a partir de uma entrada de vários arquivos e diretórios. Originalmente, isso era para colocar o resultado em fita, mas atualmente é geralmente usado para alimentar um utilitário de compactação, como você fez acima. Isso ocorre porque compactar um único arquivo grande é mais eficiente em termos de tempo e espaço do que compactar muitos arquivos pequenos. Você deve observar que muitos formatos de imagem (png, jpg etc.) já estão altamente compactados e podem ficar um pouco maiores se forem colocados em um utilitário de compactação.
O tar ou o cpio não fazem nenhuma compactação. Tar efetivamente "venceu" a guerra "o que usaremos para criar arquivos agregados", mas o cpio é visto em vários lugares. Não conheço nenhum benefício de um sobre o outro, o alcatrão ganha por ser mais comumente usado.
O tar pode, de fato, levar a entrada stdin e a saída para stdout - que seriam canalizados para o bzip2 como você tem ou algo semelhante. Se chamado com a opção "z", ele invocará automaticamente o gzip na saída.
fonte
-j
para invocar bzip2?tar -caf myfiles.tar.xz myfiles/
comprimirá usandoxz
e istotar -caf myfiles.tar.gz myfiles/
comprimirá usandogzip
.Perguntei a um suporte técnico da HP em ca. 1996 por que usar
cpio
maistar
.Foi-me dito que as fitas esticam e se desgastam. Quando
tar
atinge uma parte ilegível da fita, ela falha e retorna o número do erro. Quandocpio
atinge uma parte ilegível, continua para o próximo bloco legível, ressincroniza e continua.Eu nunca vi documentação para suportar isso, mas sempre usei
cpio
.fonte
Também vale a pena notar: no (pelo menos) FreeBSD e Mac OS X, você pode manipular arquivos cpio com tar. O tar BSD usa libarchive sob o capô, para que ele possa lidar com cpio, pax, shar ...
Isso significa que os problemas de usabilidade do
cpio
comando não precisam impedi-lo de interagir com os arquivos cpio.fonte
only cpio may read the format of tar
. você disse:BSD tar uses libarchive under the hood, so it can handle cpio, pax, shar
. isso não é uma contradição?Embora as respostas aqui já sejam comparadas
cpio
etar
muito bem, gostaria de destacar um doscpio
recursos chamados modo de pipeline, que torna mais eficiente copiar arquivos seletivos (por exemplo, viafind
e filtro), preservando sua estrutura de diretórios. Esse recurso está bem documentado e, em sua premissa básica, fica assim:O equivalente a
tar
envolveria algo como isto:É claro que existem outras alternativas como
rsync
ecp --parents
discutidas em outro segmento , mas nada se aproxima da flexibilidade oferecida pela combinação defind
ecpio
. Comtar
sendo onipresente para criação de arquivos, esta é a única razão pela qual eu ainda usocpio
.fonte