Medien-Sammlung zwischen zwei Unraid-Servern synchronisieren


mgutt

Recommended Posts

Backups sind essentiell, aber die Kosten bei einer immer größer werdenden Medien-Sammlung nicht ohne. Ich kenne jemanden, der eine ähnlich große Sammlung wie ich besitzt und wir kamen nun auf die Idee, dass wir unsere Unraid-Server jeweils als Backup des anderen nutzen. Wir werden uns also auf ein Datei-Namensschema einigen und natürlich auch darauf welche Inhalte in welchem Format und Umfang erhalten bleiben sollten.

 

 

Der Knackpunkt ist aber ein ganz anderer. Nämlich das Wie. Also wie synchronisieren wir die Sammlungen und zwar nur die Inhalte, die wir beide in der exakt selben Version besitzen und ohne, dass ein gehackter Server die Sammlung des anderen zerstören kann?

 

Nehmen wir zB ein Musik Album. Davon gibt es zwei Versionen und auf einer ist ein Bonus Track. Nun soll beim Abgleichen dieses Album nicht synchronisiert werden, denn der andere besitzt ja nicht die selbe Original CD, wodurch ein Verstoß gegen das Urheberrecht resultieren würde. Stattdessen soll in so einem Fall dieses Album nur verschlüsselt auf dem externen Server gesichert werden. Passiert das allerdings zu oft, hat man am Ende doppelt so viel Speicherplatz belegt. Das gilt es also möglichst zu vermeiden. Mir fällt aktuell nur ein, dass man den Barcode der CD als Datei wie zB 1234534534543.barcode im Verzeichnis ablegt und dann nur die unverschlüsselt synchronisiert, wo der Barcode übereinstimmt. Hat dazu jemand eine Idee?

 

 

Link to comment

Ja mit einer Quersumme / Hash ginge das bei Musik. Bei Filmen ginge die Methode allerdings nicht, weil unterschiedliche Tonspuren gerippt wurden.

 

Und wie den Abgleich machen? Aktuell fällt mir das ein:

 

- das mit den Barcode-Dateien in den Film-Ordner

- beide betreiben einen rsync daemon mit Leserechten (also keiner kann auf dem Server des anderen Daten verändern)

- beide holen per rsync ab

 

Zu Anfang:

- ein Server wird zum Master erklärt, also dessen Rips gelten als Basis für beide

- wenn der Barcode gleich ist, aber die MKV unterschiedlich, dann lädt rsync vom Master die MKV herunter

- Ordner ohne Barcode oder mit unterschiedlichen Barcodes werden verschlüsselt auf dem Server des jeweils anderen gespeichert

 

Später, wenn beide die selbe Datenbasis haben:

- jemand ändert etwas an der MKV (Kopfdaten wie zB die Sprachbezeichnung einer Audiospur)

- rsync lädt von dem herunter, der die neuere Datei hat

 

Wenn ein Hacker auf einem Server alle MKV gegen leere Dateien ersetzt, aber mit neuerem Dateidatum:

- der andere Server lädt die leere Datei per rsync herunter, aber dank der Option "--backup --backup-dir=/mnt/user/Removed/<timestamp>/" gehen diese nicht verloren, sondern werden einfach nur in einen anderen Share verschoben

- die rsync Logs gehen per E-Mail raus (großes Log = irgendwas stimmt nicht)

 

Eventuell verpflichten sich dann beide noch eine "change.log" zu pflegen, wo drin steht warum man etwas an einer MKV verändert hat. Aber das ist glaube ich nicht so wichtig.

 

Link to comment
14 hours ago, mgutt said:

Bei Filmen ginge die Methode allerdings nicht

 

Du musst beides separat betrachten. Kein Mechanismus wird universell funktionieren. Bin gerade im Urlaub, deshalb nur kurz:

 

Plex macht schon die ganze Arbeit mit seinen Scannern. Die XML Dateien aus der Plex Web API enthalten alle Informationen. Mit dutzenden Skripten hole ich das nachts raus und interpretiere das. Suche nach geänderten Metadaten etc.

 

