Is it just み?

Tag: 7z

Komprimierung mit 7z

by on Nov.09, 2009, under Computer, Linux

Dies ist einer der Einträge in meinem Blog, der wohl hauptsächlich deshalb da ist, weil ich es wohl selbst wieder vergessen und daher nachschlagen müssen werde.

Ich komprimiere meine Dateien fast immer mit 7z, nur wenn ich Quellcode weitergebe nutze ich das traditionelle tar.bz2. Vor allem habe ich mir angewöhnt alles was ich an CD und DVD Images besitze vor dem verschieben auf die Backupplatte noch einmal zu komprimieren – der Zugriff muss ja nicht schnell gehen, sondern im Optimalfall nicht einmal nötig sein.

Da ich in diesem Fall keine Rücksicht auf irgend wen nehmen muss, kann ich die Parameter so wählen, dass ein für meinen Rechner optimale Komprimierung herauskommt – auch wenn es sich deshalb auf Rechnern mit wenig Arbeitsspeicher nicht mehr entpacken lassen würde.

Mein Kommando zur Komprimierung lautet (Achtung, nicht auf Systemen nutzen die weniger als 4GB Hauptspeicher haben):
nice -n 10 7z a -mx=9 -mmt=16 -t7z -mfb=258 -md=384m -ms=8g "[ZIEL].7z" "[DATEN]"

Kurze Erklärung:

Kommandoteil Bedeutung
nice -n 10 Starte das folgende Kommando mit geringer Priorität. Das bedeutet, dass man nebenher noch relativ gut arbeiten kann, bzw. andere Prozesse weniger ausgebremst werden.
7z a Füge Daten zu einem Archiv hinzu (a steht für “add”).
-mx=9 Benutze die maximale Kompressionsstufe.
-mmt=16 Bestimmt die Anzahl der benutzten Threads. Alternativ kann man auch -mmt=on angeben, dann bestimmt 7z selbst die Anzahl der Threads. Bei meinen Tests war jedoch die Anzahl 16 (ich habe einen Dualcore Prozessor) seltsamerweise fast 10% schneller als die Angabe on.
-t7z Sagt 7z, dass es das 7z-Format benutzen soll. Eigentlich überflüssig wenn wir den Archivnamen auf .7z enden lassen. Da 7z aber auch so ziemlich alle anderen halbwegs frei verfügbaren Komprimierungsverfahren unterstützt, gehe ich hier noch einmal sicher, dass auch wirklich das effiziente 7z benutzt wird.
-mfb=258 Die Wortgröße wird hier festgelegt. Faustregel: Je höher die Wortgröße, desto besser die Kompression. Dies ist, soweit ich weiß, der derzeitig maximal zulässige Wert.
-md=384m Die Wörterbuchgröße. Auch heir gilt die gleiche Faustregel wie bei der Wortgröße, allerdings kann man hier noch deutlich größer werden. In diesem Fall ist die Wörterbuchgröße 384 MB – das bedeutet, dass man beim Entpacken schon mindestens 512 MB RAM haben muss und beim Komprimieren ungefähr das Zehnfache der Wörterbuchgröße. Ich habe 6 GB RAM und benutze daher diese Einstellung wenn ich über Nacht die Backups komprimiere. Sobald ich parallel noch Firefox, Thunderbird und Eclipse (um mal Speicherfresser zu nennen) benutzen will, setze ich den Wert auf unter 300m.
-ms=8g Die maximale Größe der soliden Blöcke – auch hier gilt die gleiche Faustregel, auch wenn der Einfluss mit steigender Größe immer geringer wird. Alternativ sollte ein -ms=on auch dafür Sorgen, dass ein ganzes DVD-Image als ein großer Block (“solid”) komprimiert wird.
“[ZIEL].7z” Das Zielarchiv. Es muss nicht auf .7z enden, aber das hat sich aus praktischen Gründen eingebürgert. Unter Windows sollte es natürlich auf jeden Fall so heißen, da Windows das Archiv nicht automatisch als solches erkennen kann.
“[DATEN]” Das ist dann die Datei, die Dateien oder das Verzeichnis das komprimiert werden soll. Die Anführungsstriche kommen allerdings nicht um mehrere Dateien oder Verzeichnisse, sondern jeweils um eins (damit es keine Probleme mit Leerzeichen gibt).

Um dann viele Images über Nacht zu komprimieren benutze ich folgendes Mini-Script:

#!/bin/bash
for i in *.iso; do
nice -n 10 7z a -mx=9 -mmt=16 -t7z -mfb=258 -md=384m -ms=8g "$i.7z" "$i"
if [[ $? -eq 0 && -f "$i.7z" ]]; then
rm "$i"
fi
done

Comments Off on Komprimierung mit 7z :, , , , , more...