Archivio BZIP2 (.bz2)
Standard StandardBzip2 (BZ2) è una classica utility Unix per la compressione senza brevetti, creata da Julian Seward. Usa la trasformata di Burrows-Wheeler per comprimere i dati più di Gzip.
Ispezione 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 contenitore | 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/D (flusso di compressione di byte) |
| Canali e struttura | Flusso di byte compresso per un singolo file |
| Dimensioni massime | Lunghezza dello stream illimitata (supporta file di dimensioni arbitrarie) |
| Trasparenza | Conservazione dei dati senza perdita, esatta bit per bit al 100% |
| 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 (Attuale) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Algoritmo principale | Trasformata di Burrows-Wheeler (BWT) | Deflate (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 esadecimale
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 complesse operazioni di ordinamento dei flussi di bit e di analisi delle tabelle di Huffman, che in passato sono state soggette a vulnerabilità di overflow degli interi.
Vettori di attacco noti
- Overflow degli interi nell'allocazione dell'array per l'ordinamento BWT (es. CVE-2016-3189).
- Scrittura oltre i limiti (out-of-bounds) durante l'assemblaggio della tabella di decodifica di Huffman.
- Attacco di negazione del servizio tramite dati patologici che nel caso peggiore provocano tempi quadratici di ordinamento BWT.
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
- 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 100 a 900 kB) include checksum CRC a 32 bit per blocco per un controllo dell'integrità affidabile.
- Disponibile nativamente in molte distribuzioni Linux, BSD e macOS; la presenza varia a seconda della distribuzione.
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 raggruppare più file o directory.
- Maggiore utilizzo della CPU durante la decompressione rispetto a Gzip o Zstd.
Curiosità tecniche
- La sequenza di byte magici 'BZh' sta per 'Burrows-Wheeler Zip Huffman' ed è seguita 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.
Domande tecniche frequenti
Qual è la differenza tra .gz e .bz2?
.bz2 usa la trasformata di Burrows-Wheeler e produce file più piccoli di .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.