Nach der Musicbrainz ID habe ich noch nicht gesucht. Ich würde mir Mal die Musicbrainz ID von einem Album von der Musicbrainz Webseite holen und damit den Datenbank Dump von Plex durchsuchen. Vielleicht ist die drin.

 

Lass uns nächste Woche Mal drüber sprechen.

 

  • Like 1
Link to comment
18 hours ago, mgutt said:

Eventuell verpflichten sich dann beide noch eine "change.log" zu pflegen

 

Macht das nicht. Manuell geht immer schief.

 

Zu Video (Filme, Shows): Im Gründe genommen ist es relativ einfach. Die oben von mir erwähnten Plex XML Dateien aus dem Plex Web API enthalten auch hier alle relevanten Informationen. Der Mix aus den Tracks (Video, Audio, Subtitle) mit Bandbreiten, Kanälen und Längen und Zeitstempel der Datei ergibt ebenfalls eine vergleichbare Datenbasis. Z.B. eine Liste aller Filme in einer Library hole ich Dir mit Phyton mit ein paar Zeilen Code inkl. der o.g. Daten inkl. der IMDB-ID raus. Das ist dann vergleichbar mit dem Content eines anderen. So treffe ich die Entscheidung beim Hochrüsten des Content (SD > HD > 4K).

 

Wie gesagt - nächste Woche.

 

Edited by hawihoney
Link to comment
4 minutes ago, hawihoney said:

Macht das nicht. Manuell geht immer schief.

Ich meine nicht manuell syncen. Ich meine nur, dass man halt hinschreibt warum man die MKV verändert hat. Wenn ich Langeweile habe, benenne ich manchmal die Untertitel (Forced, Regular, SDH, etc). Dadurch ändert sich ja die Quersumme der MKV und rsync würde sie neu syncen und damit sich der andere nicht fragt "warum", könnte er dann ja in die change.log schauen. Der Sync an sich ginge wie gehabt nach Dateidatum. Also neuere Datei gewinnt.

 

5 minutes ago, hawihoney said:

Der Mix aus den Tracks (Video, Audio, Subtitle) mit Bandbreiten, Kanälen und Längen und Zeitstempel der Datei ergibt ebenfalls eine vergleichbare Datenbasis

Danke für den Wink. Geht doch ganz einfach. Ich muss doch nur die Länge und Bitrate der Videospur auslesen und vergleichen. Dann weiß man ohne IMDB und Barcode ob es der gleiche Rip ist. Und synchronisiert wird schlussendlich der, der mehr Tonspuren enthält.

Link to comment
On 7/28/2021 at 3:32 PM, mgutt said:

dass man halt hinschreibt warum man die MKV verändert hat

 

Das kann man doch am Zeitstempel der Datei erkennen, oder?

 

Follow up: Hab mal gerade nach der MBID (Musicbrainz) eines Interpreten und eines Albums gesucht. Leider habe ich beides nicht im Plex Datenbank Dump gefunden. Ich dachte bislang Plex würde sich an Musicbrainz orientieren. Da habe ich mich wohl geirrt. Vielleicht nutzen sie aber auch Gracenote.

 

Bei Filmen/Serien ist das hingegen kein Problem. Die IDs von IMDB, THETVDB werden in der Datenbank abgelegt. Diese IDs nutze ich z.B. um meinen Content maschinell umzubenennen (e.g. "Der Film (2021) {imdb-1234567}.mkv". Der neue Plex Scanner kann das interpretieren.

 

Link to comment
2 minutes ago, hawihoney said:

Die IDs von IMDB

Die nützt mir aber nichts, weil sich diese nicht nur die DVD, Blu-Ray und 4K teilen, was man ja noch an der Auflösung erkennen könnte, sondern es gibt ja oft mehrere Versionen eines Films auf Blu-Ray zB Remaster, Extended, usw. Es soll aber nicht möglich sein, dass jemand, der die alte Version von zB Fight Club besitzt, in der Lage ist die Fight Club Remaster des anderen herunterzuladen und das selbe gilt eben auch bei Herr der Ringe vs Herr der Ringe Extended, die sich ebenfalls die selbe IMDB ID teilen.

 

Dann ist mir aber klar geworden, dass bei meinem bisherigen Plan ja jeder alles herunterladen kann, wenn er einfach sein Script ändert. Aus dem Grund denke ich über diese Lösung nach:

 

1.) Beide Seiten generieren aus dem Video Track aller MKVs den MD5 Hash

