A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser, uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade.
A questão
Leitor do SuperUser MarcusJ está curioso sobre o formato tar e por que ainda o usamos depois de todos esses anos:
I know that tar was made for tape archives back in the day, but today we have archive file formats that both aggregate files and perform compression within the same logical file format.
Questions:
- Is there a performance penalty during the aggregation/compression/decompression stages for using tar encapsulated in gzip or bzip2, when compared to using a file format that does aggregation and compression in the same data structure? Assume the runtime of the compressor being compared is identical (e.g. gzip and Deflate are similar).
- Are there features of the tar file format that other file formats, such as.7z and.zip do not have?
- Since tar is such an old file format, and newer file formats exist today, why is tar (whether encapsulated in gzip, bzip2 or even the new xz) still so widely used today on GNU/Linux, Android, BSD, and other such UNIX operating systems, for file transfers, program source and binary downloads, and sometimes even as a package manager format?
Essa é uma pergunta perfeitamente razoável; muita coisa mudou no mundo da computação nos últimos trinta anos, mas ainda estamos usando o formato tar. Qual é a história?
A resposta
Colaborador da SuperUser Allquixotic oferece algumas dicas sobre a longevidade e funcionalidade do formato tar:
Part 1: Performance
Here is a comparison of two separate workflows and what they do.
You have a file on disk
blah.tar.gz
que é, digamos, 1 GB de dados compactados com gzip que, quando não compactados, ocupam 2 GB (portanto, uma taxa de compactação de 50%).
A maneira que você criaria isso, se você fizesse arquivamento e compactação separadamente, seria:
tar cf blah.tar files …
Isso resultaria em
blah.tar
que é uma mera agregação do
files …
em forma não comprimida.
Então você faria
gzip blah.tar
Isso leria o conteúdo de
blah.tar
do disco, comprima-os através do algoritmo de compactação gzip, escreva o conteúdo
blah.tar.gz
e, em seguida, desvincule (exclua) o arquivo
blah.tar
Agora vamos descomprimir!
Maneira 1
Você tem
blah.tar.gz
De uma forma ou de outra.
Você decide executar:
gunzip blah.tar.gz
Isso vai
-
LEIA o conteúdo de dados compactados de 1GB
blah.tar.gz
-
PROCESSAR os dados comprimidos através do
gzip
descompressor na memória.
-
À medida que o buffer de memória é preenchido com "um bloco" de dados, WRITE os dados não compactados no arquivo
blah.tar
no disco e repita até que todos os dados comprimidos sejam lidos.
-
Desvincular (excluir) o arquivo
blah.tar.gz
Agora você tem
blah.tar
no disco, que é descompactado, mas contém um ou mais arquivos dentro dele, com sobrecarga de estrutura de dados muito baixa. O tamanho do arquivo é provavelmentealguns bytes maior que a soma de todos os dados do arquivo.
Você corre:
tar xvf blah.tar
Isso vai
-
LEIA os 2GB de conteúdo de dados não compactados de
blah.tar
e a
tar
estruturas de dados do formato de arquivo, incluindo informações sobre permissões de arquivos, nomes de arquivos, diretórios etc.
- ESCREVA no disco os 2 GB de dados mais os metadados. Isso envolve: converter a estrutura de dados / informações de metadados em novos arquivos e diretórios no disco, conforme apropriado, ou reescrever arquivos e diretórios existentes com novos conteúdos de dados.
Os dados totais nós LER do disco nesse processo foi de 1 GB (para gunzip) + 2 GB (para tar) = 3 GB.
Os dados totais nós ESCREVI para 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 uma forma ou de outra.
Você decide executar:
tar xvzf blah.tar.gz
Isso vai
-
LEIA o conteúdo de dados compactados de 1GB
blah.tar.gz
um bloco de cada vez, na memória.
-
PROCESSAR os dados comprimidos através do
gzip
descompressor na memória.
-
À medida que o buffer de memória é preenchido, tubo esses dados, na memória, até o
tar
analisador de formato de arquivo, que lerá as informações sobre metadados, etc. e os dados de arquivos descompactados.
-
À medida que o buffer de memória é preenchido
tar
Analisador de arquivos, ele gravará os dados descompactados no disco, criando arquivos e diretórios e preenchendo-os com o conteúdo descompactado.
Os dados totais nós LER do disco neste processo foi 1GB de dados compactados, ponto final.
Os dados totais nós ESCREVI para 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 E / S do disco em Caminho 2 éidêntico para o disco I / O executado por, digamos, o
Zip
ou
7-Zip
programas, ajustando as diferenças na taxa de compressão.
E se a taxa de compressão for sua preocupação, use o
Xz
compressor para encapsular
tar
e você tem o arquivo TAR do LZMA2, que é tão eficiente quanto o algoritmo mais avançado disponível para
7-Zip
:-)
Parte 2: Recursos
tar
armazena permissões do UNIX dentro de seus metadados de arquivo e é muito bem conhecido e testado para compactar com sucesso um diretório com todos os tipos de permissões diferentes, links simbólicos etc. Há mais do que alguns casos em que é necessário globalizar um monte de arquivos um único arquivo ou fluxo, mas não necessariamente compactá-lo (embora a compactação seja útil e usada com frequência).
Parte 3: Compatibilidade
Muitas ferramentas são distribuídas em fonte ou forma binária como.tar.gz ou.tar.bz2 porque é um formato de arquivo de “menor denominador comum”: assim como a maioria dos usuários do Windows tem acesso a descompactadores.zip ou.rar, a maioria das instalações Linux, mesmo o mais básico, terá acesso a pelo menos tar e gunzip, não importa quão antigo ou reduzido. Até mesmo os firmwares Android têm acesso a essas ferramentas.
Novos projetos voltados para audiências que executam distribuições modernas podem muito bem ser distribuídos em um formato mais moderno, como.tar.xz (usando o formato de compactação Xz (LZMA), que comprime melhor que gzip ou bzip2) ou.7z, que é semelhante a os formatos de arquivo Zip ou Rar, pois comprime e especifica um layout para encapsular vários arquivos em um único arquivo.
Você não vê.7z mais frequentemente, pela mesma razão pela qual a música não é vendida em lojas de downloads on-line em novos formatos, como o Opus, ou em vídeos no WebM. Compatibilidade com pessoas que executam sistemas antigos ou muito básicos.
Tem algo a acrescentar à explicação? Soe fora nos comentários.Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.