Qual é a vantagem de usar o formato de arquivo tar hoje?
O formato de arquivamento de alcatrão é, nos anos de computação, um verdadeiro Methuselah, mas ainda está em uso pesado hoje em dia. O que torna o formato tar tão útil muito depois de sua criação??
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 de Superusuários MarcusJ está curioso sobre o formato tar e por que ainda o usamos depois de todos esses anos:
Eu sei que o tar foi feito para arquivos de fita no passado, mas hoje nós temos formatos de arquivo que agregam arquivos e executam compressão dentro do mesmo formato de arquivo lógico.
Questões:
- Existe uma penalidade de desempenho durante os estágios de agregação / compactação / descompactação para usar o tar encapsulado em gzip ou bzip2, quando comparado ao uso de um formato de arquivo que agrega e compacta na mesma estrutura de dados? Suponha que o tempo de execução do compressor que está sendo comparado seja idêntico (por exemplo, gzip e Deflate são semelhantes).
- Existem recursos do formato de arquivo tar que outros formatos de arquivo, como .7z e .zip, não têm?
- Já que o tar é um formato de arquivo tão antigo, e formatos de arquivo mais recentes existem hoje, por que o tar (seja encapsulado em gzip, bzip2 ou até mesmo o novo xz) ainda é muito usado atualmente no GNU / Linux, Android, BSD e outros sistemas operacionais, para transferências de arquivos, origem de programas e downloads binários, e às vezes até como um formato de gerenciador de pacotes?
Essa é uma pergunta perfeitamente razoável; Tanta 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 A Allquixotic oferece algumas dicas sobre a longevidade e a funcionalidade do formato tar:
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
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:
arquivos tar cf blah.tar…
Isso resultaria em
blah.tar
que é uma mera agregação doarquivos…
em forma descomprimida.Então você faria
gzip blah.tar
Isso leria o conteúdo de
blah.tar
do disco, comprima-os pelo algoritmo de compactação gzip, grave o conteúdo parablah.tar.gz
, em seguida, desvincule (exclua) o arquivoblah.tar
.Agora vamos descomprimir!
Caminho 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, ESCREVA 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 pouca sobrecarga na estrutura de dados. O tamanho do arquivo é provavelmente alguns bytes maior que a soma de todos os dados do arquivo seria.Você corre:
tar xvf blah.tar
Isso vai
- LEIA os 2 GB de conteúdo de dados não compactados de
blah.tar
e aalcatrão
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 as informações de estrutura / metadados de dados para criar novos arquivos e diretórios no disco, conforme apropriado, ou reescrever arquivos e diretórios existentes com novos conteúdos de dados..
O total de dados que LER do disco neste processo foi 1GB (para gunzip) + 2GB (para tar) = 3GB.
O total de dados que 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, através do
alcatrão
analisador de formato de arquivo, que lerá as informações sobre metadados, etc. e os dados de arquivo não compactados.- À medida que o buffer de memória é preenchido
alcatrão
Analisador de arquivos, ele gravará os dados descompactados no disco, criando arquivos e diretórios e preenchendo-os com o conteúdo descompactado.O total de dados que LER do disco neste processo foi 1GB de dados compactados, período.
O total de dados que ESCREVI para disco nesse processo foi 2GB de dados não compactados + alguns bytes para metadados = cerca de 2GB.
Se você perceber, a quantidade de E / S do disco em Caminho 2 é idêntico para o disco I / O executado por, digamos, o
Fecho eclair
ou7-Zip
programas, ajustando para quaisquer diferenças na taxa de compressão.E se a taxa de compressão for sua preocupação, use o
Xz
compressor para encapsularalcatrão
, e você tem o arquivo TAR LZMA2'ed, que é tão eficiente quanto o algoritmo mais avançado disponível para7-Zip
:-)Parte 2: Recursos
alcatrão
armazena permissões UNIX dentro de seus metadados de arquivos, e é muito bem conhecido e testado para empacotar 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 globar 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 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 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 usado com mais frequência 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.