Come deduplicare 40 TB di dati?


17

Ho ereditato un cluster di ricerca con ~ 40 TB di dati su tre filesystem. I dati risalgono a circa 15 anni fa e molto probabilmente ci sono molti duplicati poiché i ricercatori copiano i dati degli altri per motivi diversi e poi si limitano a conservare le copie.

Conosco strumenti di de-duping come fdupes e rmlint. Sto cercando di trovarne uno che funzioni su un set di dati così ampio. Non mi interessa se ci vogliono settimane (o forse anche mesi) per eseguire la scansione di tutti i dati - probabilmente lo limiterò comunque per andare piano con i filesystem. Ma devo trovare uno strumento che sia in qualche modo super efficiente con la RAM, o che possa archiviare tutti i dati intermedi di cui ha bisogno nei file piuttosto che nella RAM. Suppongo che la mia RAM (64 GB) si esaurirà se eseguo la scansione di tutti questi dati come un unico set.

Sto sperimentando fdupes ora su un albero da 900 GB. È lungo il 25% e l'utilizzo della RAM è andato lentamente aumentando continuamente, ora a 700 MB.

Oppure, c'è un modo per indirizzare un processo per utilizzare la RAM mappata sul disco, quindi c'è molto più disponibile e non utilizza la RAM di sistema?

Sto usando CentOS 6.


I filesystem sono XFS, nel caso sia rilevante. Cioè, so che non è un fs con funzionalità di de-duping come XFS.
Michael Stauffer,

perché in primo luogo sei preoccupato per la RAM? Il sistema operativo ha i suoi algoritmi di gestione della memoria e il fatto che l'utilizzo della RAM sia "strisciante" non significa che alla fine consumerà tutta la RAM. Sono abbastanza sicuro che non accadrà.
Art Gertner,

1
Non so come funzionano gli strumenti dedicati, ma puoi calcolare l'hash per ogni file e registrarlo insieme al percorso del file, quindi ordinare per hash e deduplicare. Dovrebbe essere fattibile con un semplice script Python o forse anche in Bash. L'uso della RAM dovrebbe essere minimo tranne per la fase di ordinamento, ma suppongo che potresti usare un tipo di mergesort modificato per mantenerlo ragionevolmente basso.
gronostaj,

1
Sì, lo strumento dedicato calcola l'hash, ma prima fai cose come guardare le dimensioni del file e hash solo l'inizio dei file per limitare la quantità di hash completi che devono essere calcolati.
Michael Stauffer,

Per quanto riguarda la RAM, ero preoccupato di rallentare il file server - vedi il mio commento sotto alla risposta.
Michael Stauffer,

Risposte:


4

Oppure, c'è un modo per indirizzare un processo per utilizzare la RAM mappata sul disco, quindi c'è molto più disponibile e non utilizza la RAM di sistema?

Sì, si chiama unità di scambio. Probabilmente ne hai già uno. Se sei preoccupato di rimanere senza RAM, aumentare questo è un buon punto di partenza. Funziona automaticamente, quindi non è necessario fare nulla di speciale.

Non mi preoccuperei per Fdupes. Provalo, dovrebbe funzionare senza problemi.


Pensavo che fare affidamento su swap avrebbe rallentato l'intero sistema - è un file server occupato. Ma forse non basta preoccuparsi? Potrei usare ulimit per impedire al processo di usare più di RAM di sistema in ogni caso, suppongo, come un fail-safe. Ma sembra che Krowe e SMC non pensino che fdupes userebbe comunque quella ram, quindi dovrei solo provarlo.
Michael Stauffer,

1

trovare duplicati basati su hashkey funziona bene ed è molto veloce.

find -not -empty -type f -printf "%s\n" | sort -rn | uniq -d | xargs -I{} -n1 find -type f -size {}c -print0 | xargs -0 md5sum | sort | uniq -w32 --all-repeated=separate

0

Scrivi un'app rapida per percorrere gli alberi, spingendo (hash, mtime) => percorso del file in un dizionario o contrassegnando il file per l'eliminazione se la voce esiste già. L'hash sarà solo un MD5 calcolato sui primi N byte. Potresti fare un paio di passaggi diversi, con un hash su una piccola N e poi un altro con un hash su una grande N.

Probabilmente potresti farlo in meno di venti o trenta righe di Python (usando os.walk ()).

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.