[ZFS] Dedup funktioniert nicht?

-Nuke-

Well-Known Member
Heyho,

ich weiß nicht ob ich hier ein Verständnisproblem habe oder etwas falsche mache, oder es mir nur nicht angezeigt wird...

Und zwar, ich habe von einigen Serien die DVDs gekauft und auf meinen Server übertragen . Nun habe ich die einzelnen Episoden von der DVD extrahiert (nicht encodiert! -> tccat), damit ich sie in entsprechenden Programmen wie XBMC ordentlich angezeigt bekomme. Jedoch will ich wegen diverser Extras auf den DVDs diese auch noch behalten.

Nun dachte ich, wäre es sinnvoll hier Deduplication zu nutzen, da ja die Daten so ziemlich 1:1 die Gleichen sind, nur statt in der VIDEO_TS Struktur in der S01E01.vob Struktur.

Also habe ich quasi:

zfs create datatank/moviesdedup
zfs set dedup=on datatank/moviesdedup

und die Daten darauf kopiert (bzw. er ist gerade noch dabei).

Aber es scheint mir so, als wenn hier die Deduplication nicht greift. Zumindest stimmt die Angabe von "zfs list" mit der von "du" überein von der Größe. Weiterhin zeigt mir "zpool list" auch nur ein DEDUP von "1.00x" an.

Übersehe ich irgendetwas? Ich dachte Deduplication arbeitet auf Block-Ebene? Da müsste das doch eigentlich greifen.
 
Zuletzt bearbeitet:
Kannst ja mal 1MB binäre Daten aus der VOB holen und in der DVD-Struktur suchen, dann weißt du ob die Daten identisch auf Blockebene!
 
Gute Idee... wie mache ich das am Leichtesten? :D Also ein Stück aus einer Datei rausnehmen geht ja mit dd ganz leicht. Aber wie ich jetzt den Vergleich mache...
 
Ich hab mich jetzt mal ein bisschen in die Arbeitsweise von der Deduplication eingelesen. Ich denke ich weiß jetzt woran das liegt. ZFS macht da ja nichts anderes, als zu prüfen, ob ein Block (Standard 128KB) schon im Dateisystem existiert. Nunja, wenn ich jetzt aber einen Datenstrom nehme, den irgendwo aufschneide und die Daten daraus entnehme und wieder abspeichere, dann sind das zwar die gleichen Daten, aber aufgrund eines ganz anderen Startpunkts ist natürlich der Inhalt innerhalb der Blöcke ein ganz anderer (verschoben um den entsprechenden Offset). Dementsprechend findet er natürlich größtenteils nichts.

Denn der Inhalt muss ja bei mir identisch sein, sonst würde ich mir ja das Video nicht anschauen können.
 
Ich bezweifle mal stark, dass selbst reines Remuxen die Daten 1:1 identisch lässt. Es gibt Audio und Video und es gibt die Container-Metadaten und Sync-Marker und so, die sich beim Remuxen ändern können.
 
Für mich sind das unterschiedliche Daten und daher auch nicht im dedup.
 
Ich bezweifle mal stark, dass selbst reines Remuxen die Daten 1:1 identisch lässt. Es gibt Audio und Video und es gibt die Container-Metadaten und Sync-Marker und so, die sich beim Remuxen ändern können.

tccat macht aber nichts anderes als sich vom Index den Title-Marker zu holen und ab dort bis zum Ende des Titles den Datenstrom rauszuziehen. Du kannst bei VOBs auch mit dd die Daten so rausholen und das Video funktioniert. Was anderes macht tccat da auch nicht.
 
zfs unterstützt Deduplikation nicht auf Datei- oder Byte- sondern nur auf Blockeben. https://blogs.oracle.com/bonwick/entry/zfs_dedup
In deinem Anwendungsfall wäre Byteebene interessant, jedenfalls aus technischer Sicht. Ansonsten wärest du auch darauf angewiesen die Checksummern auf SHA256 oder 'zfs set dedup=fletcher4,verify tank' zu setzen.
Ich würde aber sowieso vermeiden Daten in zig Versionen auf meinem Speicher vorzuhalten. Gibt es für deine Anwendung nicht eine Art on-the-fly Streaming Server?
Meine DVDs lese ich auf openelec über ein SMB Share und öffne das *.ifo File
 
