Parte 1: Desempenho
Aqui está uma comparação de dois fluxos de trabalho separados e o que eles fazem.
Você tem um arquivo no disco blah.tar.gz
com, por exemplo, 1 GB de dados compactados com gzip que, quando descompactados, ocupam 2 GB (portanto, uma taxa de compactação de 50%).
A maneira como você criaria isso, se fosse para arquivamento e compactação separadamente, seria:
tar cf blah.tar files ...
Isso resultaria em blah.tar
uma mera agregação da files ...
forma não compactada.
Então você faria
gzip blah.tar
Isso lê o conteúdo blah.tar
do disco, compacta-o através do algoritmo de compressão gzip, grava o conteúdo e blah.tar.gz
, em seguida, desvincula (exclui) o arquivo blah.tar
.
Agora, vamos descomprimir!
Caminho 1
Você tem blah.tar.gz
, de um jeito ou de outro.
Você decide executar:
gunzip blah.tar.gz
Isso vai
- LEIA o conteúdo de dados compactados de 1 GB de
blah.tar.gz
.
- PROCESSE os dados compactados através do
gzip
descompactador na memória.
- À medida que o buffer de memória se enche de "um bloco" de dados, ESCREVA os dados não compactados no arquivo
blah.tar
em disco e repita até que todos os dados compactados sejam lidos.
- Desvincule (exclua) o arquivo
blah.tar.gz
.
Agora, você tem blah.tar
no disco, que não é compactado, mas contém um ou mais arquivos, com sobrecarga de estrutura de dados muito baixa. O tamanho do arquivo é provavelmente alguns bytes maior que a soma de todos os dados do arquivo.
Você corre:
tar xvf blah.tar
Isso vai
- LEIA os 2 GB de conteúdo de dados não compactados
blah.tar
e as tar
estruturas de dados do formato de arquivo, incluindo informações sobre permissões de arquivos, nomes de arquivos, diretórios etc.
- ESCREVA os 2 GB de dados mais os metadados no disco. Isso envolve: converter as informações da estrutura de dados / metadados na criação de novos arquivos e diretórios no disco, conforme apropriado, ou reescrever os arquivos e diretórios existentes com novos conteúdos de dados.
O total de dados que lemos do disco nesse processo foi de 1 GB (para gunzip) + 2 GB (para tar) = 3 GB.
O total de dados que gravamos no disco nesse processo foi de 2 GB (para gunzip) + 2 GB (para tar) + alguns bytes para metadados = cerca de 4 GB.
Caminho 2
Você tem blah.tar.gz
, de um jeito ou de outro.
Você decide executar:
tar xvzf blah.tar.gz
Isso vai
- LEIA o conteúdo de dados compactados de 1 GB
blah.tar.gz
na memória, um bloco de cada vez.
- PROCESSE os dados compactados através do
gzip
descompactador na memória.
- À medida que o buffer de memória é preenchido, ele direciona esses dados, na memória, para o
tar
analisador de formato de arquivo, que lê as informações sobre metadados etc. e os dados do arquivo não compactado.
- À medida que o buffer de memória é preenchido no
tar
analisador de arquivos, ele grava os dados não compactados no disco, criando arquivos e diretórios e preenchendo-os com o conteúdo não compactado.
O total de dados que lemos do disco nesse processo foi de 1 GB de dados compactados, ponto final.
O total de dados que gravamos no disco nesse processo foi de 2 GB de dados não compactados + alguns bytes para metadados = cerca de 2 GB.
Se você notar, a quantidade de disco I / O no Caminho 2 é idêntico ao disco I / O realizadas por, digamos, as Zip
ou 7-Zip programas, ajuste para quaisquer diferenças na taxa de compressão.
E se a taxa de compressão é sua preocupação, use o Xz
compressor para encapsular tar
e você terá o arquivo TAR do LZMA2 , que é tão eficiente quanto o algoritmo mais avançado disponível para o 7-Zip :-)
Parte 2: Recursos
tar
armazena permissões do Unix em seus metadados de arquivo e é muito conhecido e testado para compactar com êxito um diretório com todos os tipos de permissões diferentes, links simbólicos, etc. Há mais do que algumas instâncias em que é necessário enviar vários arquivos em um único arquivo ou fluxo, mas não necessariamente o compacta (embora a compactação seja útil e frequentemente usada).
Parte 3: Compatibilidade
Muitas ferramentas são distribuídas na forma de origem ou binária como .tar.gz ou .tar.bz2, porque é um formato de arquivo com "menor denominador comum": assim como a maioria dos usuários do Windows tem acesso a descompactadores .zip ou .rar, a maioria das instalações do Linux , mesmo o mais básico, terá acesso a pelo menos tar e gunzip, não importando a idade ou o tamanho reduzido. Até os firmwares Android têm acesso a essas ferramentas.
Novos projetos voltados para o público que executa distribuições modernas podem muito bem distribuir em um formato mais moderno, como .tar.xz (usando o formato de compactação Xz (LZMA), que compacta melhor que gzip ou bzip2) ou .7z, que é semelhante a os formatos de arquivo ZIP ou RAR , na medida em que comprime e especifica um layout para encapsular vários arquivos em um único arquivo.
Você não vê o .7z usado com mais frequência pelo mesmo motivo que a música não é vendida em lojas de download online em novos formatos, como o Opus , ou vídeo no WebM . Compatibilidade com pessoas que executam sistemas antigos ou muito básicos.
tar xvzf
é mais difícil do que7z -x
...