Erzielen Sie eine bessere Komprimierung für mehrere gezippte Dateien

3

Ich habe mehrere Verzeichnisse mit Tausenden von gzip-Dateien (insgesamt handelt es sich um 1M-Dateien). Einige dieser Dateien sind beschädigt und die meisten sind sehr klein (ein paar KB).

Fast alle von ihnen sind sich inhaltlich sehr ähnlich, daher sollte die Komprimierung aller von ihnen das Kompressionsverhältnis in Bezug auf die aktuelle Situation verbessern.

Da ich diese Verzeichnisse selten durchsuche und sie aus Archivierungsgründen nur haben muss, benötige ich ein hochverfügbares und stark komprimierbares Format und erstelle ein einziges Archiv. Es wäre schön, gelegentlich auf bestimmte Dateien zugreifen zu können, ohne das gesamte Archiv zu dekomprimieren.

Was ist die beste Strategie hier? Ist Teer beständig gegen Korruption? Ich würde etwas vorziehen, das als Einzeiler oder einfaches Bash-Skript implementiert werden kann.

Nein
quelle
1
Hinweis: tarist kein Kompressor.
Kamil Maciorowski
Keine Datei ist "belastbar" vor Beschädigung.
Keltari

Antworten:

3

Nachdem ich das untersucht habe, würde ich das Problem lösen, indem ich alle Dateien dekomprimiere, eine Liste aller sha256-Summen (oder was auch immer Sie bevorzugen) erstelle und dann alle Dateien zusammen in ein einziges Archiv komprimiere. Ich würde gerne eine tar.gz-Datei verwenden, um die Verwendung zu beschleunigen und zu vereinfachen, aber Sie könnten zip, bzip, 7zip, xz oder etwas anderes verwenden, wenn Sie ein kleineres Archiv möchten. Das Komprimieren aller Dateien zu einer einzigen großen Datei spart viel Speicherplatz.

Verwenden Sie in diesem Fall 'par2', um Redundanz und Überprüfung für die komprimierte Datei zu erstellen, und sichern Sie die Datei zusammen mit den .par2-Dateien. (Ich habe nicht viel damit gespielt, aber der Zweck von par2 ist es, ein Archiv zu erstellen, das Redundanz (PARity) erzeugt, um die Integrität der Dateien zu stärken.

Davidgo
quelle
Ich dachte eigentlich mehr oder weniger dasselbe. Das Problem ist, dass ich momentan wahrscheinlich nicht genug Speicherplatz habe, um alle Dateien auf einem beliebigen Datenträger zu dekomprimieren (ich habe vergessen, in der Beschreibung das hinzuzufügen, was meiner Meinung nach mehr als 1 TB ausmacht). Kann tar angewiesen werden, die Dateien während der Erstellung des Archivs zu dekomprimieren? Haben Sie auch Erfahrung mit Archivformaten, mit denen Sie anstelle eines Streamings auf Dateien zugreifen können?
Nein
@nopper sind die Dateien gzipped oder tar.gz - das macht einen Unterschied
Davidgo
Die Dateien werden gzippt. Das Suffix lautet .gz
nopper
2

Leider gibt es keine endgültige Antwort auf eine solche Frage. Unterschiedliche Komprimierungsprogramme und -algorithmen haben unterschiedliche Komprimierungsverhältnisse basierend auf den Daten. Wenn es eine Möglichkeit gäbe zu wissen, wie gut die Komprimierung sein wird. Wenn ja, glauben Sie nicht, dass dies in alle Komprimierungsprogramme integriert sein würde?

Sie sagen, es gibt Tausende von 1-MB-Dateien, was einer Anzahl von Gigabyte entspricht. Nehmen wir an, Sie haben 5000 Dateien, das sind 5 GB Daten. Nehmen wir an, Sie können mit Ultra-Zippen bis zu 2 GB speichern. Wenn Sie ein anderes Programm und einen anderen Algorithmus ausprobieren, ist das 5% besser (ich würde das für eine hohe Schätzung halten), das spart Ihnen nur 100 GB. Nicht viel im großen Schema.

Resilienz gegenüber Korruption gibt es nicht. Es ist möglich, dass ein Komprimierungsprogramm eine Beschädigung wie eine fehlgeschlagene CRC-Prüfung besser verarbeitet als ein anderes. Im besten Fall bedeutet dies, dass nicht alle, sondern nur einige Ihrer Daten verloren gehen. Aber auch hier gibt es wirklich keine Möglichkeit zu wissen. Einfach ausgedrückt gibt es keinen Ersatz für die Sicherung wichtiger Daten.

Keltari
quelle
Ich wollte nicht die beste Komprimierung. Einfach besser als der aktuelle Modulo-Kompressionsalgorithmus. Daher erwarte ich, dass das Anwenden der gleichen gzip-Komprimierung auf eine einzelne TAR-Datei zu einem besseren Komprimierungsverhältnis führen würde, als wenn mehrere Dateien einzeln komprimiert würden. Der zweite Punkt war die Redundanz der Daten. Der Vorschlag von @davidgo sollte den Trick machen (par2). Eine andere Sache, die ich jetzt in Betracht ziehe, ist die Möglichkeit, für das Archivformat Direktzugriff zu haben, um eine bestimmte Datei extrahieren zu können, ohne den gesamten Inhalt des Archivs zu lesen.
Nein