2.) Beide Seiten erstellen einen neuen Share namens /MoviesSync und darin wird ein Ordner "/Softlinks" mit CHMOD 111 versehen

3.) In diesem Ordner werden Softlinks erstellt, die die MD5 als Namen tragen wie zB /MoviesSync/Softlinks/317370c74c1bf17a97474826006d11fc/

4.) Diese Softlinks verweisen auf den real existierenden Film-Ordner wie zB /Movies/Filmname (2021)/

5.) Der externe Server kann also nur auf den Filmordner zugreifen, wenn er selbst die MD5 kennt (also aus seinem Video Track den MD5 Hash generiert hat), da er die ganzen Softlinks in /MoviesSync/Softlinks sonst nicht sehen kann.

 

Dann könnte jeder nur das herunterladen, was er selbst auch mal gerippt hat.

 

Ich habe das auch schon getestet (über SMB). Wenn ich da dem Ordner /chmod111 das chmod Recht 111 gebe, dann kann ich diesen Ordner nicht öffnen:

image.png.caf1bd89e6b5e4003a7468bd1985e324.png

 

Ich kann aber, wenn ich den Pfad kenne und direkt aufrufe, auf Dateien und Unterordner direkt zugreifen und wenn die Rechte des Unterordners passen, sogar Dateien und Ordner darin erstellen:

image.png.836ddd625599aff30fcd60887b1d69ef.png

 

 

Das sollte entsprechend auch mit Soflinks und dem rsync daemon funktionieren.

 

 

 

 

27 minutes ago, hawihoney said:

Das kann man doch am Zeitstempel der Datei erkennen, oder?

Ja klar. Ich dachte nur, falls sich der andere für das "warum" interessiert. Ist aber vermutlich nicht wichtig. Man könnte den anderen dann ja einfach fragen.

Link to comment
2 hours ago, mgutt said:

Die nützt mir aber nichts

 

Ich habe es oben schon mal angedeutet. Du wirfst alles gleichzeitig in den Topf. Das sind IMHO die Themen:

 

1.) Womit habe ich es zu tun? IMDB, TMDB, MBID.

 

2.) In welcher Qualität bzw. Ausprägung liegt es vor? Streams, Bandbreiten, Längen, Kanäle, Release.

 

3.) Die Synchronisation.

 

Zu 1.) Ist einfach - Musik derzeit ausgenommen. Wird von Plex geliefert.

 

Zu 2.) Wäre für mich einfach da ich das technisch angehen würde. Wird auch von Plex geliefert. Hatte mal von IMDB die statistischen Details gescrapt. Du glaubst nicht wie viele unterschiedliche Directors Cut von einem Titel geben kann. Ich habe das dann für mich verworfen und gehe rein über die technischen Details. Höhere Bandbreite ist besser. Länger ist anders - nicht unbedingt besser. Rippen zwei Personen mit den gleichen Werkzeugen, deren gleichen Einstellungen und selbst gewählten Regeln die gleiche Scheibe, dann kommt das selbe raus. Es wird also vergleichbar.

 

Zu 3.) Wird wohl auch einfach sein. Würde darüber aber erst im letzten Schritt nachdenken. Die unter 1+2 gewonnenen Details würde ich neben den Content legen und interpretieren. Vergiss nicht die Werkzeuge und deren Einstellungen zu synchronisieren, sonst generiert ihr vom selben Content unterschiedliche Daten.

 

Link to comment

Mein letzter Beitrag zu diesem Thread:

 

Ich habe mich mal auf die Suche nach den Musik IDs gemacht. Es geht um Interpreten und Alben. Leider habe ich in der Plex Oberfläche bisher keine Möglichkeit gefunden zu beiden (Interpreten, Alben) eine XML zu generieren. Das geht derzeit nur mit Filmen und Serien. Mit folgenden Web-API Befehlen von Plex könnte man das aber mal prüfen. Wer also in seiner Musik Bibliiothek den Interpreten "Led Zeppelin" sowie deren 18-Track Album "How The West Was Won" besitzt, könnte überprüfern, ob er zu den selben GUIDs gelangt. Mit deren Hilfe könnte man dann zumindest #1 aus meinem Post oben erreichen (liegt bei beiden Sync Partnern das selbe Album vor). Hier die notwendigen Schritte:

 