zfs unterstützt Deduplikation nicht auf Datei- oder Byte- sondern nur auf Blockeben. https://blogs.oracle.com/bonwick/entry/zfs_dedup
In deinem Anwendungsfall wäre Byteebene interessant, jedenfalls aus technischer Sicht. Ansonsten wärest du auch darauf angewiesen die Checksummern auf SHA256 oder 'zfs set dedup=fletcher4,verify tank' zu setzen.

Das hab ich auch schon probiert. Ich habe auch schon die Recordsize bis auf 32K abgesenkt. Das bringt zwar etwas Faktor "1.05", statt "1.00", aber ist natürlich noch weit von ~"1.9" entfernt.

Ich würde aber sowieso vermeiden Daten in zig Versionen auf meinem Speicher vorzuhalten. Gibt es für deine Anwendung nicht eine Art on-the-fly Streaming Server?
Meine DVDs lese ich auf openelec über ein SMB Share und öffne das *.ifo File

Naja, meine normalen DVDs schaue ich auch so über die VIDEO_TS Ordner über XBMC. Aber wenn ich halt in XBMC meine Serien (die ich ja ebenfalls auf DVD im VIDEO_TS Format vorliegen habe) in der Serien-Liste haben will, brauche ich halt jede Folge einzeln. Also entweder XBMC weiterprogrammieren, dass der mit DVD-Titles umgehen kann, oder halt die Serien extrahieren. Letzteres geht fixer :D

Ist zwar schade, dass es nicht über dedup geht, aber naja. Bisher sind es "nur" 300GB die da verloren gehen.
 
Überhaupt muss man bei Deduplication in den allermeisten Fällen mit einem sehr spitzen Bleistift rechnen. Da Festplatten inzwischen extrem günstig sind, die Kosten durch den enormen RAM- bzw. L2ARC-Verbrauch durch Deduplication noch immer hoch, rechnet es sich unter dem Strich nur in wenigen Szenarien, wo sehr hohe Dedup Ratios auf großen Datenmengen erreicht werden können.
 
Ja, das stimmt schon. Bei mir ist es jedoch nur ein Privatserver, der in 90% der Fälle nichts anderes macht als per NFS oder SSHFS die Dateien bereitzustellen und aufzupassen, dass diese auch heil bleiben. Somit gehören ZFS quasi die ganzen 16GB RAM.

Mein Problem mit "mehr Festplatten" ist aber, dass ich dazu noch eine Controllerkarte bräuchte und eine Idee, wie ich die weiteren Platten mit Strom versorge :D Nichts unmögliches, aber teurer als einfach nur 4 weitere Platten. Aber noch habe ich 2,4TB (von 8) frei, was potentiell noch die nächsten 3-5 Jahre reicht.
 
Mit fuse lässt sich da sicher was basteln. Das wäre aber ein übelster Hack, der im Grunde nur das Problem umgeht, dass Abspielsoftware X Scheiße ist. Da gibts auch bessere Zeitverschwendungen.
 
das wäre ja so als ob ich mit mkfifo und dd arbeiten würde. Oder man stelle sich vor ein Playlist file würde nicht nur Pfade sondern auch Offsets von Dateien deklarieren.
 
Joahr, sicherlich könnte man jetzt übelst rumhacken, aber das ist alles Zeitaufwand. tccat kann auch pipen. Das heißt ein:

tccat -i Staffel_1 -T 2,-1 -P | mplayer

funktioniert ohne Probleme und spielt den 2. Titel aus dem DVD-Ordner ab. Das Langzeitziel wäre dann eher XBMC entsprechend zu erweitern, statt da irgendwas externes zu machen.

Gibt es keine Möglichkeit, einen Link auf einen Teilbereich einer Datei zu erstellen?

Das Problem ist, dass es bei der VIDEO_TS Struktur nicht unbedingt nur eine Datei ist. Es können auch 2,3,4,... sein.
 
Zuletzt bearbeitet:
Zurück
Oben