Converter BZ2 para GZ

Aqui você converte BZ2 para GZ de graça e sem conta: solte o arquivo acima e em poucos segundos o resultado está pronto para baixar. O arquivo viaja criptografado até o nosso servidor, é convertido lá e é apagado assim que o trabalho termina.

  • Onde roda No nosso servidor, porque um navegador não roda o programa que isto exige.
  • Sem perdas Nada é descartado. O GZ guarda exatamente o que o BZ2 guardava.
  • Limite de tamanho Até 25 MB por arquivo, de graça e sem conta.
  • Vale saber Os arquivos saem byte a byte iguais. O que não sobrevive é o que o contêiner sabia *sobre* eles e não o que havia *dentro* deles: uma senha e, em alguns formatos, as permissões e as datas originais.

Até 100 arquivos de uma vez. Formatos misturados não são problema.

O arquivo bzip2 que ninguém reescreveu no pipeline

O bzip2 teve uma boa década: entre mais ou menos 1998 e 2010 era a resposta óbvia quando o gzip não comprimia o bastante, e muita coisa publicada nessa janela ainda é `.tar.bz2` — conjuntos de dados de referência, tarballs de kernel, depósitos científicos, o fixture que uma suíte de testes baixa a cada execução desde antes de qualquer pessoa atual do time entrar.

O arquivo em si não é o problema. O problema é que algo o descompacta numa rotina, e a descompressão do bzip2 é lenta o bastante para aparecer no log de um build. Ninguém vai recortar de novo o lançamento original — o jeito prático é recomprimir localmente em algo que abre rápido e cachear isso.

Por que desfazer um bloco ordenado custa muito mais que seguir uma referência

Os dois formatos descomprimem de jeitos estruturalmente diferentes, e a diferença não é questão de implementação. A saída do gzip é construída copiando bytes literais e copiando trechos anteriores de uma janela de 32 KB — o laço interno é basicamente movimentação de memória, e o hardware moderno é ótimo nisso.

O bzip2 precisa inverter uma transformada de Burrows–Wheeler para cada bloco de até 900 KB: reconstruir a ordem original a partir de uma permutação ordenada, uma passagem espalhada e nada amigável ao cache antes de qualquer byte de saída ficar pronto, mais desfazer as camadas de move-to-front e Huffman ao redor. É computação de verdade, não movimentação de dados, e nenhum ajuste transforma isso em velocidade de memória.

O tamanho que você entrega em troca, e quando é nada

Espere que o GZ fique maior, e espere que a margem dependa inteiramente do conteúdo. O bzip2 enxerga até 900 KB de contexto de cada vez, contra 32 KB do gzip, então em texto, logs, CSV, código-fonte e XML ele encontra repetição que o gzip não alcança.

Em outros conteúdos não há diferença que valha medir. Um arquivo bzip2 de JPEGs, PNGs, MP3s, MP4s ou um banco de dados já comprimido tem pouca compressão para começo de conversa — a redundância já foi removida por esses formatos antes de o arquivo entrar na compactação —, então recomprimir como gzip custa quase nada e traz todo o ganho de velocidade.

O fluxo sem nome, e um defeito que isso causou aqui

Um fluxo gzip guarda o nome do arquivo original no cabeçalho. Um fluxo bzip2 não guarda nada assim — nem nome, nem caminho, nenhuma pista sobre o conteúdo. Essa assimetria normalmente é uma curiosidade, e ela produziu um defeito real neste conversor.

A conversão precisa desembrulhar o TAR de dentro de um archive comprimido, e a primeira versão do código decidia se tinha achado um olhando o nome do arquivo. De um GZ isso funcionava, porque o gzip lembrava `output.tar`. De um BZ2 ou um XZ o mesmo tarball chegava chamado `input`, a checagem não detectava, e a conversão produzia um archive com um arquivo opaco só em vez dos trinta que entraram. A correção foi forçar o tipo tar em vez de inferir pelo nome.

Gzip está em lugares onde o bzip2 nunca chegou

Onipresença é a segunda metade do argumento desta conversão, e é fácil subestimar. DEFLATE é a compressão dentro do `Content-Encoding: gzip` do HTTP, dentro do PNG, dentro de um ZIP e dentro de um objeto do Git. Toda linguagem relevante já tem isso na biblioteca padrão — sem dependência para adicionar.

Bzip2 é uma biblioteca separada que precisa estar presente, e num contêiner mínimo, num runtime travado ou numa função de nuvem, muitas vezes não está. Gzip é uma codificação de conteúdo HTTP registrada, e bzip2 nunca foi.

Os blocos que o bzip2 conseguia recuperar, e o que você perde ao sair dele

Vale nomear o que se abre mão, não só o que se ganha. O bzip2 comprime cada bloco de forma independente, então um dano num bloco não destrói automaticamente tudo depois dele, e ferramentas de recuperação conseguem percorrer um arquivo corrompido e salvar os blocos intactos. Um fluxo gzip não tem essa estrutura — um bit invertido no meio do caminho costuma encerrar o arquivo ali.

Quanto isso importa depende de onde o arquivo mora. Num sistema de arquivos moderno com checksums ou num armazenamento de objetos que verifica o que devolve, importa pouco. Num único disco envelhecendo guardando a única cópia de algo insubstituível, importa mais — e nesse caso a resposta certa não é nenhum dos dois formatos, é um backup de verdade com integridade por arquivo.

