Archiwum BZIP2 (.bz2)
Bzip2 StandardowyBzip2 (BZ2) to klasyczne, wolne od patentów uniksowe narzędzie kompresji i format pliku stworzony przez Juliana Sewarda, wykorzystujący transformację Burrowsa-Wheelera do uzyskania znacznie lepszej kompresji niż klasyczny Gzip.
Inspekcja i metadane
Systemy operacyjne i analizatory plików identyfikują pliki BZ2, sprawdzając początkową sekwencję bajtów binarnych:
Podpis nagłówka na poziomie bajtów (Magic Bytes)
Systemy operacyjne i analizatory plików identyfikują pliki BZ2, sprawdzając początkową sekwencję bajtów binarnych:
PODPIS HEX (OFFSET 0):
42 5A 68REPREZENTACJA ASCII: BZh
Normalizacja: Bzip2 Open Source Standard
Specyfikacja techniczna
| Architektura kontenera | Nagłówek strumienia ('BZh' + cyfra rozmiaru bloku 1-9), po którym następuje skompresowany blok danych oraz 32-bitowa suma kontrolna CRC |
| Kompresja | Transformacja Burrowsa-Wheelera (BWT), transformacja Move-to-Front (MTF) oraz kodowanie Huffmana |
| Kolejność bajtów (Endianness) | Ramka strumienia bitów w formacie Big-Endian |
| Przestrzenie kolorów | Nie dotyczy (Strumień kompresji bajtowej) |
| Kanały i struktura | Strumień bajtów skompresowanych dla pojedynczego pliku |
| Maks. wymiary | Nieograniczona długość strumienia (obsługuje dowolne rozmiary plików) |
| Przezroczystość | 100% dokładna bitowo bezstratna zachowanie danych |
| Streaming i progresywne ładowanie | Sekwencyjne przesyłanie strumieniowe blok po bloku z niezależnymi sumami kontrolnymi CRC dla każdego bloku |
Techniczna macierz porównawcza: BZ2 a konkurencja
| Atrybut techniczny | BZ2 (Bieżący) | GZ | XZ | ZSTD |
|---|---|---|---|---|
| Główny algorytm | Transformacja Burrowsa-Wheelera (BWT) | Wypompowanie (LZ77 + Huffman) | LZMA / LZMA2 | Entropia Stanów Skończonych + LZ77 |
| Kompresja w porównaniu do Gzip | O 10% - 20% mniejszy niż Gzip | Standard bazowy | O 20% - 30% mniejszy niż Gzip | O 10% - 20% mniejszy niż Gzip |
| Prędkość dekompresji | Wolna (~30-50 MB/s) | Szybka (~300 MB/s) | Umiarkowana (~100 MB/s) | Błyskawiczna (>1,5 GB/s) |
| Sumy kontrolne bloków | 32-bitowe CRC dla każdego bloku | Pojedynczy strumień CRC32 | Strumień CRC64 | Strumień xxHash64 |
Typowe tryby uszkodzeń i przewodnik odzyskiwania szesnastkowego
Wyodrębnianie przerywa się z komunikatem „bzip2: Data integrity error when decompressing".
Główna przyczyna: Odwrócony bit w skompresowanym bloku powodujący niepowodzenie walidacji CRC32 odwrotnej macierzy permutacji BWT.
Odzyskiwanie: Użyj narzędzia „bzip2recover", aby odzyskać nieuszkodzone bloki otaczające uszkodzony sektor.
Analiza bezpieczeństwa i wektory ataku na parser
Implementacje Bzip2 obejmują złożone sortowanie strumienia bitów i analizowanie tablic Huffmana, w których w przeszłości występowały błędy przepełnienia liczby całkowitej.
Znane wektory ataku
- Przepełnienie liczby całkowitej w alokacji tablicy sortowania BWT (np. CVE-2016-3189).
- Zapis spoza zakresu pamięci podczas składania tablicy dekodowania Huffmana.
- Atak typu odmowa usługi (DoS) poprzez patologiczne wzorce wejściowe powodujące najgorsze, kwadratowe czasy sortowania BWT.
Najlepsze praktyki obronne: Dekoduj pliki BZ2 za pomocą bezpiecznych pod względem pamięci dekoderów WASM z wymuszonymi granicami pamięci.
Pochodzenie historyczne i kamienie milowe
Główne zalety
- Stale przewyższa klasyczny Gzip o 10% do 20% w przypadku archiwów kodu źródłowego, logów systemowych i baz danych tekstowych.
- Niezależna architektura blokowa (od 100k do 900k) zawiera 32-bitowe sumy kontrolne CRC dla każdego bloku w celu solidnego sprawdzania integralności.
- Uniwersalna, natywna dostępność we wszystkich dystrybucjach wiersza poleceń systemów Linux, BSD i macOS.
Ograniczenia techniczne i wady
- Znacznie wolniejsza prędkość kompresji i dekompresji w porównaniu do nowoczesnych algorytmów, takich jak Zstandard.
- Kompresja tylko dla pojedynczych plików: wymaga połączenia z TAR (.tar.bz2) w celu spakowania wielu plików lub katalogów.
- Wyższe zużycie procesora podczas dekompresji niż w przypadku Gzip lub Zstd.
Ciekawe informacje techniczne
- Magiczne bajty „BZh" oznaczają „Burrows-Wheeler Zip Huffman", po których następuje cyfra (od „1" do „9") określająca rozmiar bloku w setkach kilobajtów (np. „BZh9" = 900 KB).
- Kod źródłowy jądra systemu Linux był dystrybuowany wyłącznie w formacie .tar.bz2 przez ponad dekadę przed migracją do .xz.
- Transformacja Burrowsa-Wheelera nie kompresuje danych bezpośrednio; permutuje ona kolejność znaków, tak aby identyczne litery skupiały się razem, co ułatwia ich kompresję za pomocą kodowania Huffmana.
Często zadawane pytania techniczne
Jaka jest różnica między .gz a .bz2?
.bz2 używa transformacji Burrowsa-Wheelera, aby uzyskać mniejsze rozmiary plików niż .gz, ale kompresja i dekompresja trwają dłużej.
Dlaczego bzip2 posiada polecenie „bzip2recover"?
Ponieważ bzip2 kompresuje dane w niezależnych blokach o rozmiarze 900 KB, z których każdy ma własne CRC, narzędzie bzip2recover może wyodrębnić nieuszkodzone bloki, nawet jeśli część pliku jest uszkodzona.
Jak mogę wypakować plik .tar.bz2?
Możesz rozpakować pliki .tar.bz2 bezpośrednio w przeglądarce internetowej za pomocą File2File.app bez używania narzędzi wiersza poleceń.