Erzielen Sie eine bessere Komprimierung für mehrere komprimierte Dateien

346
nopper

Ich habe mehrere Verzeichnisse mit Tausenden von GZIP-Dateien (insgesamt sprechen wir von 1M-Dateien). Einige dieser Dateien sind beschädigt und die meisten von ihnen sind sehr klein (einige KB).

Fast alle von ihnen sind sich inhaltlich sehr ähnlich. Wenn Sie alle zusammen komprimieren, sollte sich das Kompressionsverhältnis entsprechend der aktuellen Situation verbessern.

Da ich diese Verzeichnisse nur selten durchforste und nur aus Archivierungsgründen benötigen muss, benötige ich ein hochverfügbares und hoch komprimierbares Format und erstelle ein einzelnes Archiv. Es wäre schön, über die Möglichkeit des wahlfreien Zugriffs auf bestimmte Dateien zu verfügen, ohne das gesamte Archiv zu dekomprimieren.

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

3
Hinweis: "Teer" ist kein Kompressor. Kamil Maciorowski vor 6 Jahren 1
Keine Datei ist "beständig" vor Korruption. Keltari vor 6 Jahren 0

2 Antworten auf die Frage

3
davidgo

Wenn ich das recherchiert habe, könnte ich das Problem lösen, indem ich alle Dateien dekomprimiere, eine Liste aller sha256-Summen (oder den von Ihnen bevorzugten Hash) erstellt und dann alle Dateien in einem einzigen Archiv zusammenfasst. Ich würde neigen, eine tar.gz-Datei für Geschwindigkeit und Benutzerfreundlichkeit zu verwenden, aber Sie könnten zip, bzip, 7zip, xz oder etwas anderes verwenden, wenn Sie ein kleineres Archiv wünschen. Wenn Sie alle Dateien in eine einzige große komprimieren, sparen Sie viel Platz.

Wenn dies erledigt ist, erstellen Sie mit 'par2' Redundanz und Überprüfung für die gezippte Datei 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) schafft, um die Integrität der Dateien zu verbessern.

Ich dachte eigentlich mehr oder weniger dasselbe. Das Problem dabei ist, dass ich wahrscheinlich nicht genug Speicherplatz habe, um alle Dateien in einem beliebigen Medium tatsächlich zu dekomprimieren (ich habe vergessen, in der Beschreibung, die sie meinen, mehr als 1 TB hinzuzufügen). Ist es möglich, tar anzuweisen, die Dateien während der Erstellung des Archivs im laufenden Betrieb zu dekomprimieren? Haben Sie auch Erfahrung mit Archivformaten, die Ihnen den wahlfreien Zugriff auf Dateien anstelle von Streaming-Verfahren ermöglichen? nopper vor 6 Jahren 0
@nopper sind die Dateien gzipped oder tar.gz - das macht einen Unterschied davidgo vor 6 Jahren 0
Die Dateien werden komprimiert. Suffix ist .gz nopper vor 6 Jahren 0
2
Keltari

Leider gibt es keine definitive Antwort auf eine solche Frage. Verschiedene Komprimierungsprogramme und -algorithmen verfügen je nach Daten über unterschiedliche Komprimierungsraten. Wenn es eine Möglichkeit gibt zu wissen, wie gut die Komprimierung sein wird. Wenn nicht, denken Sie nicht, dass das in alle Kompressionsprogramme integriert wäre?

Sie sagen, es gibt Tausende von 1 MB-Dateien, was einer Anzahl von Gigabytes entspricht. Nehmen wir an, Sie haben 5000 Dateien, das sind 5 GB Daten. Lass uns sagen, dass das Zippen auf ultra dich auf 2 GB reduziert. Wenn Sie ein anderes Programm und einen anderen Algorithmus ausprobieren, der um 5% besser ist (ich denke, das ist eine hohe Schätzung), sparen Sie nur 100 GB. Nicht viel im großen Plan.

Was die Resilienz gegenüber Korruption angeht, gibt es so etwas nicht. Es ist möglich, dass ein Komprimierungsprogramm Korruption, z. B. eine fehlerhafte CRC-Prüfung, besser als ein anderes handhaben kann. Im besten Fall bedeutet dies, dass nur einige Ihrer Daten verloren gehen und nicht alle. Es gibt jedoch auch keine Möglichkeit zu wissen. Einfach gesagt, es gibt keinen Ersatz für die Sicherung wichtiger Daten.

Ich habe nicht gesagt, dass ich die beste Kompression insgesamt will. Einfach besser als der aktuelle Modulo-Kompressionsalgorithmus. Daher erwarte ich, dass die Anwendung der gleichen gzip-Komprimierung auf eine einzige TAR-Datei zu einer besseren Komprimierungsrate führt, als wenn mehrere Dateien einzeln komprimiert werden. Der zweite Punkt war die Redundanz der Daten. Der Vorschlag von @davidgo sollte den Trick tun (Par2). Eine andere Sache, die ich jetzt in Betracht ziehe, ist die Möglichkeit des wahlfreien Zugriffs auf das Archivformat. So können Sie eine bestimmte Datei extrahieren, ohne den gesamten Inhalt des Archivs lesen zu müssen. nopper vor 6 Jahren 0