http://<Eure interne Plex Server IP>:32400/library/sections
--> Das listet alle von Euch angelegten Bibliotheken
--> Sucht darin bitte den Pfad zu Eurer Musik Bibliothek (path="<Euer Musik Ordner>")
--> Notiert aus dieser Zeile den Wert von key="<Die ID Eurer Musik Bibliothek>"
--> In meinem Fall 8

http://<Eure interne Plex Server IP>:32400/library/sections/<Die ID Eurer Musik Bibliothek>/all
--> Dieser Aufruf dauert lange da alle Interpreten zusammengestellt werden
--> Das listet alle Interpreten
--> Sucht darin nach title="Led Zeppelin"
--> Die Zeile muss ebenfalls type="artist" enthalten
--> Lautet die guid wie bei mir? guid="plex://artist/5d07bbfc403c6402904a60f9"

http://<Eure interne Plex Server IP>:32400/library/sections/<Die ID Eurer Musik Bibliothek>/albums
--> Dieser Aufruf dauert lange da alle Alben zusammengestellt werden
--> Das listet alle Alben
--> Sucht darin nach title="How The West Was Won"
--> Die Zeile muss ebenfalls parentTitle="Led Zeppelin" enthalten
--> Die Zeile muss ebenfalls type="album" enthalten
--> Lautet die guid wie bei mir? guid="plex://album/5d07c294403c6402908ebff8"

 

Es gibt noch ein Vielzahl besserer und kürzerer Plex Web-API Aufrufe, ich war aber zu faul und habe die Aufrufe aus meinen Skripten kopiert. Diese prüfen jede Nacht ob neuer Content oder neue Metadaten hinzugefügt wurden. Wenn das der Fall ist wird die XML Datei mit allen Details, sowie Fanart und Poster zu Filmen, Serien, Episoden, Bildern, Interpreten und Alben exportiert.

Edited by hawihoney
Link to comment
17 hours ago, hawihoney said:

1.) Womit habe ich es zu tun? IMDB, TMDB, MBID.

 

2.) In welcher Qualität bzw. Ausprägung liegt es vor? Streams, Bandbreiten, Längen, Kanäle, Release.

Stimmt. Ich brauche ja nur die IMDB ID mit der Bitrate des Videos und der Länge abgleichen. Alles in Kombination sollte denke ich immer bei verschiedenen Versionen eines Filmes unterschiedlich sein. Audiokanäle und Untertitel muss ich dagegen ignorieren, da wie gesagt beide mit unterschiedlichen Regeln gerippt haben.

 

Wenn das als Unterscheidungskriterium reicht, könnte ich mir die rechenaufwendige Erstellung des MD5 Hash sparen und der Ablauf wäre so:

 

1.) Beide Seiten erstellen einen neuen Share namens /MoviesSync und darin wird ein Ordner "/Softlinks" mit CHMOD 111 versehen

 

2.) In diesem Ordner werden Softlinks erstellt, deren Dateiname aus der IMDB ID, der Bitrate und der Länge des Videotracks  besteht (welche man sich alle aus der Plex DB zieht) wie zB /MoviesSync/Softlinks/tt123456_01h35m_29.9mbit/

 

3.) Diese Softlinks verweisen auf den real existierenden Film-Ordner wie zB /Movies/Filmname (2021)/

 

4.) Der externe Server kann also nur auf den Filmordner zugreifen, wenn er selbst den Namen des Softlinks nachbilden kann

 

Allerdings habe ich damit wieder ein Problem, da man alle drei Werte herausfinden kann, auch ohne, dass man den Film selbst mal gerippt hat, da viele Leute diese Werte im Internet veröffentlichen:

https://forum.blu-ray.com/showpost.php?s=094c6ccc7a537be13200b1943c368b44&p=4243409&postcount=13

 

 

Link to comment

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.