BZIP2 archívum (.bz2)
Bzip2 SzabványA Bzip2 (BZ2) egy klasszikus, szabadalmaktól mentes Unix tömörítő segédprogram és fájlformátum, amelyet Julian Seward hozott létre. A Burrows-Wheeler transzformációt alkalmazza, amellyel jelentősen jobb tömörítési arányt ér el a klasszikus Gzipnél.
Vizsgálat és metaadatok
Az operációs rendszerek és a fájlelemzők a kezdő bináris bájtsorozat vizsgálatával azonosítják a(z) BZ2 fájlokat:
Bájtszintű fejlécaláírás (fájlazonosító bájtok)
Az operációs rendszerek és a fájlelemzők a kezdő bináris bájtsorozat vizsgálatával azonosítják a(z) BZ2 fájlokat:
HEX ALÁÍRÁS (ELTOLÁS 0):
42 5A 68ASCII ÁBRÁZOLÁS: BZh
Szabványosítás: Bzip2 Open Source Standard
Műszaki specifikációk
| Konténer architektúra | Adatfolyamfejléc („BZh” + az 1-9 közötti blokkméretet jelző számjegy), majd tömörített adatblokkok és 32 bites CRC következik |
| Tömörítés | Burrows-Wheeler-transzformáció (BWT), Move-to-Front-transzformáció (MTF) és Huffman-kódolás |
| Bájtsorrend | nagy bájtsorrendű bitfolyam-keretezés |
| Színterek | Nem alkalmazható (bájttömörítési adatfolyam) |
| Csatornák és struktúra | Egyfájlos, tömörített bájtfolyam |
| Max. méretek | Korlátlan adatfolyam-hossz (tetszőleges fájlméretet támogat) |
| Átlátszóság | Veszteségmentes adatmegőrzés, 100%-ban bitpontos visszaállítással |
| Streaming és progresszív | Szekvenciális, blokkonkénti adatfolyam-feldolgozás, blokkonként külön CRC-ellenőrzőösszeggel |
Műszaki összehasonlító mátrix: BZ2 vs. versenytársak
| Technikai attribútum | BZ2 (Jelenlegi) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Alapvető algoritmus | Burrows-Wheeler transzformáció (BWT) | Deflate (LZ77 + Huffman) | LZMA / LZMA2 | Véges állapotú entrópia + LZ77 |
| Tömörítés a Gziphez képest | 10 - 20%-kal kisebb fájlméret, mint a Gzip esetén | Alapszintű szabvány | 20 - 30%-kal kisebb fájlméret, mint a Gzip esetén | 10 - 20%-kal kisebb fájlméret, mint a Gzip esetén |
| Kitömörítési sebesség | Lassú (~30 - 50 MB/s) | Gyors (~300 MB/s) | Mérsékelt (~100 MB/s) | Villámgyors (>1,5 GB/s) |
| Blokk-ellenőrzőösszegek | Blokkonkénti 32 bites CRC | Egyetlen CRC32 az adatfolyamhoz | Adatfolyam CRC64 | Adatfolyam xxHash64 |
Gyakori sérülési módok és hexadecimális helyreállítási útmutató
A kitömörítés megszakad a „bzip2: Data integrity error when decompressing" hibaüzenettel.
Kiváltó ok: Egy bit megváltozik a tömörített blokkban, ezért a BWT inverz permutációs mátrixának CRC32-ellenőrzése sikertelen lesz.
Helyreállítás: Használja a „bzip2recover" segédprogramot a sérült szektort körülvevő sértetlen blokkok mentéséhez.
Biztonsági elemzés és elemző (parser) támadási vektorok
A Bzip2-megvalósítások összetett bitfolyam-rendezést és Huffman-tábla-elemzést végeznek; ezekben korábban egészszám-túlcsordulási hibák fordultak elő.
Ismert támadási vektorok
- Egészszám-túlcsordulás a BWT rendezőtömbjének lefoglalásakor (pl. CVE-2016-3189).
- Határon túli írás a Huffman-dekódolótábla összeállításakor.
- Szolgáltatásmegtagadás (DoS) olyan szélsőséges bemeneti minták révén, amelyek a legrosszabb esetben négyzetes idejű BWT-rendezést okoznak.
Ajánlott védekezési módszerek: A BZ2-fájlokat memóriabiztos WASM-dekóderekkel dekódolja, amelyek korlátozzák a memóriahasználatot.
Történeti háttér és mérföldkövek
Főbb előnyök
- Forráskód-archívumok, rendszernaplók és szöveges adatbázisok esetén következetesen 10-20%-kal felülmúlja a klasszikus Gzipet.
- A független blokkarchitektúra (100k és 900k között) blokkonkénti 32 bites CRC-ellenőrzőösszegeket tartalmaz a robusztus integritásellenőrzés érdekében.
- Sok Linux-, BSD- és macOS-disztribúcióban natívan elérhető; a csomagolás disztribúciónként eltér.
Technikai korlátok és hátrányok
- Jelentősen lassabb tömörítési és kitömörítési sebesség a modern algoritmusokhoz, például a Zstandardhoz képest.
- Csak egyfájlos tömörítés: több fájl vagy könyvtár csomagolásához TAR (.tar.bz2) formátummal kell párosítani.
- Nagyobb CPU-használat a kitömörítés során a Gziphez vagy a Zstdhez képest.
Érdekes technikai tudnivalók
- A „BZh” fájlazonosító bájtok a „Burrows-Wheeler Zip Huffman” kifejezésre utalnak. Ezeket egy számjegy követi ('1'-től '9'-ig), amely a blokkméretet százezer bájtos egységekben adja meg (pl. 'BZh9' = 900 KB).
- A Linux kernel forráskódját több mint egy évtizedig kizárólag .tar.bz2 formátumban terjesztették, mielőtt áttértek volna a .xz formátumra.
- A Burrows-Wheeler transzformáció nem közvetlenül tömöríti az adatokat; megváltoztatja a karakterek sorrendjét úgy, hogy az azonos betűk egymás mellé kerüljenek.
Gyakran Ismételt Műszaki Kérdések
Mi a különbség a .gz és a .bz2 között?
A .bz2 a Burrows-Wheeler transzformációt használja a .gz-nél kisebb fájlméret eléréséhez, de a tömörítése és kitömörítése több időt vesz igénybe.
Miért van a bzip2-nek „bzip2recover” parancsa?
Mivel a bzip2 független, 900 KB-os blokkokban - mindegyik saját CRC-vel ellátva - tömöríti az adatokat, a bzip2recover képes kinyerni a sértetlen blokkokat még akkor is, ha a fájl egy része megsérült.
Hogyan bontsak ki egy .tar.bz2-fájlt?
A .tar.bz2 fájlokat közvetlenül a webböngészőjében csomagolhatja ki a File2File.app segítségével, parancssori eszközök futtatása nélkül.