Quando pular direto para XZ em vez de passar por gzip

Se o archive está sendo guardado, e não lido com frequência, gzip é o destino errado e XZ é o certo — vai comprimir os mesmos conteúdos consideravelmente melhor que o bzip2 e ainda descomprimir mais rápido. O leitor desta página não é essa pessoa, mas muita gente convertendo um archive bzip2 é, e vale avisar.

O teste é simples: conte quantas vezes o archive é descompactado. Com frequência, por máquinas, numa etapa que alguém espera — gzip. Raramente, por uma pessoa, de um armazenamento que cobra por gigabyte-mês — XZ. O único caso em que o bzip2 deveria ficar é uma máquina com pouquíssima memória.

Onde o bzip2 é descompactado a caminho do gzip

No nosso servidor, não no seu aparelho. A maioria das ferramentas deste site converte localmente e diz isso claramente; archives são uma das exceções, porque o trabalho precisa de 7-Zip e gzip como programas de verdade. O arquivo viaja por conexão criptografada até um contêiner que roda esses programas e que não tem acesso próprio à internet.

O job recebe um diretório de trabalho num sistema de arquivos baseado em memória, apagado assim que o job termina, e é encerrado depois de sessenta segundos — o que é uma restrição real aqui, já que o bzip2 é lento para descomprimir. O plano gratuito aceita 25 MB por arquivo enviado, e antes de extrair qualquer coisa o archive é questionado sobre quanto afirma expandir; acima de 2 GB é recusado direto.

Cronometrando antes e depois, e guardando o original

Esta conversão só vale a pena se os números disserem que sim, e conferir isso leva dois minutos: cronometre a extração do archive bzip2, cronometre a do gzipado, e compare os dois tamanhos. Se o archive é pequeno ou o pipeline o descompacta uma vez por mês, a economia é ruído.

Guarde o bzip2 original até que algo tenha realmente consumido o novo arquivo com sucesso. Não porque a conversão tem perdas — não tem, cada membro sai byte a byte —, mas porque o tarball é reconstruído em vez de passado direto, então ordem dos membros, datas e bits de permissão podem mudar.

Como converter BZ2 para GZ

  1. Solte o seu arquivo BZ2 nesta página, ou clique para escolher um.
  2. Escolha GZ como destino e comece a conversão.
  3. Baixe o arquivo GZ pronto.

BZ2 ou GZ: o que muda

BZ2 comparado com GZ
BZ2GZ
Nome completoArquivo Bzip2Arquivo Gzip
Extensão do arquivo.bz2.gz, .tgz
Tipo de mídiaapplication/x-bzip2application/gzip
CompressãoSem perdas — nada é descartadoSem perdas — nada é descartado
Publicado pela primeira vez19961992
EspecificaçãoRFC 1952
LicençaPadrão abertoPadrão aberto
Situação hojeAntigo, ainda lido em todo lugarAtual
Abre no navegadorNenhum navegadorNenhum navegador
Considerado no lugarXZXZ, ZIP

O que se mantém

Nada é descartado. BZ2 e GZ guardam o conteúdo sem perda, então a conversão troca a embalagem e não a qualidade — e pode ser repetida sem que o estrago se acumule.

Abrir o resultado

BZ2 é de 1996 e está praticamente superado. GZ é o que os programas atuais escrevem, então converter também é uma forma de continuar conseguindo ler.

7-Zip e Keka leem tanto BZ2 quanto GZ, então dá para comparar o resultado com o original sem um segundo programa.

Tamanho e qualidade

GZ trabalha com 32 KB de cada vez, contra 900 KB de BZ2: é dentro desse intervalo que uma repetição precisa caber para poder ser comprimida. É daí que vem a diferença de compressão e por isso ele é o mais rápido dos dois.

Para que serve cada formato

GZ e de 1992, descrito em RFC 1952. gzip, 7-Zip e Keka leem o formato.

De BZ2 para GZ: perguntas frequentes

Meu arquivo BZ2 é enviado para algum lugar?

É: esta conversão precisa de um software que não roda num navegador. O arquivo viaja criptografado até o nosso servidor, é apagado assim que o trabalho termina e o resultado, depois de 60 minutos. O trabalho é feito por 7-Zip, o compactador, na sua forma de linha de comando.

Converter BZ2 para GZ é grátis?

É, até 100 conversões por dia para arquivos de até 25 MB. Esse único limite existe porque esta conversão roda num servidor que nós pagamos. No resto aqui não há nada limitado, e marca d’água não existe em caso nenhum. O limite existe porque 7-Zip precisa de uma máquina nossa para rodar.

Perde qualidade ao converter BZ2 para GZ?

Não. GZ guarda o mesmo conteúdo sem jogar nada fora: o resultado é idêntico em qualidade ao original. Os arquivos saem byte a byte iguais. O que não sobrevive é o que o contêiner sabia *sobre* eles e não o que havia *dentro* deles: uma senha e, em alguns formatos, as permissões e as datas originais.

A conversão de BZ2 para GZ é sem perda?

Nada é descartado. BZ2 e GZ guardam o conteúdo sem perda, então a conversão troca a embalagem e não a qualidade — e pode ser repetida sem que o estrago se acumule.

Mais sobre esses formatos