Deduplizierung auf Partitionsebene

8

Welche Lösungen stehen für Blockebenen oder detailliertere Deduplizierungen zur Verfügung?

Es gibt dateibasierte - mit dem "Copy-On-Write" -Ansatz.

Ich suche nach "Copy-on-Write" auf Blockebene, damit ich regelmäßig nach allgemeinen Blöcken oder - vorzugsweise - Teilen von Dateien suchen, diese zusammenführen und für die CoW-Verwendungsweise kennzeichnen kann. Gibt es so etwas oder muss es noch erstellt werden? Ich bin nicht sicher, ob die Btrfs-Deduplizierung auf Block- / Datei- / Unterpart-Ebene erfolgt. Es gibt LessFS, aber ich bin nicht sicher, welchen Grad an Deduplizierung es bietet? Vielleicht eine andere Lösung?

Grzegorz Wierzowiecki
quelle
Ich verstehe nicht, warum diese Frage hochgestimmt wird. Wenn Sie nach "Linux-Deduplizierung" googeln, wird eine Liste von Dateisystemen und Produkten angezeigt, die wir hier nicht duplizieren müssen.
Kyle Jones
Solches Googeln liefert viele Lösungen, die auf Dateiebene funktionieren. Was der Zweck dieser Frage ist, ist ein Ratschlag, der zu meinem Zweck passt - vorzugsweise, um die Deduplizierung von zwei beliebigen Teilen von Dateien zu ermöglichen, die nicht unbedingt an die Blockebene angepasst werden müssen. Wenn eine solche Lösung nicht verfügbar ist, als Blockebene. Eine andere Sache ist, dass viele Dinge den Eindruck von Experimenten erwecken - ich verlasse mich auf die Erfahrung anderer Benutzer, um eine ausgereifte Lösung zu empfehlen.
Grzegorz Wierzowiecki
1
@GrzegorzWierzowiecki nicht sicher, ob es die Rechnung passt, aber überprüfen Sie Cyphertite, formal Inbegriff: peereboom.us/epitome cyphertite.com
gabe.

Antworten:

3

In Bezug auf die Deduplizierung auf Blockebene denke ich, dass ZFS derzeit die unbestritten beste Implementierung ist. Es ist wirklich nicht für die nachträgliche Optimierung ausgelegt, da seine Deduplizierung (falls aktiviert) direkt in die Lese- / Schreibfunktionen integriert ist. Aus diesem Grund kann es unter Last etwas teuer sein, die relevantesten Teile der Deduplizierungstabelle im Speicher zu halten, aber ZFS kann sich gut darauf beschränken, nicht viel mehr als 50% des Speichers zu verbrauchen, was davon abhängt Die Menge des installierten Speichers kann recht willkürlich erscheinen (50% von 2 GB gegenüber 50% von 64 GB, insbesondere wenn nur wenige Benutzeraufgaben Speicher benötigen).

Je nachdem, in was Sie es verwenden möchten, haben Sie einige Optionen:

OpenIndiana scheint einige gute Desktop- und Serveroptionen zu haben, die auf Solaris basieren

In FreeBSD (seit 9.0) ist eine ziemlich erweiterte Version von ZFS (einschließlich Deduplizierung) integriert. Eine bemerkenswerte von FreeBSD (damals MonoWall) abgeleitete Distribution ist NAS4Free , was die Herstellung eines NAS ziemlich einfach macht.

Linux hat einige Optionen, einige mit Dedup, andere ohne. Da Sie nach Dedup suchen, ist zfsonlinux das bemerkenswerteste, das ich gesehen habe . Ich bin mir nicht sicher, wie weit sie kommen oder wie stabil ihr Projekt ist, aber es sieht definitiv vielversprechend aus.

Was alles mit teilweiser Block-Deduplizierung betrifft, habe ich bisher NICHTS gesehen, das über die Fähigkeit berichtet, dies zu tun.

Mörder
quelle
0

