Existem duas tarefas distintas, mas relacionadas. Embalando uma árvore de arquivos
(incluindo nomes de arquivos, estrutura de diretórios, permissões do sistema de arquivos,
propriedade e quaisquer outros metadados) em um fluxo de bytes é chamado
arquivamento . Removendo a redundância em um fluxo de bytes para produzir um
Um fluxo de bytes menor é chamado de compressão .
No Unix, as duas operações são separadas, com ferramentas distintas para
cada. Na maioria das outras plataformas (atuais e históricas) ferramentas combinadas
execute o arquivamento e a compactação.
(o gzip e outros programas que imitam a interface do gzip freqüentemente
opção para armazenar o nome do arquivo original na saída compactada, mas
isso, juntamente com um CRC ou outra verificação para detectar a corrupção, é o
somente metadados que eles podem armazenar.)
Existem vantagens em separar a compactação do arquivamento.
O arquivamento é específico da plataforma (os metadados do sistema de arquivos
preservar varia muito), mas a implementação é simples,
em grande parte com E / S, e muda pouco ao longo do tempo. A compactação é independente de plataforma, mas as implementações são limitadas pela CPU
e algoritmos estão melhorando constantemente para tirar proveito do
recursos aumentados que o hardware moderno pode trazer para o
problema.
O mais popular arquivador do Unix é tar
, embora existam outros
como cpio
e ar
. (Pacotes Debian são ar
archives, enquanto
cpio
é frequentemente usado para discos ramiais iniciais.) tar
é ou tem sido frequentemente
combinado com ferramentas de compactação como compress
(.Z), gzip
(.gz),
bzip2
(.bz2) e xz
(.xz), do mais antigo para o mais novo, e não
coincidentemente da pior para a melhor compressão.
Criar um arquivo tar
e compactá-lo são etapas distintas: o
compressor não sabe nada sobre o formato de arquivo tar
. Isso significa que
extrair um único arquivo de um% compactado co_de% archive requer
descompactando todos os arquivos anteriores. Isso é freqüentemente chamado de
arquivo "sólido".
Igualmente, já que o tar é um formato de "streaming" - necessário para que seja útil em um
pipeline - não há nenhum índice global em um arquivo tar e listando
O conteúdo de um arquivo tar é tão caro quanto extraí-lo.
Por outro lado, Zip e RAR e 7-zip (os arquivadores mais populares
modernas plataformas Windows) geralmente compactam cada arquivo separadamente, e
comprimir metadados levemente se em tudo. Isso permite uma listagem barata de
os arquivos em um arquivo e extração de arquivos individuais, mas
significa que a redundância entre vários arquivos no mesmo arquivo
não pode ser explorado para aumentar a compactação. Enquanto em geral
compactar um arquivo já compactado não reduz o tamanho do arquivo
Além disso, ocasionalmente, você pode ver um arquivo zip dentro de um arquivo zip: o
primeiro zipping virou muitos arquivos pequenos em um arquivo grande (provavelmente
com compressão desativada), que a segunda compactação é compactada
como uma entidade única.
Existe polinização cruzada entre as diferentes plataformas e
filosofias: tar
é essencialmente compressor de gzip
sem sua
arquivador, e zip
é essencialmente xz
do compressor sem o seu
arquivador.
Existem outros compressores especializados. Variantes do PPM e suas
sucessor 7-zip
são otimizados para compactação máxima sem considerar
consumo de recursos. Eles podem facilmente mastigar tanto CPU e RAM quanto
você pode jogá-los, e a descompressão é tão desgastante quanto
compressão (para contraste, as ferramentas de compressão mais utilizadas são
assimétrica : a descompressão é mais barata que a compressão).
No outro extremo do espectro, ZPAQ
, lzo
e snappy
são "light"
compressores projetados para velocidade máxima e recurso mínimo
consumo, ao custo da compressão. Eles são amplamente usados dentro
sistemas de arquivos e outros armazenamentos de objetos, mas menos como ferramentas independentes.
Então, qual você deve escolher?
Arquivamento:
Como você está no Ubuntu, não há motivo real para usar outra coisa
de LZ4
para arquivamento, a menos que você esteja tentando criar arquivos
facilmente legível em outro lugar.
tar
é difícil de superar pela onipresença, mas não é centralizado no Unix e
não mantenha as permissões do seu sistema de arquivos e as informações de propriedade, e
sua compressão cozida é antiquada. 7-zip e RAR (e ZPAQ) têm
compactação mais moderna, mas são igualmente inadequadas para arquivar o Unix
sistemas de arquivos (embora não haja nada que os impeça de usá-los
compressores); O RAR também é proprietário.
Compressão:
Para a compactação máxima, você pode dar uma olhada em um benchmark, como o
um enorme no link . Isso deve dar
você tem uma idéia melhor das compensações envolvidas.
Você provavelmente não deseja a compactação máxima. É também
caro.
zip
é a ferramenta de compactação de uso geral mais popular no moderno Unix
sistemas. Eu acredito que o 7-zip pode ler arquivos xz também, já que eles estão próximos
relacionados.
Finalmente: se você estiver arquivando dados para algo que não seja de curto prazo
armazenamento você deve escolher algo de código aberto e de preferência
difundido, para minimizar as dores de cabeça mais tarde.