Arhivă BZIP2 (.bz2)
Standardul StandardBzip2 (BZ2) este un utilitar clasic de compresie Unix fără brevete și un format de fișier creat de Julian Seward, care utilizează transformata Burrows-Wheeler pentru a obține o compresie semnificativ mai eficientă decât cea oferită de clasicul Gzip.
Inspectare și metadate
Sistemele de operare și analizatoarele de fișiere identifică fișierele BZ2 prin inspectarea secvenței binare inițiale:
Semnătura antetului la nivel de octet (octeți magici)
Sistemele de operare și analizatoarele de fișiere identifică fișierele BZ2 prin inspectarea secvenței binare inițiale:
SEMNĂTURĂ HEXAZECIMALĂ (DECALAJ 0):
42 5A 68REPREZENTARE ASCII: BZh
Standardizare: Standardul open source Bzip2
Specificații tehnice
| Arhitectură container | Antet de flux („BZh” + o cifră pentru dimensiunea blocului, între 1 și 9), urmat de blocuri de date comprimate și CRC pe 32 de biți |
| Compresie | Transformata Burrows-Wheeler (BWT), transformarea Move-to-Front (MTF) și codarea Huffman |
| Ordinea octeților | Încadrare Big-Endian a fluxului de biți |
| Spații de culoare | Nu se aplică (flux de compresie a octeților) |
| Canale și structură | Flux comprimat de octeți într-un singur fișier |
| Dimensiuni maxime | Lungime nelimitată a fluxului (acceptă fișiere de orice dimensiune) |
| Transparență | Păstrarea datelor fără pierderi, identic la nivel de biți |
| Streaming și progresiv | Transmitere secvențială, bloc cu bloc, cu sume de control CRC independente pentru fiecare bloc |
Matrice de comparație tehnică: BZ2 vs. concurenți
| Atribut tehnic | BZ2 (Curent) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Algoritm de bază | Transformarea Burrows-Wheeler (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Finite State Entropy + LZ77 |
| Compresie vs Gzip | Cu 10% - 20% mai mică decât Gzip | Standard de bază | Cu 20% - 30% mai mică decât Gzip | Cu 10% - 20% mai mică decât Gzip |
| Viteză de decompresie | Lentă (~30-50 MB/s) | Rapidă (~300 MB/s) | Moderată (~100 MB/s) | Foarte rapidă (>1,5 GB/s) |
| Sume de control pe bloc | CRC pe 32 de biți per bloc | CRC32 pentru flux unic | CRC64 pentru flux | xxHash64 pentru flux |
Moduri comune de corupție și ghid de recuperare hexazecimală
Extragerea se oprește cu mesajul „bzip2: Eroare de integritate a datelor la decomprimare".
Cauză principală: Bit inversat în blocul comprimat, cauzând eșecul validării CRC32 pentru matricea de permutare inversă BWT.
Recuperare: Folosește utilitarul „bzip2recover” pentru a salva blocurile nedeteriorate din jurul sectorului corupt.
Analiză de securitate și vectori de atac asupra parserului
Implementările Bzip2 implică sortare complexă a fluxului de biți și analiză a tabelelor Huffman care, de-a lungul timpului, au avut erori de depășire a valorii întregi.
Vectori de atac cunoscuți
- Depășire a valorii întregi în alocarea matricei de sortare BWT (de exemplu, CVE-2016-3189).
- Scriere în afara limitelor în timpul asamblării tabelului de decodare Huffman.
- Refuz al serviciului prin tipare de intrare extreme care cauzează timpi de sortare BWT pătratici în cel mai rău caz.
Cele mai bune practici de securitate: Decodează fișierele BZ2 cu decodoare WASM sigure pentru memorie, care impun limite de memorie.
Origini istorice și repere
Avantaje cheie și beneficii
- Depășește în mod constant clasicul Gzip cu 10% până la 20% pentru arhivele tar cu cod sursă, jurnalele de sistem și bazele de date text.
- Arhitectura de blocuri independente (de la 100 kB la 900 kB) include sume de control CRC pe 32 de biți per bloc pentru o verificare robustă a integrității.
- Disponibil nativ în multe distribuții Linux, BSD și macOS; includerea diferă de la o distribuție la alta.
Limitări tehnice și dezavantaje
- Viteze de compresie și decompresie semnificativ mai lente în comparație cu algoritmii moderni precum Zstandard.
- Compresie doar pentru fișiere individuale: necesită asocierea cu TAR (.tar.bz2) pentru a împacheta mai multe fișiere sau directoare.
- Consum mai mare de procesor în timpul decompresiei decât Gzip sau Zstd.
Curiozități tehnice interesante
- Octeții magici „BZh” înseamnă „Burrows-Wheeler Zip Huffman”, urmați de o cifră („1” până la „9”) care indică dimensiunea blocului în sute de kiloocteți (de exemplu, „BZh9” = 900 KB).
- Codul sursă al nucleului Linux a fost distribuit exclusiv în format .tar.bz2 timp de peste un deceniu înainte de a migra la .xz.
- Transformata Burrows-Wheeler nu comprimă datele în mod direct; ea reordonează caracterele astfel încât literele identice să se grupeze.
Întrebări tehnice frecvente
Care este diferența dintre .gz și .bz2?
.bz2 folosește transformarea Burrows-Wheeler pentru a obține dimensiuni de fișiere mai mici decât .gz, însă comprimarea și decomprimarea durează mai mult.
De ce are bzip2 o comandă numită „bzip2recover”?
Deoarece bzip2 comprimă datele în blocuri independente de 900 KB, fiecare având propriul cod CRC, bzip2recover poate extrage blocurile nedeteriorate chiar și atunci când o parte a fișierului este coruptă.
Cum pot extrage un fișier .tar.bz2?
Poți despacheta fișiere .tar.bz2 direct în browserul web cu File2File.app, fără a rula instrumente în linia de comandă.