Co je to bz2?
-=-=-=-=-=-=-=-
Making files is easy under the UNIX operating system. Therefore,
users tend to create numerous files using large amounts of file
space. It has been said that the only standard thing about all UNIX
systems is the message-of-the-day telling users to clean up their
files.
-- System V.2 administrator's guide
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 až -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é na polovinu snižuje
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 gzipem?". Tuto otázku si
pravděpodobně položíte také a proto jsem pro čtenáře Linuxových
noviny 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 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.
+----------+------------+------------+------------+---------------+
| opt |komp. poměr | čas |komp. poměr | čas |
+----------+------------+------------+------------+---------------+
| -1 | 22.29 | 277 | 29.21 | 48 |
| -2 | 21.06 | 283 | 27.90 | 54 |
| -3 | 20.52 | 292 | 26.96 | 60 |
| -4 | 20.11 | 296 | 25.23 | 68 |
| -5 | 19.87 | 301 | 24.28 | 80 |
| -6 | 19.67 | 306 | 23.91 | 98 |
| -7 | 19.46 | 325 | 23.83 | 120 |
| -8 | 19.40 | 320 | 23.75 | 154 |
| -9 | 19.22 | 327 | 23.74 | 198 |
+----------+------------+------------+------------+---------------+
Bližší informace o programu bzip2 naleznete na jeho domovské
stránce (http://www.muraroa.demon.co.uk/).
protože uživatelům z DOSu asi srovnání UNIXOvých archiverů nic
neřekne, připravil jsem malé srovnání z DOSovými archivery. Jako
testovací soubor jsem použil rozbalené články z výhně 8: (při
testech jsem vždy použil maximální kompresi)
+----------------------+--------------+
| Rozbalený soubor | 1075330 |
| Výheň | 467602 |
| arj | 413550 |
| ain | 409128 |
| zip | 408337 |
| gzip | 407195 |
| jar | 401096 |
| uc2 | 399268 |
| rar | 396557 |
| bzip2 | 345900 |
| szip | 330343 |
+----------------------+--------------+
Jak je vidět, výsledky bzipu na textovém souboru jsou dobré.
Překonal ho jedině szip, který funguje stejně jako bzip, ale používá
patentované verze algoritmů a proto je pro free software
nepřijatelný. Ne na všech souborech jsou ale výsledky stejné.
Například při kompresi zvuku rar vede (asi kvůli jeho "multimediální
kompresi"). Ve smíšených testech je ale pořadí podobné jako to v
tabulce.
výheň