BZIP2 archyvas (.bz2)
Bzip2 StandartinisBzip2 (BZ2) yra klasikinė, patentų neturinti „Unix" suspaudimo programa ir failo formatas, kurį sukūrė Julianas Sewardas ir kuri naudoja Burrows-Wheeler transformaciją, kad pasiektų žymiai geresnį suspaudimą nei klasikinis Gzip.
Tikrinti ir metaduomenys
Operacinės sistemos ir failų analizatoriai atpažįsta BZ2 failus tikrindami pradinę dvejetainę baitų seką:
Baitų lygio antraštės parašas (magiškieji baitai)
Operacinės sistemos ir failų analizatoriai atpažįsta BZ2 failus tikrindami pradinę dvejetainę baitų seką:
ŠEŠIOLIKTAINIS PARAŠAS (POSLINKIS 0):
42 5A 68ASCII ATVAIZDAVIMAS: BZh
Standartizacija: Bzip2 Open Source Standard
Techninės specifikacijos
| Konteinerio architektūra | Stream header ('BZh' + block size digit 1-9) followed by compressed data blocks and 32-bit CRC |
| Glaudinimas | Burrows-Wheeler Transform (BWT), Move-to-Front (MTF) transform, and Huffman coding |
| Baitų seka (Endianness) | Big-Endian bitstream framing |
| Spalvų erdvės | N/A (Byte Compression Stream) |
| Kanalai ir struktūra | Single-file compressed byte stream |
| Maksimalūs matmenys | Unbounded stream length (supports arbitrary file sizes) |
| Skaidrumas | 100% bit-exact lossless data preservation |
| Srautas ir progresyvusis įkėlimas | Sequential block-by-block streaming with independent per-block CRC checksums |
Techninė palyginimo matrica: BZ2 vs konkurentai
| Techninis atributas | BZ2 (Dabartinis) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Pagrindinis algoritmas | Burrows-Wheeler transformacija (BWT) | Išpūsti (LZ77 + Huffman) | LZMA / LZMA2 | Baigtinės būsenos entropija + LZ77 |
| Suspaudimas palyginti su Gzip | 10% - 20% mažesnis nei Gzip | Bazinė standarto vertė | 20% - 30% mažesnis nei Gzip | 10% - 20% mažesnis nei Gzip |
| Išskleidimo greitis | Lėtas (~30 - 50 MB/s) | Greitas (~300 MB/s) | Vidutinis (~100 MB/s) | Žaibiškas (>1,5 GB/s) |
| Blokų kontrolinės sumos | 32 bitų CRC kiekvienam blokui | Vieno srauto CRC32 | Srauto CRC64 | Srauto xxHash64 |
Dažni sugadinimo režimai ir šešioliktainio atkūrimo vadovas
Išskleidimas nutrūksta su pranešimu „bzip2: Data integrity error when decompressing".
Pirminė priežastis: Apverstas bitas suspaustame bloke, dėl kurio BWT atvirkštinė permutacijos matrica nesėkmingai praeina CRC32 patvirtinimą.
Atkūrimas: Naudokite „bzip2recover" įrankį, kad išgelbėtumėte nepažeistus blokus, esančius aplink sugadintą sektorių.
Saugumo analizė ir analizatoriaus atakos vektoriai
Bzip2 diegimai apima sudėtingą bitų srauto rūšiavimą ir Huffman lentelių analizę, kurioje praeityje pasitaikė sveikųjų skaičių perpildymo klaidų.
Žinomi atakos vektoriai
- Sveikųjų skaičių perpildymas BWT rūšiavimo masyvo paskirstyme (pvz., CVE-2016-3189).
- Atminties ribų pažeidimo (out-of-bounds) rašymas renkant Huffman dekodavimo lentelę.
- Paslaugos trikdžiai (DoS) per patologinius įvesties šablonus, sukeliančius blogiausio atvejo kvadratinį BWT rūšiavimo laiką.
Geriausia apsaugos praktika:
Istorinė kilmė ir svarbiausi etapai
Pagrindiniai privalumai
- Nuolat pranoksta klasikinį Gzip 10 - 20 % pirminio kodo archyvuose, sistemos žurnaluose ir tekstinėse duomenų bazėse.
- Nepriklausoma blokų architektūra (nuo 100k iki 900k) apima 32 bitų CRC kontrolines sumas kiekvienam blokui, užtikrinančias patikimą vientisumo tikrinimą.
- Visuotinis vietinis pasiekiamumas visose „Linux", BSD ir „macOS" komandinės eilutės distribucijose.
Techniniai apribojimai ir trūkumai
- Žymiai lėtesnis suspaudimo ir išskleidimo greitis, palyginti su šiuolaikiniais algoritmais, tokiais kaip Zstandard.
- Tik vieno failo suspaudimas: norint supakuoti kelis failus ar katalogus, reikia derinti su TAR (.tar.bz2).
- Didesnis procesoriaus naudojimas išskleidžiant nei Gzip arba Zstd.
Įdomūs techniniai faktai
- Magiškieji baitai „BZh" reiškia „Burrows-Wheeler Zip Huffman", po kurių eina skaitmuo (nuo „1" iki „9"), nurodantis bloko dydį šimtais kilobaitų (pvz., „BZh9" = 900 KB).
- „Linux" branduolio pirminis kodas daugiau nei dešimtmetį buvo platinamas išimtinai .tar.bz2 formatu, kol buvo pereita prie .xz.
- Burrows-Wheeler transformacija tiesiogiai nesuspaudžia duomenų; ji perstato simbolių tvarką taip, kad vienodos raidės susigrupuotų, todėl jas galima lengvai suspausti naudojant Huffman kodavimą.
Dažniausiai užduodami techniniai klausimai
Kuo skiriasi .gz ir .bz2?
.bz2 naudoja Burrows-Wheeler transformaciją, leidžiančią pasiekti mažesnį failo dydį nei .gz, tačiau suspaudimas ir išskleidimas užtrunka ilgiau.
Kodėl bzip2 turi „bzip2recover“ komandą?
Kadangi bzip2 suspaudžia duomenis nepriklausomais 900 KB blokais, iš kurių kiekvienas turi savo CRC, „bzip2recover“ gali išgauti nepažeistus blokus net ir sugadinus dalį failo.
Kaip galiu išskleisti .tar.bz2 failą?
Failus .tar.bz2 galite išskleisti tiesiogiai interneto naršyklėje naudodami File2File.app, nenaudodami komandų eilutės įrankių.