Deduplicazione a livello di partizione


8

Quali sono le soluzioni disponibili per livello di blocco o deduplicazione più dettagliata?

Ci sono quelli basati su file - con l'approccio "Copia su scrittura".

Sto cercando "copy-on-write" a livello di blocco, in modo da poter periodicamente cercare blocchi comuni o - preferibilmente - parti di file, unirli e contrassegnare come utilizzare CoW. C'è qualcosa di simile disponibile o deve ancora essere creato? Non sono sicuro che la deduplicazione di Btrfs sia a livello di blocco / file / sottoparte? C'è LessFS, ma non sono sicuro di quale livello di deduplicazione fornisce? Forse altra soluzione?


Non capisco perché questa domanda sia stata votata per eccesso. Googling per "deduplicazione linux" fa apparire un elenco di filesystem e prodotti che non è necessario duplicare qui.
Kyle Jones,

Tale ricerca su Google restituisce molte soluzioni funzionanti a livello di file. Qual è lo scopo di questa domanda, un consiglio che rientra nel mio scopo - preferibilmente per rendere possibile la duplicazione di due parti di file, non necessario adattato al livello di blocco. Se tale soluzione non è disponibile, allora a livello di blocco. Un'altra cosa è che molte cose fanno impressione sperimentale: conto sull'esperienza di altri utenti per consigliare una soluzione matura.
Grzegorz Wierzowiecki,

1
@GrzegorzWierzowiecki non sono sicuro che si inserisce il disegno di legge, ma guarda che cyphertite, formalmente epitome: peereboom.us/epitome cyphertite.com
Gabe.

Risposte:


3

Mentre la deduplicazione a livello di blocco va, penso che ZFS sia la migliore implementazione non contestata attualmente disponibile. In realtà non è progettato per l'ottimizzazione post-fact, perché la sua deduplicazione (se attivata) è incorporata direttamente nelle funzioni di lettura / scrittura. Per questo motivo, può essere un po 'costoso memoria sotto carico, nel tentativo di mantenere in memoria le parti più rilevanti della tabella di deduplicazione, ma ZFS è bravo a limitarsi a consumare non più del 50% della memoria, che a seconda del la quantità di memoria installata potrebbe sembrare alquanto arbitraria (50% di 2 Gb contro il 50% di 64 Gb, soprattutto se alcune attività utente che richiedono poca memoria).

A seconda di cosa stai cercando di usarlo, hai alcune opzioni:

OpenIndiana sembra avere alcune buone opzioni di desktop e server, basate su Solaris

FreeBSD (dal 9.0) ha una versione piuttosto avanzata di ZFS (che include la deduplicazione) incorporata. Una notevole distribuzione derivata da FreeBSD (allora MonoWall) è NAS4Free , che rende abbastanza semplice la creazione di un NAS.

Linux ha alcune opzioni, alcune con dedup, altre senza. Dato che stai cercando il dedup, il più notevole che abbia mai visto è zfsonlinux . Non sono sicuro di quali siano i loro progressi o quanto sia stabile il loro progetto, ma sembra decisamente promettente.

Per quanto riguarda qualsiasi cosa con la deduplicazione a blocchi parziali, non ho visto NULLA finora che riporta la possibilità di farlo.


0

