Ottimizzazione dei file compressi con gzip per la deduplicazione a livello di blocco


2

Ho circa 100 TiB di dati compressi gzip su volumi cloud. Sul mio modo di eseguire un dedup a livello di blocco (duperemove per btrfs) trovo che sia stato compresso senza -n, il che causa la differenza a livello di blocco dell'output compresso per file altrimenti identici.

Oltre a ricomprimerlo gzip -n, c'è qualche altra scorciatoia per ottenere centinaia di milioni di file gziped per "perdere" quell'intestazione? e se devo già ricomprimerli tutti, dovrei esaminare anche altre ottimizzazioni, come --rsyncablemassimizzare le possibilità di deduplicazione?

(I dati hanno probabilità molto alte di contenere molti duplicati, stiamo parlando di dump completi giornalieri di grandi tabelle di database)


In altre parole, è possibile fare in modo che "dedup" ignori l'intestazione gzip? cioè, non è necessario riscrivere i file, basta ignorare le intestazioni nell'applicazione.
Glenn Randers-Pehrson,

dato che sto parlando di un dedup a livello di blocco (lo stesso se fosse comunque a livello di file), non vedo come posso farlo ignorare l'intestazione. è all'inizio del flusso (per quanto ne so) e non alla fine, quindi tutti i dati compressi potrebbero apparire diversi, per non parlare di un offset, che romperà sicuramente i confini del blocco, anche se dopo un blocco o due il flusso sembra lo stesso.
Ira,

Risposte:


0

È possibile utilizzare zcat per estrarre i file, quindi calcolare un checksum per ogni file:

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

quindi controlla quei file * .gz.sum per i duplicati. Ogni volta che rimuovi un duplicato chiamato "qualcosa.gz.sum", rimuovi anche il corrispondente "qualcosa.gz"


Se avessi intenzione di fare un semplice hardlink di interi file, questa sarebbe probabilmente una buona soluzione, ma come ho detto nel post originale, sto cercando di fare un dedup a livello di blocco, poiché ho molti backup giornalieri completi del stessi dati e spero di trovare blocchi identici all'interno di file non identici (come un dump di una tabella DB in cui la maggior parte delle modifiche si verificano alla fine del file e raramente nella parte superiore e centrale), quindi questa soluzione è in qualche modo riduttiva ma potrebbe essere un buon punto di partenza.
Ira,

0

Rispondere alla prima metà della mia domanda riguardo a: tagliare la data / il nome di un file gzip. no, non ho ancora trovato un pezzo di codice già pronto, ma ho trovato il tempo per installare vbindiff, uno strumento diff binario visivo, e ho scoperto che l'intestazione non era compressa e quindi il flusso compresso effettivo è identico a gzipe gzip -n, e tutto ciò che rimane per manipolare alcuni byte all'inizio dei file compressi per ottenere la versione unificata. un piccolo programma in C risolverà il mio problema, a meno che qualcuno non conosca un sedbinario :-)

Per quanto riguarda la seconda parte, dovrò solo sperimentare un mucchio di dati. Se avrò dei risultati definiti, li posterò qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.