Ihre Frage ist aufgrund des Begriffs "Blöcke" ein wenig verwirrend. Dies ist ein sehr überladenes Wort, wenn es um Festplatten und Dateisysteme geht. (Ihr umgebender Kontext hilft jedoch bei der Verdeutlichung.) Btrfs befasst sich nicht mit Dateisystemblöcken fester Größe, sondern mit "Extents" variabler Größe. (Verwirrenderweise werden jedoch auch Blockzonen mit variabler Größe definiert.) ZFS befasst sich mit Dateisystem- "Blöcken", teilweise oder hauptsächlich, weil dies erheblich einfacher zu lösende Probleme darstellt. Sowohl Btrfs als auch ZFS kennen "Blöcke" auf Festplattenebene, die selbst Abstraktionen sind. (Dann haben wir auch "Block-Level-Speicher", was eine semantisch andere Bedeutung haben kann.) Ich habe diese Beschreibungen möglicherweise ein wenig falsch, nicht klar genug oder nicht 100% genau. (Wenn Sie Klarheit und 100% ige Genauigkeit beim Thema Blöcke benötigen, Tu so, als hättest du das nicht gelesen. Wenn Sie nur ein grobes Verständnis benötigen, um fortzufahren, sollten Sie bereit sein.) Der Hauptpunkt dieser Antwort ist nicht, "Blöcke" perfekt zu definieren, sondern die folgende Diskussion, die viel mehr in meinem Steuerhaus ist.

Wie @killermist schrieb, unterstützt ZFS nativ die Deduplizierung auf Blockebene [ZFS].

Es ist in ZFS nicht standardmäßig aktiviert. Das Einschalten ohne genügend Speicher ist mit einem erheblichen Leistungseinbruch verbunden. Außerdem benötigt ZFS anekdotisch eine angemessene Menge mehr als die empfohlene Faustregel "1 GB RAM pro 1 TB Speicher", um die gesamte Hashtabelle in den RAM zu passen. Trotzdem können Sie je nach Hardware eine Schreibgeschwindigkeit von über 40 MB / s erreichen. Ich verstehe das auf Tech-Laufwerken der Ära 2008, die Laufwerke der Ära 2015 laufen lassen. Für mich größtenteils akzeptabel für hauptsächlich Archivdaten. Der größte Nachteil der ZFS-Deduplizierung besteht darin, dass es noch keine elegante Möglichkeit gibt, dies im "Batch / Offline" -Modus (oder genauer "Out-of-Band" -Modus) zu tun, außer das Dedup einzuschalten und alles auf a zu kopieren neues temporäres Verzeichnis im selben Dateisystem, löscht die Originale und verschiebt dann den (jetzt deduplizierten) temporären Inhalt zurück.

Die Btrfs-Deduplizierung ist wohl etwas skizzenhafter, da derzeit nur Dienstprogramme von Drittanbietern für die Arbeit verfügbar sind. (Die jedoch entweder gut unterstützte Kernel-APIs und / oder eine gut unterstützte Option für cp verwenden und in beiden Fällen eine eigene Logik zum Ermitteln von Duplikaten benötigen, von der man hofft, dass sie absolut korrekt ist.) Ein potenzieller Vorteil sind jedoch diese Dienstprogramme sind "out-of-band". Die Kosten für die meisten Dienstprogramme bestehen jedoch darin, dass sie die Leistung beim Hämmern beeinträchtigen - was Stunden, Tage oder sogar Wochen dauern kann. (Persönlich würde ich mich lieber mit der immer langsameren Schreibleistung der In-Band-ZFS-Deduplizierung befassen, als meine Festplatten tagelang zu hämmern, beispielsweise einmal pro Jahr.)

Zwei Btrfs-Lösungen, von denen ich weiß, dass sie sich eher mit "Blöcken" (aber in einer anderen Definition) als mit Dateien befassen, sind Bienen und Dduper .

Bienen definieren beispielsweise beim ersten Durchlauf willkürlich eine "Block" -Größe für sich selbst, basierend auf dem verfügbaren Speicher und möglicherweise anderen Faktoren. (Obwohl ich wahrscheinlich den Zweck, die Funktionen, den Mechanismus und die Vor- und Nachteile falsch darstelle, habe ich es erst kürzlich als Option bewertet, da ich es nicht verwende.)

Bees ist wohl leicht hybride, da es so konzipiert ist, dass es kontinuierlich läuft und die Festplatten nicht so hart hämmert - obwohl es technisch immer noch nicht "in-band" ist wie ZFS-Dedup. Es nimmt einfach Duplikate nachträglich auf und versucht, sie mit einer leichten Berührung zu deduplizieren. Wenn Sie mit einer beliebig definierten Blockgröße arbeiten, passt diese standardmäßig in die Hashtabelle im RAM. Der Nachteil (vermutlich) ist, dass es in einem "Block" Ausmaße geben kann, die gleich sind, aber Bienen möglicherweise nicht dedupieren, weil die "Blöcke", in denen sie sich befinden, ansonsten unterschiedlich sind.

