Archivio BZIP2 (.bz2)
Standard StandardBzip2 (BZ2) è un classico formato di file e utilità di compressione Unix privo di brevetti, creato da Julian Seward, che utilizza la trasformata di Burrows-Wheeler per ottenere una compressione significativamente più densa rispetto al classico Gzip.
Ispeziona e metadati
I sistemi operativi e gli analizzatori di file identificano i file BZ2 ispezionando la sequenza di byte binari iniziale:
Firma dell'intestazione a livello di byte (Magic Bytes)
I sistemi operativi e gli analizzatori di file identificano i file BZ2 ispezionando la sequenza di byte binari iniziale:
FIRMA ESADECIMALE (OFFSET 0):
42 5A 68RAPPRESENTAZIONE ASCII: BZh
Standardizzazione: Standard Open Source Bzip2
Specifiche tecniche
| Architettura del container | Intestazione dello stream ('BZh' + cifra della dimensione del blocco 1-9) seguita da blocchi di dati compressi e CRC a 32-bit |
| Compressione | Trasformata di Burrows-Wheeler (BWT), trasformata Move-to-Front (MTF) e codifica di Huffman |
| Endianness dei byte | Frammentazione del flusso di bit Big-Endian |
| Spazi colore | N/A (Flusso di Compressione Byte) |
| Canali e struttura | Flusso di byte compressi a file singolo |
| Dimensioni massime | Lunghezza dello stream illimitata (supporta file di dimensioni arbitrarie) |
| Trasparenza | Conservazione dei dati lossless al 100% bit-esatta |
| Streaming e progressivo | Streaming sequenziale blocco per blocco con checksum CRC indipendenti per ciascun blocco |
Matrice di confronto tecnico: BZ2 vs Concorrenti
| Attributo tecnico | BZ2 (Corrente) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Algoritmo Principale | Trasformata di Burrows-Wheeler (BWT) | Sgonfia (LZ77 + Huffman) | LZMA / LZMA2 | Entropia a stati finiti + LZ77 |
| Compressione rispetto a Gzip | Dal 10% al 20% più piccolo di Gzip | Standard di riferimento | Dal 20% al 30% più piccolo di Gzip | Dal 10% al 20% più piccolo di Gzip |
| Velocità di Decompressione | Lenta (~30-50 MB/s) | Veloce (~300 MB/s) | Moderata (~100 MB/s) | Elevatissima (>1.5 GB/s) |
| Checksum dei Blocchi | CRC a 32-bit per blocco | CRC32 a stream singolo | Flusso CRC64 | Flusso xxHash64 |
Modalità di corruzione comuni e guida al recupero Hex
L'estrazione si interrompe con 'bzip2: Data integrity error when decompressing'.
Causa principale: Bit invertito nel blocco compresso che causa il fallimento della convalida CRC32 nella matrice di permutazione inversa BWT.
Ripristino: Utilizzare l'utilità 'bzip2recover' per recuperare i blocchi integri che circondano il settore danneggiato.
Analisi di sicurezza e vettori di attacco del parser
Le implementazioni di Bzip2 comportano una complessa ordinazione dei flussi di bit e l'analisi delle tabelle di Huffman che in passato hanno subito difetti di overflow di interi.
Vettori di attacco noti
- Overflow di interi nell'allocazione dell'array di ordinamento BWT (es. CVE-2016-3189).
- Scrittura oltre i limiti (out-of-bounds) durante l'assemblaggio della tabella di decodifica di Huffman.
- Denial of service tramite pattern di input patologici che causano tempi di ordinamento BWT quadratici nel caso peggiore.
Migliori pratiche difensive: Decodificare i file BZ2 utilizzando decoder WASM sicuri per la memoria con confini di memoria rigorosamente applicati.
Origini storiche e tappe fondamentali
Vantaggi principali e pro
- Supera costantemente il classico Gzip dal 10% al 20% su archivi di codice sorgente, log di sistema e database di testo.
- L'architettura a blocchi indipendenti (da 100k a 900k) include checksum CRC a 32-bit per blocco per un controllo dell'integrità affidabile.
- Disponibilità nativa universale su tutte le distribuzioni a riga di comando Linux, BSD e macOS.
Limiti tecnici e svantaggi
- Velocità di compressione e decompressione notevolmente inferiori rispetto agli algoritmi moderni come Zstandard.
- Compressione a file singolo: richiede l'abbinamento con TAR (.tar.bz2) per pacchettizzare più file o directory.
- Maggiore utilizzo della CPU durante la decompressione rispetto a Gzip o Zstd.
Curiosità tecniche interessanti
- I byte magici 'BZh' stanno per 'Burrows-Wheeler Zip Huffman', seguiti da una cifra (da '1' a '9') che indica la dimensione del blocco in centinaia di kilobyte (es. 'BZh9' = 900 KB).
- Il codice sorgente del kernel Linux è stato distribuito esclusivamente in formato .tar.bz2 per oltre un decennio prima di migrare a .xz.
- La trasformata di Burrows-Wheeler non comprime direttamente i dati; permuta l'ordine dei caratteri in modo che le lettere identiche si raggruppino, rendendole facilmente comprimibili tramite la codifica di Huffman.
Domande tecniche frequenti
Qual è la differenza tra .gz e .bz2?
.bz2 utilizza la trasformata di Burrows-Wheeler per ottenere dimensioni dei file inferiori rispetto a .gz, ma richiede più tempo per la compressione e la decompressione.
Perché bzip2 ha un comando 'bzip2recover'?
Poiché bzip2 comprime i dati in blocchi indipendenti da 900 KB, ciascuno dotato di un proprio CRC, bzip2recover è in grado di estrarre i blocchi integri anche se una parte del file è danneggiata.
Come posso estrarre un file .tar.bz2?
Puoi decomprimere i file .tar.bz2 direttamente nel tuo browser web con File2File.app senza dover eseguire strumenti a riga di comando.