Pagina inicial » como » Qual é a vantagem de usar o formato de arquivo tar hoje?

    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 do arquivos…  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 para blah.tar.gz, em seguida, desvincule (exclua) o arquivo blah.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 arquivoblah.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 a alcatrã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 encapsular alcatrão, e você tem o arquivo TAR LZMA2'ed, que é tão eficiente quanto o algoritmo mais avançado disponível para 7-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.