Por que os formatos de arquivo tar estão sendo alternados para a compactação xz para substituir o bzip2 e o gzip?

190

Mais e mais arquivos tar usam o xz baseado em LZMA2 para compressão em vez do tradicional % compressãobzip2(bz2) . De fato, o kernel.org fez um final " Adeus bzip2 " anúncio, 27 de dezembro de 2013 , indicando que as fontes do kernel seriam, a partir de agora, lançadas nos formatos tar.gz e tar.xz - e na página principal do < href="https://www.kernel.org/"> website o que é oferecido diretamente é em tar.xz .

Há algum motivo específico para explicar por que isso está acontecendo e qual é a relevância de gzip nesse contexto?

    
por jus cogens prime 06.01.2014 / 19:39

4 respostas

184

Para distribuir arquivos pela Internet, as seguintes ações geralmente são uma prioridade:

  1. Taxa de compactação (isto é, quão pequeno o compressor faz os dados);
  2. Tempo de descompressão (requisitos de CPU);
  3. Requisitos de memória de descompactação; e
  4. Compatibilidade (como o programa de descompressão é difundido)

Memória de compressão & Os requisitos de CPU não são muito importantes, porque você pode usar uma grande máquina rápida para isso e só precisa fazer isso uma vez.

Comparado ao bzip2, o xz tem uma melhor taxa de compactação e menor (melhor) tempo de descompressão. No entanto, nas configurações de compactação normalmente usadas, é necessária mais memória para descompactar [1] e é um pouco menos difundida. O Gzip usa menos memória que qualquer um deles.

Assim, os arquivos em formato gzip e xz são postados, permitindo que você escolha:

  • Precisa descomprimir em uma máquina com muito memória limitada (< 32 MB): gzip. Dado, não é muito provável quando se fala de fontes do kernel.
  • Precisa descomprimir as ferramentas mínimas disponíveis: gzip
  • Deseja economizar tempo de download e / ou largura de banda: xz

Não há realmente uma combinação realista de fatores que levariam você a escolher o bzip2. Então está sendo eliminado.

Eu olhei para comparações de compressão em uma postagem no blog . Eu não tentei replicar os resultados, e suspeito que alguns deles tenham mudado (principalmente, eu espero que xz tenha melhorado, já que é o mais novo.)

(Existem alguns cenários específicos onde uma boa implementação do bzip2 pode ser preferível a xz: o bzip2 pode comprimir um arquivo com muitos zeros e sequências de DNA genômicas melhor que xz. Versões mais recentes do xz agora têm um modo de bloqueio (opcional) que permite a recuperação de dados após o ponto de corrupção e compressão paralela e descompressão [em teoria]. Anteriormente, apenas o bzip2 oferecia isso. [2] No entanto, nenhum deles é relevante para a distribuição do kernel)

1: no tamanho do arquivo, xz -3 está em torno de bzip -9 . Então o xz usa menos memória para descomprimir. Mas xz -9 (como, por exemplo, usado para tarballs do kernel Linux) usa muito mais do que bzip -9 . (E até xz -0 precisa de mais de gzip -9 ).

2: Mudança no Sistema F21: lbzip2 como implementação padrão do bzip2

    
por 06.01.2014 / 19:57
44

Em primeiro lugar, essa questão não está diretamente relacionada a tar . Tar apenas cria um arquivo descompactado, a compactação é aplicada mais tarde.

O gzip é conhecido por ser relativamente rápido quando comparado ao LZMA2 e ao bzip2. Se a velocidade for importante, gzip (especialmente a implementação multithread pigz ) é geralmente um bom compromisso entre a velocidade de compactação e a taxa de compactação. Embora haja alternativas se a velocidade for um problema (por exemplo, LZ4).

No entanto, se uma alta taxa de compressão for desejada, o LZMA2 bate bzip2 em quase todos os aspectos. A velocidade de compactação é geralmente mais lenta, mas é descompactada muito mais rapidamente e fornece uma taxa de compactação muito melhor ao custo de uso de memória mais alto.

Não há mais motivos para usar bzip2 , exceto a compatibilidade com versões anteriores. Além disso, o LZMA2 foi desenvolvido tendo em mente o multithreading e muitas implementações, por padrão, utilizam CPUs multicore (infelizmente xz no Linux não faz isso, ainda). Isso faz sentido, já que a velocidade do clock não aumentará mais, mas o número de núcleos será maior.

Existem implementações bzip2 multissegmentadas (por exemplo, pbzip ), mas elas geralmente não são instaladas por padrão. Observe também que multithread bzip2 apenas compensam enquanto compactam , enquanto a descompactação usa um único thread se o arquivo foi compactado usando um único thread bzip2 , em contraste com LZMA2. Parallel bzip2 variants só pode aproveitar CPUs com vários núcleos se o arquivo foi compactado usando uma versão bzip2 paralela, o que geralmente não é o caso.

    
por 06.01.2014 / 19:55
19

Resposta curta : xz é mais eficiente em termos de taxa de compressão. Por isso, economiza espaço em disco e otimiza a transferência através da rede.
Você pode ver esta referência rápida para descobrir a diferença por meio de testes práticos.

    
por 06.01.2014 / 20:14
12

O LZMA2 é um sistema de compactação de bloco, enquanto o gzip não é. Isso significa que o LZMA2 se presta a multi-threading. Além disso, se a corrupção ocorre em um arquivo, geralmente você pode recuperar dados de blocos subseqüentes com LZMA2, mas você não pode fazer isso com gzip. Na prática, você perde todo o arquivo com gzip subseqüente ao bloco corrompido. Com um arquivo LZMA2, você perde apenas o (s) arquivo (s) afetado (s) pelo (s) bloco (s) corrompido (s). Isso pode ser importante em arquivos maiores com vários arquivos.

    
por 14.04.2016 / 16:15