Optimieren von gzippten Dateien für die Deduplizierung auf Blockebene

496
Ira

Ich habe ungefähr 100 TiB komprimierte GZIP-Daten auf Cloud-Volumes. Auf meinem Weg zum Ausführen eines Blockup-Dedup (duperemove für btrfs) stelle ich fest, dass er ohne komprimiert wurde -n, was zu Block-Level-Unterschieden der komprimierten Ausgabe für ansonsten identische Dateien führt.

Anders als das alles mit recompressing gzip -n, gibt es eine andere Abkürzung Hunderte von Millionen von gziped Dateien zu erhalten, um diesen Header „verlieren“? und wenn ich sie bereits alle neu komprimieren muss, sollte ich mir auch andere Optimierungen ansehen, --rsyncableum die Chancen der Deduplizierung zu maximieren?

(Die Daten haben sehr große Chancen, viele Dupes zu enthalten, es handelt sich um tägliche vollständige Speicherabzüge großer Datenbanktabellen.)

2
Ist es also möglich, den gzip-Header durch "dedup" zu ignorieren? Das heißt, Sie müssen die Dateien nicht erneut schreiben, sondern ignorieren Sie einfach die Kopfzeilen in Ihrer Anwendung. Glenn Randers-Pehrson vor 8 Jahren 0
Da ich hier von einem Block-Level-Dedup spreche (auch wenn es sowieso ein File-Level war), sehe ich nicht, wie ich den Header ignorieren kann. Es ist am Anfang des Streams (soweit ich weiß) und nicht am Ende, daher können alle komprimierten Daten anders aussehen, ganz zu schweigen von einem Offset, der die Blockgrenzen definitiv durchbricht, auch wenn nach einem Block oder zwei der Strom sieht gleich aus. Ira vor 8 Jahren 0

2 Antworten auf die Frage

0
Glenn Randers-Pehrson

Sie können zcat zum Extrahieren der Dateien verwenden und dann eine Prüfsumme für jede Datei berechnen:

for x in *.gz do zcat $x | sha256sum > $x.sum done 

Überprüfen Sie dann diese * .gz.sum -Dateien auf Dupes. Jedes Mal, wenn Sie ein Dup namens "Etwas.gz.sum" entfernen, entfernen Sie auch das entsprechende "Etwas.gz".

Wenn ich ein einfaches Hardlinking von ganzen Dateien machen würde, wäre dies wahrscheinlich eine gute Lösung, aber wie ich im ursprünglichen Post schon sagte, suche ich einen Block-Level-Dedup, da ich täglich viele vollständige Backups der gleiche Daten, und ich hoffe, identische Blöcke in nicht identischen Dateien zu finden (wie ein Speicherauszug einer DB-Tabelle, bei der die meisten Änderungen am Ende der Datei und selten oben und in der Mitte stattfinden), so ist diese Lösung einigermaßen hilfreich könnte aber ein schöner ausgangspunkt sein. Ira vor 8 Jahren 0
0
Ira

Beantwortung der ersten Hälfte meiner Frage: Hacken des Datums- / Namensstempels einer GZIP-Datei. Nein, ich habe noch kein fertiges Stück Code gefunden, aber ich habe die Zeit gefunden, vbindiff, ein visuelles binäres Diff-Tool, zu installieren. Dabei wurde festgestellt, dass der Header nicht komprimiert wurde. Daher ist der tatsächliche komprimierte Stream identisch mit gzipund gzip -n. und all das bleibt noch übrig, um ein paar Bytes ganz am Anfang der komprimierten Dateien zu manipulieren, um die vereinheitlichte Version zu erhalten. Ein kleines C-Programm löst mein Problem, es sei denn, jemand kennt ein Programm sedfür Binärdateien :-)

Was den zweiten Teil angeht, muss ich nur mit einigen Daten experimentieren. Wenn ich bestimmte Ergebnisse habe, werde ich sie hier posten.