BEZEICHNUNG
bzip2, bunzip2
- ein blocksortierender Dateikompressor, Version 1.0.8
bzcat - Dateien dekomprimieren und in die Standardausgabe
leiten
bzip2recover - Daten aus beschädigten Bzip2-Dateien
wiederherstellen
ÜBERSICHT
bzip2 [
-cdfkqstvzVL123456789 ] [ Dateinamen … ]
bzip2 [ -h|--help ]
bunzip2 [ -fkvsVL ] [ Dateinamen … ]
bunzip2 [ -h|--help ]
bzcat [ -s ] [ Dateinamen … ]
bzcat [ -h|--help ]
bzip2recover Dateiname
BESCHREIBUNG
bzip2 komprimiert Dateien mit dem blocksortierenden Textkompressionsalgorithmus nach Burrows-Wheeler und der Huffman-Kodierung. Die Kompression wird generell als besser angesehen als mit den konventionellen LZ77/LZ78-basierenden Kompressionsalgorithmen und kommt der Performance der PPM-Familie statistischer Kompressoren nahe.
Die Befehlszeilenoptionen sind denen von GNU gzip absichtlich sehr ähnlich, aber nicht völlig identisch.
bzip2 erwartet eine Liste von Dateinamen, die den Befehlszeilenoptionen mitgegeben werden. Jede Datei wird durch deren komprimierte Version mit dem Namen Originalname.bz2 ersetzt. Dabei werden die ursprünglichen Änderungszeitstempel, Zugriffsrechte und, wenn möglich, auch die Eigentumsrechte des zugehörigen Originals übernommen, so dass diese Eigenschaften bei der Dekomprimierung korrekt wiederhergestellt werden können. Auf Dateisystemen, denen diese Möglichkeiten der Erhaltung von originalen Dateinamen, Zugriffsrechten, Eigentumsverhältnissen und Zeitstempeln fehlen oder die Länge von Dateinamen eingeschränkt ist, wie beispielsweise MS-DOS, ist diese Verarbeitung von Dateinamen harmlos.
bzip2 und bunzip2 überschreiben in der Voreinstellung existierende Dateien nicht. Wenn Sie dies ermöglichen wollen, verwenden Sie den Schalter -f.
Werden keine Dateinamen angegeben, dann liest bzip2 aus der Standardeingabe und leitet das Ergebnis der Komprimierung in die Standardausgabe. In diesem Fall verweigert bzip2 die komprimierte Ausgabe in ein Terminal, da die Ausgabe unverständlich und daher sinnlos wäre.
bunzip2 (oder bzip2 -d) dekomprimiert alle angegebenen Dateien. Werden Dateien erkannt, die nicht mit bzip2 komprimiert sind, werden diese ignoriert und eine Warnmeldung ausgegeben. bzip2 versucht die Namen für die dekomprimierten Dateien folgendermaßen abzuleiten:
Dateiname.bz2
wird zu Dateiname
Dateiname.bz wird zu Dateiname
Dateiname.tbz2 wird zu Dateiname.tar
Dateiname.tbz wird zu Dateiname.tar
anderername wird zu anderername.out
Falls die Datei nicht eine der verarbeitbaren Endungen .bz2, .bz, .tbz2 oder .tbz hat, reklamiert bzip2, dass der Name der Originaldatei nicht ermittelt werden kann, und verwendet den Originalnamen mit der Endung .out.
Wie bei der Kompression wird auch bei der Dekompression aus der Standardeingabe gelesen und das Ergebnis in die Standardausgabe geleitet, wenn keine Dateinamen angegeben werden.
bunzip2 dekomprimiert eine Datei korrekt, die aus zwei oder mehr komprimierten Dateien verkettet ist. Das Ergebnis ist eine Verkettung der entsprechenden unkomprimierten Dateien. Die Integritätsprüfung verketteter komprimierter Dateien mit -t wird dabei auch unterstützt.
Sie können Dateien mit dem Schalter -c auch in die Standardausgabe komprimieren oder dekomprimieren. Auf diese Weise können mehrere Dateien verarbeitet werden. Die Ergebnisse werden nacheinander in die Standardausgabe geleitet. Die Kompression mehrerer Dateien auf diese Weise erzeugt einen Datenstrom, der mehrere komprimierte Dateien enthält. Ein solcher Datenstrom kann nur mit bzip2 in Version 0.9.0 oder neuer korrekt dekomprimiert werden. Ältere Versionen von bzip2 brechen den Vorgang nach der Dekomprimierung der ersten Datei des Datenstroms ab.
bzcat (oder bzip2 -dc) dekomprimieren alle angegebenen Dateien in die Standardausgabe.
bzip2 liest die Argumente nacheinander aus den Umgebungsvariablen BZIP2 und BZIP. Diese werden stets vor der Verarbeitung von Befehlszeilenargumenten ausgewertet. Dadurch erhalten Sie eine bequeme Möglichkeit, Standardargumente zu übergeben.
Die Kompression wird immer ausgeführt, selbst wenn die komprimierte Datei etwas größer als das Original ist. Dateien, die kleiner als 100 Bytes sind, tendieren dazu, durch die Kompression größer zu werden, da der Kompressionsalgorithmus eine konstante Datenmenge von etwa 50 Bytes selbst benötigt. Zufallsdaten (die in der Ausgabe der meisten Dateikompressoren enthalten sind) werden mit 8,05 Bit pro Byte kodiert, was einem Zuwachs von 0,5% entspricht.
Als Selbsttest zu Ihrem Schutz verwendet bzip2 32-Bit-CRC-Prüfungen, um sicherzustellen, dass die Originaldatei und deren dekomprimierte Version identisch sind. Dies schützt vor Beschädigung der komprimierten Daten und auch gegen noch nicht entdeckte Fehler in bzip2 (was hoffentlich unwahrscheinlich ist). Die Möglichkeit, dass die Beschädigung der Daten unentdeckt bleibt, ist sehr gering, etwa einmal in vier Milliarden verarbeiteten Dateien. Zu bedenken ist, dass die Prüfung bei der Dekompression ausgeführt wird und daher nur festgestellt wird, dass ein Problem besteht. Bei der Wiederherstellung der originalen unkomprimierten Daten hilft dies nicht. Sie können mit bzip2recover versuchen, die Daten aus den beschädigten Dateien wiederherzustellen.
Rückgabewerte sind: 0 für ein normales Beenden, 1 für umgebungsbedingte Probleme (Datei nicht gefunden, ungültige Argumente, Ein-/Ausgabefehler usw.), 2 verweist auf eine beschädigte komprimierte Datei, 3 auf einen internen Konsistenzfehler (beispielsweise ein Bug), der bzip2 zum Absturz bringt.
OPTIONEN
-c --stdout
komprimiert oder dekomprimiert in die Standardausgabe.
-d --decompress
erzwingt die Dekompression. Bei bzip2, bunzip2 und bzcat handelt es sich tatsächlich um dasselbe Programm. Die Entscheidung über die vorzunehmenden Aktionen geschieht auf der Basis des verwendeten Namens. Dieser Schalter setzt diesen Mechanismus außer Kraft und erzwingt die Dekompression mit bzip2.
-z --compress
erzwingt die Kompression unabhängig vom aufgerufenen Befehlsnamen (als Ergänzung zu -d).
-t --test
überprüft die Integrität der angegebenen Datei(en), aber dekomprimiert sie nicht. Es wird lediglich ein Kompressionsversuch ausgeführt und das Ergebnis ausgegeben.
-f --force
erzwingt das Überschreiben der Ausgabedateien. Normalerweise überschreibt bzip2 vorhandene Ausgabedateien nicht. Außerdem überschreibt bzip2 mit dieser Option harte Verknüpfungen zu Dateien, was normalerweise nicht geschehen würde.
bzip2 verweigert normalerweise die Dekomprimierung von Dateien, denen die korrekten »magischen« Dateikopf-Bytes fehlen. Falls die Dekomprimierung mit -f erzwungen wird, werden solche Dateien unverändert übergangen. Dies entspricht dem Verhalten von GNU gzip.
-k --keep
behält (löscht keine) Eingabedateien während der Komprimierung oder Dekomprimierung.
-s --small
verringert den Speicherbedarf für Kompression, Dekompression und Tests. Dateien werden mit einem modifizierten Algorithmus dekomprimiert und getestet, der lediglich 2,5 Bytes pro Block-Byte erfordert. Das bedeutet, dass für die Dekomprimierung einer Datei nie mehr als 2300 kB Speicher erforderlich sind, wenngleich dies dann nur mit der Hälfte der normalen Geschwindigkeit geschieht.
Während der Komprimierung wählt die Option -s eine Blockgröße von 200 kB, was den Speicherverbrauch auf etwa diese Größe begrenzt. Das geht allerdings zu Lasten des Kompressionsverhältnisses. Kurz gesagt, wenn Ihr Rechner über wenig Speicher verfügt (8 Megabyte oder weniger), sollten Sie stets die Option -s verwenden. Siehe SPEICHERVERWALTUNG unten.
-q --quiet
unterdrückt Warnmeldungen, sofern diese nicht von grundlegender Bedeutung sind. Meldungen zu Ein-/Ausgabefehlern sowie weiteren kritischen Ereignissen werden weiterhin angezeigt.
-v --verbose
aktiviert den ausführlichen Modus. Dabei werden die Kompressionsraten für jede verarbeitete Datei angezeigt. Wird diese Option mehrmals angegeben, erhöht sich damit die Menge der ausgegebenen Informationen. Dies ist primär für Diagnosezwecke gedacht.
-h --help
Hilfe ausgeben und beenden.
-L --license -V --version
zeigt die Softwareversion und die Lizenzbedingungen an.
-1 (oder --fast) bis -9 (oder --best)
setzt bei der Komprimierung die Blockgröße auf 100 kB, 200 kB … 900 kB. Dies ist bei der Dekomprimierung wirkungslos. Siehe SPEICHERVERWALTUNG unten. Die Aliase --fast und --best dienen nur der Kompatibilität zu GNU gzip. Insbesondere --fast sorgt nicht wirklich für einen Geschwindigkeitszuwachs, und --best wählt lediglich das Standardverhalten.
-- |
fasst alle nachfolgenden Argumente als Dateinamen auf, selbst dann, wenn sie mit einem Minuszeichen beginnen. Dadurch können Sie beispielsweise »bzip2 -- -meinedatei« verarbeiten lassen. |
--repetitive-fast --repetitive-best
Diese Schalter sind in den Versionen ab 0.9.5 überflüssig. Sie ermöglichten in früheren Versionen eine grobe Beeinflussung des Verhaltens des Sortieralgorithmus, was gelegentlich durchaus sinnvoll war. Für den verbesserten Algorithmus in den Versionen nach 0.9.5 sind diese Schalter irrelevant.
SPEICHERVERWALTUNG
bzip2 komprimiert große Dateien blockweise. Die Größe der Blöcke beeinflusst sowohl das erreichte Kompressionsverhältnis als auch den Speicherbedarf für Kompression und Dekompression. Die Schalter -1 bis -9 geben die Blockgröße von 100000 bis 900000 Bytes an (Letzteres ist die Voreinstellung). Bei der Dekompression wird die für die Kompression verwendete Blockgröße aus dem Dateikopf der komprimierten Datei ermittelt. Aus diesem Wert leitet bunzip2 selbst den für die Dekompression erforderlichen Speicherbedarf ab. Da die Blockgrößen in den komprimierten Dateien selbst gespeichert werden, sind die Schalter -1 bis -9 bei der Dekompression nicht von Bedeutung und werden daher ignoriert.
Die Erfordernisse zur Kompression und Dekompression können folgendermaßen abgeschätzt werden (in Bytes):
Kompression: 400 k + ( 8 x Blockgröße )
Dekompression:
100 k + ( 4 x Blockgröße ) oder
100 k + ( 2.5 x Blockgröße )
Größere Blöcke bringen nur geringfügig bessere Ergebnisse. Die effektivste Kompression ergibt sich aus den ersten 200 bis 300 kB der Blockgröße, dies sollte beachtet werden, wenn bzip2 auf weniger leistungsfähigen Rechnern verwendet wird. Ebenfalls beachtet werden sollte, dass der Speicherbedarf für die Dekompression schon durch die bei der Kompression gewählte Blockgröße bestimmt wird.
Bei Dateien, die mit den voreingestellten 900 kB großen Blöcken komprimiert sind, benötigt bunzip2 etwa 3700 kB für die Dekompression. Um die Dekompression auch auf Rechnern mit 4 MB Speicher zu ermöglichen, steht eine Option für bunzip2 zur Verfügung, die den Speicherbedarf auf 2300 kB nahezu halbiert, was allerdings auch eine Halbierung der Dekompressionsgeschwindigkeit nach sich zieht. Sie sollten den dafür zuständigen Schalter -s daher nur verwenden, wenn dies wirklich nötig ist.
Generell sollten Sie stets versuchen, die größtmöglichen Blöcke zu verwenden, die der zur Verfügung stehende Speicher zulässt. Dadurch wird das maximale Kompressionsverhältnis erreicht. Die Kompressions- und Dekompressionsgeschwindigkeiten werden durch die Blockgröße praktisch nicht beeinflusst.
Ein weiterer wichtiger Punkt betrifft Dateien, die in einen einzigen Block passen – also wohl die meisten Dateien, wenn Sie eine große Blockgröße wählen. Die Größe des tatsächlichen Speichers ist proportional zur Dateigröße, da die Datei kleiner als ein Block ist. Beispielsweise werden durch die Kompression einer 20000 Byte großen Datei mit dem Schalter -9 rund 7600 kB Speicher belegt, aber tatsächlich nur 400 k + 20000 * 8 = 560 kB davon genutzt. Auf ähnliche Weise belegt die Dekomprimierung 3700 kB, nutzt aber nur 100 k + 20000 * 4 = 180 kB.
Die folgende Tabelle fasst den maximalen Speicherbedarf für die jeweilige Blockgröße zusammen. Außerdem wird die komprimierte Gesamtgröße der 14 Dateien des »Calgary Text Compression Corpus« angezeigt, die sich auf 3141622 Bytes beläuft. Diese Spalte vermittelt einen Eindruck, wie die Kompression mit der Blockgröße variiert. Diese Zahlen verleiten allerdings dazu, den Vorteil größerer Blöcke für größere Dateien zu unterschätzen, da der Corpus durch kleinere Dateien dominiert wird.
Kompres-
Dekompres- Decompres- Corpus-
Schalter sion sion sion mit -s Größe
-1 1200k 500k
350k 914704
-2 2000k 900k 600k 877703
-3 2800k 1300k 850k 860338
-4 3600k 1700k 1100k 846899
-5 4400k 2100k 1350k 845160
-6 5200k 2500k 1600k 838626
-7 6100k 2900k 1850k 834096
-8 6800k 3300k 2100k 828642
-9 7600k 3700k 2350k 828642
DATEN AUS BESCHÄDIGTEN DATEIEN WIEDERHERSTELLEN
bzip2 komprimiert Dateien in Blöcken, wobei jeder Block üblicherweise 900 kB groß ist. Die Blöcke werden unabhängig voneinander verarbeitet. Falls ein Medien- oder Übertragungsfehler dazu führt, dass eine aus mehreren Blöcken bestehende .bz2-Datei beschädigt wird, kann es dennoch gelingen, die Daten der unbeschädigten Blöcke wiederherzustellen.
Der komprimierten Darstellung jedes Blocks ist ein 48-Bit-Muster überlagert, was die Erkennung der Blockgrenzen mit hinreichender Sicherheit ermöglicht. Jeder Block enthält außerdem seine eigene 32-Bit-CRC-Prüfsumme, so dass beschädigte Blöcke von unbeschädigten Blöcken unterschieden werden können.
Mit bzip2recover können Sie nach Blöcken in .bz2-Dateien suchen und jeden Block in einer eigenen .bz2-Datei speichern. Dann können Sie mit bzip2 die Integrität dieser Dateien prüfen und sie dekomprimieren, sofern sie unbeschädigt sind.
bzip2recover akzeptiert ein einzelnes Argument, den Namen der beschädigten Datei, und schreibt eine Reihe von Dateien nach dem Namensschema rec00001file.bz2, rec00002file.bz2 usw., welche die dekomprimierten Blöcke enthalten. Die Namen der Ausgabedateien sind so gestaltet, dass durch Verwendung von Platzhaltern bei der Weiterverarbeitung – zum Beispiel »bzip2 -dc rec*file.bz2 > reparierte_Daten« – die Dateien in der richtigen Reihenfolge bearbeitet werden.
bzip2recover wird am häufigsten bei großen .bz2-Dateien eingesetzt werden, da diese viele Blöcke enthalten. Es ist sinnlos, es bei beschädigten Ein-Block-Dateien einzusetzen, da ein einzelner beschädigter Block nicht wiederhergestellt werden kann. Wenn Sie den potenziellen Datenverlust durch Medien- oder Übertragungsfehler minimieren wollen, sollten Sie eine Verringerung der Blockgröße in Erwägung ziehen.
HIWEISE ZUR PERFORMANCE
In der Sortierphase der Kompression werden ähnliche Zeichenketten in der Datei zusammengeführt. Aus diesem Grund werden Dateien, die sehr lange Reihen sich mehrere Hundert Male wiederholender Symbole enthalten, wie »aabaabaabaab …«, möglicherweise langsamer komprimiert als normal. Die Versionen 0.9.5 und neuer arbeiten in dieser Beziehung weitaus besser. Das Verhältnis zwischen der Kompressionsdauer im ungünstigsten Fall und dem Durchschnitt bewegt sich im Bereich von 10:1. In früheren Versionen konnte das Verhältnis durchaus 100:1 betragen. Wenn gewünscht, können Sie mit der Option -vvvv den Fortschritt sehr detailreich anzeigen lassen.
Die Geschwindigkeit der Dekomprimierung wird durch dieses Phänomen nicht beeinträchtigt.
bzip2 belegt üblicherweise einige Megabyte Speicher, in denen es arbeitet, und lädt dann alles nach Bedarf nach dem Zufallsprinzip. Das heißt, dass sowohl für die Komprimierung als auch die Dekomprimierung von entscheidender Bedeutung ist, wie schnell Ihr Rechner den Inhalt des Zwischenspeichers verwirft. Daher können kleine Änderungen am Code zur Reduzierung der Verwerfungsrate unverhältnismäßig große Verbesserungen der Performance bewirken. Es ist vorstellbar, dass die Performance von bzip2 auf Rechnern mit sehr großen Zwischenspeichern am besten ist.
EINSCHRÄNKUNGEN
Die Meldungen zu Ein-/Ausgabe-Fehlern sind nicht so hilfreich, wie sie idealerweise sein sollten. bzip2 versucht, Ein-/Ausgabe-Fehler zu erkennen und sauber zu beenden, aber die Details des Problems sind manchmal eher irreführend.
Diese Handbuchseite bezieht sich auf die Version 1.0.8 von bzip2. Die von dieser Version erzeugten komprimierten Daten sind vollständig abwärts- und aufwärtskompatibel zu den früher veröffentlichten Versionen 0.1pl2, 0.9.0, 0.9.5, 1.0.0, 1.0.1, 1.0.2 und neuer, allerdings mit der folgenden Ausnahme: Die Versionen 0.9.0 und neuer können mehrere verkettete komprimierte Dateien korrekt dekomprimieren. In der Version 0.1pl2 ist dies nicht möglich, das Programm bricht nach der Dekomprimierung der ersten Datei das Datenstroms ab.
Die Versionen von bzip2recover vor 1.0.2 verwendeten 32-Bit-Ganzzahlen zum Darstellen der Bit-Positionen in komprimierten Dateien, daher konnte es nicht mit Dateien umgehen, die größer ale 512 Megabytes sind. Die Versionen 1.0.2 und neuer verwenden 64-Bit-Ganzzahlen auf jenen Plattformen, die diese unterstützen (entsprechende GNU-Versionen und Windows). Wenn Sie bzip2recover ohne Argumente aufrufen, wird angezeigt, ob Ihre Version mit einer solchen Einschränkung erstellt wurde. In jedem Fall können Sie sich selbst eine uneingeschränkte Version erstellen, wenn Sie das Programm neu kompilieren und »MaybeUInt64« dabei auf eine vorzeichenlose 64-Bit-Ganzzahl setzen.
AUTOR
Julian Seward, jseward [AT] acm.org.
Die in bzip2 umgesetzten Ideen gehen (mindestens) auf folgende Mitwirkende zurück: Michael Burrows und David Wheeler (die blocksortierende Umwandlung), David Wheeler (der Huffman-Encoder), Peter Fenwick (das strukturierte Benennungsschema im ursprünglichen bzip sowie zahlreiche Verbesserungen) sowie Alistair Moffat, Radford Neal und Ian Witten (der arithmetische Encoder im ursprünglichen bzip). Ich bin ihnen für ihre Hilfe, Unterstützung und Beratung sehr zu Dank verpflichtet. Im Handbuch der Quelldistribution finden Sie Hinweise zur Herkunft der Dokumentation. Christian von Roques regte mich an, nach schnelleren Sortieralgorithmen zu suchen, die die Kompression beschleunigen. Bela Lubkin ermunterte mich, die im ungünstigsten Fall erreichbare Performance der Kompression zu verbessern. Donna Robinson hat die Dokumentation auf das XML-Format migriert. Die bz*-Skripte wurden aus jenen von GNU gzip abgeleitet. Viele Leute schickten Patches, halfen bei Problemen mit der Portabilität, stellten Hardware leihweise zur Verfügung, standen beratend zur Seite oder waren ganz allgemein hilfreich.
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Mario Blättermann <mario.blaettermann [AT] gmail.com> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german [AT] lists.org>.