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ň