BZIP2 arhiva (.bz2)
Otvoreni StandardBzip2 (BZ2) je klasični Unix uslužni program i format datoteke za kompresiju bez gubitaka koji ne podleže patentima, a kreirao ga je Julian Seward. On koristi Burrows-Wheelerovu transformaciju da postigne znatno veću kompresiju od klasičnog Gzip-a.
Pregled i metapodaci
Operativni sistemi i analizatori datoteka identifikuju BZ2 datoteke proverom početnog binarnog niza bajtova:
Potpis zaglavlja na nivou bajtova (magični bajtovi)
Operativni sistemi i analizatori datoteka identifikuju BZ2 datoteke proverom početnog binarnog niza bajtova:
HEKSADECIMALNI POTPIS (OFFSET 0):
42 5A 68ASCII REPREZENTACIJA: BZh
Standardizacija: Otvoreni standard Bzip2-a
Tehničke specifikacije
| Arhitektura kontejnera | Zaglavlje toka („BZh“ i cifra veličine bloka od 1 do 9), zatim kompresovani blokovi podataka i 32-bitna CRC kontrolna suma |
| Kompresija | Burrows-Wheelerova transformacija (BWT), transformacija Move-to-Front (MTF) i Huffmanovo kodiranje |
| Bajtni redosled (Endianness) | Uokviravanje bitnog toka s redosledom bajtova od najznačajnijeg ka najmanje značajnom |
| Prostori boja | Nije primenljivo (tok za kompresiju bajtova) |
| Kanali i struktura | Tok kompresovanih bajtova jedne datoteke |
| Maksimalne dimenzije | Neograničena dužina toka (podržava datoteke proizvoljne veličine) |
| Transparentnost | Potpuno očuvanje podataka bez gubitaka, uz potpuno podudaranje bajt po bajt pri povratnoj konverziji |
| Strimovanje i progresivno učitavanje | Sekvencijalni prenos blok po blok, s nezavisnom CRC kontrolnom sumom za svaki blok |
Tehnička matrica poređenja: BZ2 u odnosu na konkurente
| Tehnički atribut | BZ2 (Trenutno) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Osnovni algoritam | Burrows-Wheeler-ova transformacija (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Finite State Entropy + LZ77 |
| Kompresija u odnosu na Gzip | Veličina datoteke je 10% - 20% manja nego kod Gzip-a | Osnovni standard | Veličina datoteke je 20% - 30% manja nego kod Gzip-a | Veličina datoteke je 10% - 20% manja nego kod Gzip-a |
| Brzina dekompresije | Spora (~30-50 MB/s) | Brza (~300 MB/s) | Umerena (~100 MB/s) | Izuzetno brza (>1.5 GB/s) |
| Kontrolne sume blokova | 32-bitni CRC po bloku | CRC32 za ceo tok | CRC64 za tok | xxHash64 za tok |
Uobičajeni režimi oštećenja i vodič za heksadecimalni oporavak
Ekstrakcija se prekida sa porukom 'bzip2: Data integrity error when decompressing'.
Osnovni uzrok: Izmenjeni bit u kompresovanom bloku usled čega inverzna permutaciona matrica BWT-a ne uspeva da prođe CRC32 validaciju.
Oporavak: Koristite uslužni program 'bzip2recover' da spasite neoštećene blokove koji okružuju oštećeni sektor.
Bezbednosna analiza i vektori napada parsera
Implementacije bzip2-a uključuju složeno sortiranje bitskog toka i obradu Hafmanovih tabela, gde su se istorijski javljale greške usled prekoračenja celobrojne vrednosti.
Poznati vektori napada
- Prekoračenje celobrojne vrednosti pri alokaciji BWT niza za sortiranje (npr. CVE-2016-3189).
- Upis van granica memorije tokom sklapanja tabele za Hafmanovo dekodiranje.
- Uskraćivanje usluge (DoS) pomoću specifičnih ulaznih obrazaca koji dovode do najgoreg slučaja kvadratne vremenske složenosti BWT sortiranja.
Najbolje prakse za zaštitu: Dekodirajte BZ2 datoteke pomoću WASM dekodera koji bezbedno upravljaju memorijom i imaju postavljene memorijske granice.
Istorijat i prekretnice
Ključne prednosti
- Na arhivama tar sa izvornim kodom, sistemskim dnevnicima i tekstualnim bazama podataka dosledno postiže 10% do 20% bolju kompresiju nego klasični Gzip.
- Nezavisna arhitektura blokova (100k do 900k) obuhvata 32-bitne CRC kontrolne sume po blokovima radi pouzdane provere integriteta.
- Izvorno je dostupan u mnogim Linux, BSD i macOS distribucijama; uključenost zavisi od distribucije.
Tehnička ograničenja i nedostaci
- Znatno sporije brzine kompresije i dekompresije u poređenju sa modernim algoritmima kao što je Zstandard.
- Kompresuje samo pojedinačne datoteke: za pakovanje više datoteka ili direktorijuma potrebno ga je kombinovati sa TAR-om (.tar.bz2).
- Veća potrošnja procesora (CPU) tokom dekompresije u poređenju sa Gzip-om ili Zstd-om.
Zanimljivosti
- Magični bajtovi 'BZh' označavaju 'Burrows-Wheeler Zip Huffman', a nakon njih sledi cifra (od '1' do '9') koja označava veličinu bloka u stotinama kilobajta (npr. 'BZh9' = 900 KB).
- Izvorni kod Linux kernela distribuirao se isključivo u formatu .tar.bz2 više od decenije, pre prelaska na .xz.
- Burrows-Wheelerova transformacija ne kompresuje podatke direktno; ona menja redosled znakova tako da se isti znakovi nađu jedan pored drugog, što olakšava njihovo kompresovanje Hafmanovim kodiranjem.
Često postavljana tehnička pitanja
Koja je razlika između .gz i .bz2?
.bz2 koristi Burrows-Wheeler transformaciju da postigne manju veličinu datoteka od .gz, ali je za njegovu kompresiju i dekompresiju potrebno više vremena.
Zašto bzip2 ima komandu 'bzip2recover'?
Pošto bzip2 kompresuje podatke u nezavisnim blokovima od 900 KB, od kojih svaki ima svoju CRC vrednost, bzip2recover može da izvuče neoštećene blokove čak i ako je deo datoteke oštećen.
Kako mogu da raspakujem .tar.bz2 datoteku?
Možete raspakovati .tar.bz2 datoteke direktno u svom veb-pregledaču pomoću aplikacije File2File.app bez pokretanja alata komandne linije.