Arquivo BZIP2 (.bz2)
Padrão PadrãoBzip2 (BZ2) é um utilitário de compressão Unix clássico e isento de patentes, criado por Julian Seward. Ele utiliza a transformada de Burrows-Wheeler para alcançar uma compressão significativamente mais eficiente do que o Gzip clássico.
Inspeção e metadados
Sistemas operacionais e analisadores de arquivos identificam arquivos BZ2 pela sequência inicial de bytes:
Assinatura do arquivo em bytes (magic bytes)
Sistemas operacionais e analisadores de arquivos identificam arquivos BZ2 pela sequência inicial de bytes:
ASSINATURA HEXADECIMAL (DESLOCAMENTO 0):
42 5A 68REPRESENTAÇÃO ASCII: BZh
Padronização: Padrão de Código Aberto Bzip2
Especificações técnicas
| Estrutura do contêiner | Cabeçalho de fluxo (BZh seguido do dígito de tamanho do bloco, de 1 a 9), seguido por blocos de dados compactados e CRC de 32 bits |
| Compressão | Transformada de Burrows-Wheeler (BWT), transformada Move-to-Front (MTF) e codificação de Huffman |
| Ordem dos bytes (endianness) | Enquadramento de fluxo de bits em big-endian |
| Espaços de cor | Não se aplica (fluxo de compactação de bytes) |
| Canais e Estrutura | Fluxo de bytes compactado de um único arquivo |
| Dimensões Máximas | Comprimento de fluxo ilimitado (compatível com arquivos de qualquer tamanho) |
| Transparência | Preservação de dados sem perdas, idênticos ao original bit a bit |
| Streaming e Progressivo | Processamento sequencial em fluxo, bloco a bloco, com uma soma de verificação CRC independente para cada bloco |
Matriz de comparação técnica: BZ2 e formatos concorrentes
| Atributo técnico | BZ2 (Atual) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Algoritmo principal | Transformada de Burrows-Wheeler (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Entropia de estado finito e LZ77 |
| Compactação em comparação com Gzip | 10% - 20% menor que o Gzip | Padrão de referência | 20% - 30% menor que o Gzip | 10% - 20% menor que o Gzip |
| Velocidade de descompactação | Lenta (cerca de 30 a 50 MB/s) | Rápida (cerca de 300 MB/s) | Moderada (cerca de 100 MB/s) | Muito rápida (mais de 1,5 GB/s) |
| Somas de verificação dos blocos | CRC de 32 bits por bloco | CRC32 de um único fluxo | CRC64 de fluxo | xxHash64 de fluxo |
Modos comuns de corrupção e guia de recuperação com editor hexadecimal
A extração é interrompida com a mensagem "bzip2: Data integrity error when decompressing".
Causa principal: Um bit invertido no bloco compactado faz com que a matriz de permutação inversa BWT falhe na validação CRC32.
Recuperação: Use o utilitário bzip2recover para recuperar blocos intactos próximos ao setor corrompido.
Análise de segurança e vetores de ataque a analisadores
As implementações do Bzip2 ordenam fluxos de bits complexos e analisam tabelas de Huffman, operações que já causaram falhas de estouro de inteiro.
Vetores de ataque conhecidos
- Estouro de inteiro ao alocar a matriz de ordenação BWT (por exemplo, CVE-2016-3189).
- Gravação fora dos limites durante a montagem da tabela de decodificação Huffman.
- Negação de serviço causada por padrões de entrada patológicos que levam a tempos quadráticos de ordenação BWT no pior caso.
Melhores práticas defensivas: Decodifique arquivos BZ2 com decodificadores WASM seguros para a memória e com limites de memória definidos.
Origens históricas e marcos
Principais vantagens
- Em arquivos tar de código-fonte, registros do sistema e bancos de dados de texto, costuma compactar de 10% a 20% mais que o Gzip clássico.
- A arquitetura de blocos independentes (de 100 KB a 900 KB) inclui somas de verificação CRC de 32 bits para cada bloco, garantindo uma verificação de integridade robusta.
- Disponível nativamente em muitas distribuições de linha de comando de Linux, BSD e macOS; a inclusão varia conforme a distribuição.
Limitações técnicas e desvantagens
- A compactação e a descompactação são bem mais lentas que em algoritmos modernos, como o Zstandard.
- Compacta apenas um arquivo por vez. Para reunir vários arquivos ou diretórios, é preciso combiná-lo com TAR (tar.bz2).
- Usa mais CPU durante a descompactação do que Gzip ou Zstandard.
Curiosidades técnicas
- Os bytes mágicos BZh vêm de Burrows-Wheeler Zip Huffman. O dígito seguinte (de 1 a 9) indica o tamanho do bloco em centenas de quilobytes; por exemplo, BZh9 indica 900 KB.
- Por mais de uma década, o código-fonte do kernel Linux foi distribuído exclusivamente em arquivos .tar.bz2, antes de migrar para .xz.
- A transformada de Burrows-Wheeler não compacta os dados diretamente. Ela reorganiza os caracteres para agrupar letras iguais.
Perguntas técnicas frequentes
Qual é a diferença entre .gz e .bz2?
O .bz2 usa a transformada de Burrows-Wheeler para gerar arquivos menores que o .gz, mas leva mais tempo para compactar e descompactar.
Por que o bzip2 possui o comando 'bzip2recover'?
O bzip2 compacta os dados em blocos independentes de 900 KB, cada um com seu próprio CRC. Assim, o bzip2recover consegue extrair blocos intactos mesmo que parte do arquivo esteja corrompida.
Como posso extrair um arquivo .tar.bz2?
Você pode extrair arquivos .tar.bz2 diretamente no navegador com o File2File.app, sem usar ferramentas de linha de comando.