- předchozí článek - následující článek - obsah -

Linuxové noviny Leden 1998

Co je to bz2?

Pavel Janík ml., 2. ledna 1998

Možná jste si už všimli, že na serverech zrcadlících zdrojové texty jádra z ftp.kernel.org se objevily nové soubory. Mají záhadnou příponu .bz2 a jsou podstatně kratší než soubory s klasickou příponou .gz. Jsou komprimovány programem bzip2, jehož autorem je Julian Seward (jseward@acm.org).

Program bzip2 používá při komprimaci Burrows-Wheelerův blokově-řadící komprimační algoritmus a Huffmanovo kódování. Komprimace je obvykle kvalitnější než při použití klasických algoritmů Lempel-Ziv (LZ77/LZ78), které používá např. program gzip.

Parametry programu bzip2 jsou velice podobné parametrům programu gzip.

Bzip2 očekává na příkazové řádce seznam jmen souborů doprovázený seznamem parametrů. Každý soubor je stejně jako u programu gzip nahrazen komprimovanou verzí, jejíž jméno obsahuje navíc příponu .bz2. Každý komprimovaný soubor má stejná přístupová práva a čas modifikace jako původní soubor a proto mohou být tyto atributy souboru při dekomprimaci korektně nastaveny. Pokud nejsou specifikovány žádné vstupní soubory, bude komprimován standardní vstup.

Bunzip2 (případně bzip2 -d) dekomprimuje všechny specifikované soubory s příponou .bz2. Soubory bez této přípony jsou ignorovány.

Komprimace je prováděna i tehdy, bude-li komprimovaný soubor větší než originál. Proto soubory, jejichž délka je menší než přibližně 100 bytů, nemá smysl komprimovat (jen tak pro zajímavost: výsledný soubor po komprimaci souboru nulové délky má velikost 14 bytů).

Bzip2 používá 32-bitový CRC pro kontrolu integrity dat. Pokud kontrolní suma není správná, musíte použít místo programu bunzip2 program bzip2recover, který umožňuje obnovu dat z poškozených komprimovaných souborů.

Bzip2 komprimuje velké soubory v blocích. Velikost bloku ovlivňuje jak komprimační faktor, tak i množství potřebné paměti jak pro komprimaci tak pro zpětnou dekomprimaci. Parametry příkazové řádky -1-9 specifikují velikost bloku (od 100000 do implicitních 900000 bajtů). Při dekomprimaci je velikost bloku čtena z hlavičky komprimovaného souboru (nižší čtyři bity čtvrtého bytu souboru). Paměťová náročnost může být přibližně stanovena takto:

  • komprimace - 400k + ( 7 x velikost bloku)
  • dekomprimace - 100k + ( 5 x velikost bloku) nebo 100k + ( 2.5 x velikost bloku)

Pro soubory komprimované se standardní velikostí bloku (900000 bytů) bude bzip2 potřebovat přibližně 4600 kilobytů paměti pro dekomprimaci. Aby bylo možné dekomprimovat soubory i na počítačích se 4MB paměti, byla přidána volba -s, která snižuje na polovinu paměťovou náročnost a zvyšuje čas dekomprimace. Tato volba existuje z důvodů neexistence virtuální paměti na podporovaných operačních systémech (unixové operační systémy, Microsoft Windows 95 a Windows NT, DOS).

Asi nejčastější otázka pokládaná na různých konferencích byla: "Jak je na tom bzip2 v porovnání s gzip?". Tuto otázku si pravděpodobně položíte také a proto jsem pro čtenáře Linuxových novin připravil takový malý test, porovnání obou zmiňovaných programů. Zaměřil jsem se hlavně na dva aspekty - na kvalitu komprimace a na dobu komprimace a zpětné dekomprimace.

Testy probíhaly pouze na jediném souboru - na zdrojových textech jádra 2.1.76 ve formátu tar. Původní velikost tohoto souboru byla 40867840 bytů. V tabulce Porovnání programů bzip2 a gzip jsou znázorněny hodnoty komprimačního poměru v procentech (poměr délka komprimovaného souboru ku délce původního souboru) a čas potřebný k provedení komprimace. Testovacím počítačem mi byla pracovní stanice s procesorem Intel Pentium 133MHz, SCSI, 64MB RAM, Linux 2.0.33 a bzip2-0.1pl2.

kvalita komprimace Bzip2 Gzip
kompr. poměr
%
čas komprimace
s
kompr. poměr
%
čas komprimace
s
-122.2927729.2148
-221.0628327.9054
-320.5229226.9660
-420.1129625.2368
-519.8730124.2880
-619.6730623.9198
-719.4632523.83120
-819.4032023.75154
-919.2232723.74198

Tabulka 1: Porovnání programů bzip2 a gzip

Bližší informace o programu bzip2 naleznete na jeho domovské stránce http://www.muraroa.demon.co.uk/. *


- předchozí článek - následující článek - obsah -