Beachten Sie , dass selbst Dienstprogramme, die speziell eine Btrfs-Deduplizierung auf Dateiebene durchführen (wie Bedup , Duperemove , Rmlint und andere), Ihre Anforderungen möglicherweise noch erfüllen. Ich kann nicht sicher sein, aber es scheint, als würden sie es tun. Das liegt daran, dass selbst ein Befehl "cp --reflink = always" "Dateien" nicht wirklich dedupliziert. Es dedupliziert Btrfs- Extents . Wenn sich eine neu verknüpfte "Datei" ändert, de-dupliziert Btrfs nur die Änderungen, die sich ändern, in ihre eigenen eindeutigen Bereiche. Der Rest der Datei bleibt dedupliziert. Auf diese Weise können große deduplizierte Dateien immer noch voneinander abweichen, als ob sie ihre eigenen eindeutigen Dateien wären, aber immer noch größtenteils dedupliziert werden.

(Dies ist auch , warum es so schwierig ist , zu bestimmen , ob eine „Datei“ reflinked ist oder nicht, denn das Konzept nicht einmal wirklich Sinn machen. Mit einer Datei Ausdehnungen können sie auf anderen gleich Ausdehnungen reflinked werden, ein Konzept , das tut Sinn machen, aber das ist zufällig eine besonders schwer zu beantwortende Frage. Deshalb lohnt es sich nicht zu versuchen, zu "erkennen", ob eine Datei bereits dedupliziert wurde, es sei denn, ein Btrfs-Deduplizierungsdienstprogramm verfolgt, was bereits dedupliziert wurde. Es gibt kein Attribut wie refcount zum Überprüfen. Es ist ohnehin einfacher, es erneut zu deduplizieren. Im Gegensatz dazu ist es trivial zu bestimmen, ob eine gesamte Datei auf die altmodische Weise fest verknüpft ist. Überprüfen Sie einfach die Anzahl st_nlink für einen bestimmten Inode.)

Das Fehlen eines "vollständigen Dateiklons" ist in der Tat ein wesentliches Merkmal aller CoW-Dateisysteme, die "kostenlose" Snapshots und / oder Deduplizierungen unterstützen, und gilt unabhängig davon, ob es sich um Btrfs-Extents, ZFS-Blöcke oder etwas anderes handelt. Aus diesem Grund kann beides wahrscheinlich eine Antwort auf Ihre Frage sein. (Es gibt mindestens drei andere CoW-Dateisysteme, die all das können oder sollen, was mir bekannt ist: nilfs2, bcachefs und xfs.)

Obwohl Sie dies nicht erwähnt haben, ist meines Wissens keine Deduplizierungstechnologie für Dateitypen geeignet. Mit anderen Worten, kein Deduplizierer kann * .jpg-Metadaten überspringen und nur die komprimierten Bilddaten für die Deduplizierung berücksichtigen. Ebenso berücksichtigt keiner von ihnen die magischen Zahlen von Dateien (zumindest, um zu bestimmen, was für die Deduplizierung zu berücksichtigen ist). Das könnte ein Killer-Feature sein - obwohl es sicherlich ständige, fortlaufende Definitionsaktualisierungen erfordert. Und könnte sehr schwer zu entwerfen sein, während Dateien gleichzeitig als abstrakte M: M-Sammlung von Extents, Blöcken usw. behandelt werden.

Jim
quelle
Um diese alte Antwort zu erweitern, ist rmlint jetzt zumindest derzeit der unbestrittene Btrfs-Deduper. 1) Es ist klug zu vergleichen, um unnötiges Hashing von doppelten Kandidaten zu vermeiden, es sei denn, es hat andere Optionen ausgeschöpft; 2) Der Zweig "Entwickeln" (und ich glaube, Master) unterstützt inkrementelles Hashing und 3) inkrementelles Deduping. Die letzten beiden sind riesige Funktionen. Kein anderer Deduper bietet alle drei Funktionen, wodurch Tage für nachfolgende Läufe buchstäblich verkürzt werden können.
Jim
rmlintBetrachtet nur identische Dateien als Kandidaten für die Deduplizierung und ignoriert Dateien mit nur teilweise doppelten Bereichen.
Tom Hale
@ Tom-Hale Ich verstehe deinen Standpunkt nicht?
Jim