La tua domanda è un po 'confusa a causa del termine "blocchi", che è una parola molto sovraccarica quando si tratta di dischi e filesystem. (Ma il contesto circostante aiuta a chiarire.) Btrfs non si occupa di "blocchi" di file system di dimensioni fisse, ma di "estensioni" di dimensioni variabili. (Anche se, confusamente, definisce anche zone di blocco di dimensioni variabili.) ZFS si occupa dei "blocchi" del filesystem, in parte o principalmente perché farlo presenta problemi significativamente più facili da risolvere. Sia Btrfs che ZFS sono a conoscenza dei "blocchi" a livello del disco, che sono essi stessi astrazioni. (Quindi abbiamo anche "archiviazione a livello di blocco", che può essere un significato semanticamente diverso.) Potrei avere quelle descrizioni un po 'fuori, non abbastanza chiare o non accurate al 100%. (Se hai bisogno di chiarezza e precisione al 100% sull'argomento dei blocchi, far finta di non averlo letto. Se hai solo bisogno di una comprensione approssimativa per continuare, allora dovresti essere bravo ad andare.) Il punto principale di questa risposta non è definire perfettamente i "blocchi", ma la discussione che segue, che è molto più nella mia timoniera.

Come ha scritto @killermist, ZFS supporta nativamente la deduplicazione a livello di blocco [ZFS].

Non è abilitato per impostazione predefinita in ZFS. L'accensione senza memoria sufficiente comporta un forte impatto sulle prestazioni. Inoltre, aneddoticamente, ZFS ha bisogno di una discreta quantità in più rispetto alla regola empirica consigliata da "1 GB di RAM per 1 TB di memoria", per adattarsi all'intero hashtable nella RAM. Tuttavia, a seconda dell'hardware è ancora possibile ottenere velocità di scrittura superiori a 40 MB / s. Lo capisco su tecnologia dell'era del 2008 con unità dell'era del 2015. Perfettamente accettabile per me per la maggior parte dei dati d'archivio. Il più grande svantaggio della deduplicazione ZFS è che non esiste ancora un modo elegante per farlo in modalità "batch / offline" (o più precisamente "fuori banda"), oltre all'attivazione del dedup, copiando tutto in un nuova directory temporanea sullo stesso filesystem, eliminando gli originali, quindi spostando indietro i contenuti temporanei (ora deduplicati).

La deduplicazione di Btrfs è probabilmente un po 'più complicata, con solo utility di terze parti attualmente disponibili per fare il lavoro. (Ma che usano API del kernel ben supportate e / o un'opzione ben supportata per cp; e in entrambi i casi che richiedono la propria logica per determinare i duplicati, che si spera sia assolutamente accurato.) Un potenziale vantaggio però sono quelle utilità sono "fuori banda". Il costo per la maggior parte delle utility, tuttavia, è che uccidono le prestazioni mentre martellano via, il che può richiedere ore, giorni, persino settimane per essere completato. (Personalmente preferirei gestire prestazioni di scrittura sempre più lente della deduplicazione ZFS in-band, piuttosto che martellare i miei HDD per giorni, diciamo, finiscono una volta all'anno.)

Sono a conoscenza di due soluzioni Btrfs che riguardano i "blocchi" (ma in ancora un'altra definizione) piuttosto che i file, sono api e dduper .

Le api, ad esempio, definiscono arbitrariamente una dimensione di "blocco" per sé al primo avvio, in base alla memoria disponibile e forse ad altri fattori. (Anche se probabilmente sto travisando il suo scopo, le sue caratteristiche, il suo meccanismo e i suoi pro / contro, dal momento che non lo uso, l'ho valutato solo di recente come un'opzione.)

Le api sono probabilmente leggermente ibride, poiché sono progettate per funzionare ininterrottamente e non martellare i dischi così duramente, anche se non è ancora tecnicamente "in-band" come il dedup ZFS. Raccoglie semplicemente i duplicati dopo il fatto e cerca di deduplicarli con un leggero tocco. Lavorare con una dimensione di blocco definita arbitrariamente significa che, in base alla progettazione, si adatterà alla tabella hash nella RAM. Lo svantaggio (presumibilmente) è che in un "blocco" potrebbero esserci delle estensioni uguali, ma le API potrebbero non dedurle perché i "blocchi" in cui si trovano sono altrimenti diversi.

Tieni presente che anche i programmi di utilità che eseguono in modo specifico la deduplicazione Btrfs di livello "file" (come bedup , duperemove , rmlint e altri), potrebbero comunque soddisfare le tue esigenze. Non posso esserne sicuro, ma sembra che lo farebbero. Questo perché anche un comando "cp --reflink = always" non sta realmente deduplicando "file". Dedica le estensioni di Btrfs . Quando un "file" riflesso cambia, Btrfs non deduplica solo le estensioni che cambiano, nelle loro estensioni uniche. Il resto del file rimane deduplicato. Ecco come i file deduplicati di grandi dimensioni possono ancora divergere come se fossero i propri file univoci, ma essere comunque per lo più deduplicati.

(Questo è anche il motivo per cui è così difficile determinare se un "file" è riflesso o meno, perché quel concetto non ha nemmeno davvero senso. Tutte le estensioni di un file possono esse stesse essere riflesse ad altri uguali, un concetto che fa ha senso, ma per coincidenza è una domanda particolarmente difficile a cui rispondere. Ecco perché, a meno che un'utilità di deduplicazione Btrfs non tenga traccia di ciò che ha già deduplicato, non vale la pena tentare di "rilevare" se un file è già stato deduplicato. Non esiste alcun attributo come refcount da ispezionare. È comunque più semplice deduplicarlo di nuovo comunque. Al contrario, determinare se un intero file è hardlink nel vecchio stile, è banale. Basta controllare il conteggio st_nlink per un dato inode.)

La mancanza di un "intero clone di file" è in effetti una caratteristica intrinseca di tutti i filesystem CoW che supportano istantanee e / o deduplicazione "libere", ed è vero sia che si tratti di estensioni di Btrfs, blocchi ZFS o qualcos'altro. Ecco perché uno dei due può probabilmente essere una risposta alla tua domanda. (Esistono almeno altri tre filesystem CoW che possono o sono in programma di essere in grado di fare tutto ciò di cui sono a conoscenza: nilfs2, bcachefs e xfs.)

Anche se non lo hai menzionato, nessuna tecnologia di deduplicazione a mia conoscenza, è consapevole del tipo di file. In altre parole, nessun deduplicatore sa ignorare i metadati * .jpg e considerare solo i dati di immagine compressi per la deduplicazione. Allo stesso modo, nessuno di loro considera i numeri magici dei file (almeno per determinare cosa considerare per la deduplicazione). Potrebbe essere una caratteristica killer, anche se sicuramente richiede aggiornamenti costanti e costanti delle definizioni. E potrebbe essere davvero difficile da progettare, trattando al contempo i file come una raccolta M: M astratta di estensioni, blocchi, ecc.


Per espandere questa vecchia risposta, rmlint è ora il deduper btrfs non contestato, almeno attualmente. 1) Fa un confronto intelligente, per evitare di duplicare inutilmente candidati duplicati a meno che non abbia esaurito altre opzioni; 2) Il ramo di sviluppo [e credo che il padrone] supporti l'hashing incrementale e 3) il deduping incrementale. Queste ultime due sono caratteristiche enormi. Nessun altro deduper fornisce tutte e tre le funzionalità, che possono letteralmente tagliare i giorni di interruzioni successive.
Jim,

rmlintconsidera solo file identici come candidati alla deduplicazione , ignorando i file con intervalli solo duplicati parziali.
Tom Hale,

@ tom-hale Non capisco il tuo punto?
Jim,
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.