[1] 2 >>> MLD-6.x / General / Aufnahmen auf USB-Stick und anschließend auf NAS verschieben
 

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Hallo.

Ich hatte ursprünglich vor, mein Aufnahmeverzeichnis direkt auf ein NAS per NFS auszulagern. Wie mein Wyse 3040, ist das NAS auch chronisch underpowered. Das ist ein alter Banana PI der 1. Generation. Dran hängt eine 5 TB 2,5" Platte per SATA. Aufnahmen vom NAS abspielen funktioniert einwandfrei, aber Schreiben ist leider zu langsam. Daher die Idee, die Aufnahmen auf einen USB-Stick zu erledigen, und nach Abschluss jeder einzelnen Aufnahme diese dann automatisiert auf das NAS zu verschieben. Ich bin aber nicht sicher, wie ich das genau anstellen muss. Das muss dann ja irgendwie vom VDR aus nach einer Aufnahme angetriggert werden. Der VDR darf natürlich auch erst dann herunterfahren, wenn das Verschieben abgeschlossen ist. Und wenn man eine Aufnahme zeitversetzt, während sie noch aufgenommen wird, guckt, ist das wahrscheinlich auch ungünstig. Letzteres ist dann wohl der Preis für die Low-Power-Devices.

Habt ihr eine Idee, wie man das umsetzen könnte? Ich würde den USB-Stick als /data mounten und das NAS dann nach /data/tv/NAS. So taucht alles auf dem NAS im VDR Aufnahmeverzeichnis im Ordner NAS auf.
Hardware (show / hide)

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20843
    • View Profile
    • ClausMuus.de
Hi,
das sollte alles kein Problem darstellen.
Unter /usr/share/vdr/recording.d/ kannst Du ein Script hinlegen, dass immer dann aufgerufen wird, wenn eine Aufnahme abgeschlossen ist. Durch Aufruf von /usr/share/vdr/recording.sh kannst Du nachschauen mit welchen Argumenten das Script vom VDR aufgerufen werden kann. In den anderen *.d Ordnern kannst Du nachschauen wie man auf unterschiedliche Ereignisse reagieren kann.
Mit einem Script unter /usr/share/vdr/shutdown.d kannst Du verhindern, dass das System herunter fährt, solange kopiert wird. Dort könntest Du nachschauen ob ein copy Process läuft, und in dem Fall das Script mit einem exit Code beenden.
Du musst die Aufnahmen der NAS nicht zwangsweise in einen Unterordner verbannen. Du kannst die beiden Quellen auch per mergerfs zusammenfassen (das geht über das Webif Setup), so das beides gemeinsam unter /data/tv angezeigt wird. Zusätzlich musst Du den mergerfs Mount dann nur so konfigurieren (in der /etc/fstab) dass der USB Stick bevorzugt verwendet werden soll (ich bin nicht sicher ob das wirklich geht). Den Kopiervorgang müsstest Du dann allerdings unter /mnt/... durchführen.
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 6.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 22TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Hallo Claus.

Vielen Dank für die Infos. Ich gucke mir das nachher an. Allerdings bin ich nicht so der Profi-Linux-Scripter. Könnte gut sein, dass da noch Fragen zu kommen.

mergerfs habe ich umgangen, indem ich die fstab angepasst habe. Mit mergerfs war das Schreibverhalten auf das NAS viel schlimmer. Wenn man den export vom Server direkt nach /data mounted, ist der Datenstrom Richtung Server gleichmäßig konstant. Mit mergerfs dazwischen wird alle paar Sekunden ein Burst mit hoher Bitrate auf den Server abgefeuert, was den komplett aus dem Tritt gebracht hat. Keine Ahnung, warum sich mergerfs so verhält und ob man das ändern kann. Dein Vorschlag hätte natürlich den Vorteil, dass das aus dem Aufnahmemenü vom VDR transparent wäre. Gefällt mir. Vielleicht mache ich das wieder mit mergerfs, mal Doku dazu lesen.
Hardware (show / hide)

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20843
    • View Profile
    • ClausMuus.de
Du könntest das auch umdrehen, und Aufnahmen pauschal in ein Unterverzeichnis machen lassen, und nfs nach /data/tv mounten. Allerdings weiß ich nicht ob sich sowas im VDR fest einstellen lässt. Ist aber letztlich nicht wichtig. Wer weiß dass die Aufnahmen in einem Unterordner zu finden sind, kommt damit auch zurecht.
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 6.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 22TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Prinzipiell ist die Idee gut. Aber sich zu merken, dass die aktuell laufende Aufnahme in einem Unterverzeichnis zu finden ist, ist glaube ich gewöhnungsbedürftiger als andersrum. Wenn das Aufnahmeverzeichnis aber bis auf ein Unterverzeichnis leer ist, weiß man sofort wieder, was los ist.
Hardware (show / hide)

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Angenommen, der USB-Stick ist nach /data gemountet und beinhaltet den Ordner tv. Der Server ist per NFS nach /data/tv/Server gemountet. Kann das mit diesem Script funktionieren? Habe es noch nicht ausprobiert. Vielleicht seht ihr noch einen Fehler oder, dass es so gar nicht funktionieren kann.

Code: [Select]
#!/bin/sh

REC="$2"
TARGET="/data/tv/Server"

case "$1" in
after)
svdrpsend.sh "MESG Aufnahme beendet, verschiebe auf den Server..." >/dev/null
RECDIR=`dirname "$REC"`                  # /data/tv/sendung
RECNAME=`basename "$RECDIR"`             # sendung
TARGETDIR="$TARGET"/"$RECNAME"           # /data/tv/Server/sendung
mkdir -p "$TARGETDIR" >/dev/null
mv "$REC" "$TARGETDIR" >/dev/null
if [ $? != "0" ]; then
svdrpsend.sh "MESG FEHLER während des Verschiebens!" >/dev/null
else
svdrpsend.sh "MESG Verschieben der Aufnahme beendet." >/dev/null
fi
touch /data/tv/.update
;;
esac

Das Script ist hauptsächlich eine gekürzte Version von hier: https://www.vdr-portal.de/forum/thread/46896-aufnahmen-verschieben-r%C3%BCckgabewert-von-cp-bei-no-space-left/?postID=439762#post439762
Hardware (show / hide)

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20843
    • View Profile
    • ClausMuus.de
Das mit dem Verschieben (mv) wird so nicht gehen, da bei einem mv der Name des Ordners im Ziel nicht existieren darf. Und auch die Vorlage mit dem cp und rm funktioniert nur bedingt. Sobald Du Serien oder Serientimer aufnimmst, werden die nicht in den entsprechenden Unterordner gelegt.
Besser müsste das eigentlich klappen wenn Du das TARGETDIR so berechnest:
Code: [Select]
TARGETDIR="${REC//\/tv\//\/tv\/server\/"
Dann klappt's auch mit dem Verschieben (mv)
« Last Edit: May 30, 2025, 00:28:57 by clausmuus »
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 6.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 22TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Danke für den Tip. Werde das so übernehmen und testen.
Hardware (show / hide)

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Verschieben nach der Aufnahme geht. Vielen Dank für die Tips. Du hattest Recht, bei Serienaufnahme hätte das nicht funktioniert. Teste das noch etwas, dann poste ich das ferige Script hier. Jetzt muss ich dem VDR nur noch beibringen, dass er mit dem Herunterfahren wartet, bis das Verschieben abgeschlossen ist. Sowohl wenn man ihn per Power-Taste ausschaten will, als auch wenn er zur Aufnahme aufgewacht ist und anschließend wieder herunterfahren will. Da ist zwar eine Verzögerung von 5 Minuten drin, ich weiß aber nicht, ob die immer sicher ausreicht.
Hardware (show / hide)

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20843
    • View Profile
    • ClausMuus.de
Erstelle einfach solch ein Script im /usr/share/vdr/shutdown.d Ordner und mache es ausführbar:
Code: [Select]
! ps ax | grep -q mv /data/tv/
exit $?
Die zweite Zeile ist vermutlich nicht mal nötig.
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 6.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 22TB HDD - Lian Li PC-C37B - Samsung LE40A559

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Aufnahmen auf USB-Stick und anschließend auf NAS verschieben
« Reply #10 on: May 31, 2025, 16:01:09 »
Beim Verschieben gibt es das Problem, dass wenn man eine Aufnahme abbricht und danach nochmal aufnimmt, würde VDR normalerweise eine 00002.ts statt einer 00001.ts im gleichen Verzeichnis anlegen. Da letztere aber verschoben wurde, legt VDR ein neues Verzeichnis auf dem Stick an, mit einer 00001.ts drin. Und das Verschieben scheitert, weil das alles auf dem Server schon existiert. Schwieriger als ich dachte.

Das ist das Script bisher:
Code: [Select]
#!/bin/sh

case "$1" in
after)
svdrpsend.sh "MESG Aufnahme beendet, verschiebe auf den Server..." >/dev/null
TARGETDIR=`dirname "${2//\/tv\//\/tv\/Server\/}"`
mkdir -p "$TARGETDIR" >/dev/null
mv "$2" "$TARGETDIR" >/dev/null
if [ $? != "0" ]; then
svdrpsend.sh "MESG FEHLER während des Verschiebens!" >/dev/null
else
svdrpsend.sh "MESG Verschieben der Aufnahme beendet." >/dev/null
fi
touch /data/tv/.update
;;
esac

An der Stelle müsste man das wohl mit dem mergerfs so machen, wie du weiter oben beschrieben hast. Dann würde der VDR das erkennen?

EDIT: Das geht auch nicht. Selbst wenn man mergerfs beibringen kann, dass das Schreiben auf ein bestimmtes Dateisystem erfolgen soll, würde der VDR ja immer da drauf schreiben. Also auch die resume, oder beim Verschieben in Unterordner per OSD. Das würde dann alles auf dem Stick landen, selbst wenn es vorher schon auf dem Server lag.

EDIT: Könnte doch gehen. Mit der Mountoption
Code: [Select]
category.create=eplfs statt der MLD-default
Code: [Select]
category.create=epmfs nutzt mergerfs für "create, mkdir, mknod, symlink" das Dateisystem mit dem geringsten freien Speicher (vs. MLD-default meisten freien Speicher), welches dann der USB-Stick sein wird. Alle anderen Dateioperationen finden auf dem Dateisystem statt, auf dem sich die Datei bereits befindet. Das ist genau das, was ich brauche. Jetzt muss ich nur noch herausfinden, wie ich aus $2 (dem Aufnahmeverzeichnis, so wie es der VDR sieht, sprich "/data/tv/'name'/'datum'.rec") die Pfade für die Mountpoints generiere. Es muss "/data/" durch "/mnt/'uuid'" ersetzt werden.
« Last Edit: May 31, 2025, 18:09:21 by Marcus »
Hardware (show / hide)

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Aufnahmen auf USB-Stick und anschließend auf NAS verschieben
« Reply #11 on: May 31, 2025, 18:45:10 »
So funktioniert es, mit Einschränkungen*:

Code: [Select]
#!/bin/sh

SOURCEMP="mnt/e452bda1-7e77-4d61-aa2d-1ad61c27d313"
TARGETMP="mnt/a22b93627956a61ed127db92215c3cba"

case "$1" in
after)
svdrpsend.sh "MESG Aufnahme beendet, verschiebe auf den Server..." >/dev/null
SOURCEDIR="${2//\/data\//\/"$SOURCEMP"\/}"
TARGETDIR=`dirname "${2//\/data\//\/"$TARGETMP"\/}"`
mkdir -p "$TARGETDIR" >/dev/null
mv "$SOURCEDIR" "$TARGETDIR" >/dev/null
if [ $? != "0" ]; then
svdrpsend.sh "MESG FEHLER während des Verschiebens!" >/dev/null
else
svdrpsend.sh "MESG Verschieben der Aufnahme beendet." >/dev/null
fi
touch /data/tv/.update
;;
esac

Einschränkung: Wenn man wie oben, eine laufende Aufnahme abbricht und erneut programmiert, landet die 00002.ts direkt auf dem Server, weil das Verzeichnis dort bereits existiert. Das ist schlecht, weil der VDR dabei wieder abschmiert, weil er den Datenstrom nicht in Echtzeit wegschreiben kann. Irgendwas ist immer.
Hardware (show / hide)

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Aufnahmen auf USB-Stick und anschließend auf NAS verschieben
« Reply #12 on: May 31, 2025, 20:24:23 »
Mir ist gerade aufgefallen, je nachdem welche Version von mergerfs wir benutzen, dass die Mountoptionen "direct_io" und "use_ino" deprecated sind. Siehe https://trapexit.github.io/mergerfs/latest/config/deprecated_options/
Hardware (show / hide)

Offline Marcus

  • Expert Member
  • *****
  • Posts: 537
    • View Profile
Aufnahmen auf USB-Stick und anschließend auf NAS verschieben
« Reply #13 on: May 31, 2025, 23:35:31 »
Neue Version. Wenn man auf dem Stick VOR der Aufnahme bereits das Verzeichnis anlegt, landen auch die 00002.ts Dateien dort. Beim Verschieben darf man dann aber nicht den ganzen Ordner verschieben, sondern nur die Dateien darin. Denn der Ordner existiert ja im Ziel bereits. Den Ordner auf dem Stick muss man dann löschen, sonst gibt das Durcheinander. index, resume und info landen sonst auch irgendwann dort. Und den Index muss man neu erstellen lassen, damit die länge wieder passt. Warum das nötig ist, verstehe ich zwar nicht, aber man muss auch nicht alles verstehen.
Code: [Select]
#!/bin/sh

SOURCEMP="mnt/e452bda1-7e77-4d61-aa2d-1ad61c27d313"
TARGETMP="mnt/a22b93627956a61ed127db92215c3cba"
SOURCEDIR="${2//\/data\//\/"$SOURCEMP"\/}"
TARGETDIR="${2//\/data\//\/"$TARGETMP"\/}"
TARGETDIR2=`dirname "$TARGETDIR"`

touch /"$SOURCEMP"/tv/.move  >/dev/null

case "$1" in
before)
mkdir -p "$SOURCEDIR" >/dev/null #Verzeichnis erstellen, damit ggf. 00002.ts auf dem Stick landet
;;
after)
svdrpsend.sh "MESG Aufnahme beendet, verschiebe auf den Server..." >/dev/null
if [ -d "$TARGETDIR" ]; then
mv "$SOURCEDIR"/* "$TARGETDIR" >/dev/null
if [ $? != "0" ]; then
svdrpsend.sh "MESG FEHLER während des Verschiebens!" >/dev/null
else
svdrpsend.sh "MESG Verschieben der Aufnahme beendet." >/dev/null
fi
rm -df "$SOURCEDIR" >/dev/null
rm "$TARGETDIR"/index >/dev/null #index löschen, muss neu generiert werden, damit Länge passt.
vdr --genindex="$TARGETDIR" >/dev/null
else
mkdir -p "$TARGETDIR2" >/dev/null
mv "$SOURCEDIR" "$TARGETDIR2" >/dev/null
if [ $? != "0" ]; then
svdrpsend.sh "MESG FEHLER während des Verschiebens!" >/dev/null
else
svdrpsend.sh "MESG Verschieben der Aufnahme beendet." >/dev/null
fi
fi
touch /data/tv/.update
;;
esac
rm /"$SOURCEMP"/tv/.move  >/dev/null


EDIT: "$" vergessen
« Last Edit: May 31, 2025, 23:46:29 by Marcus »
Hardware (show / hide)

Offline clausmuus

  • Administrator
  • Expert Member
  • ********
  • Posts: 20843
    • View Profile
    • ClausMuus.de
Und das ganze hatte so schön übersichtlich begonnen  ;D
MLD 5.5 - Raspberry PI - 7" Touch TFT - Squeeze Play
MLD 6.5 - lirc yaUsbIR - OctopusNet - XFX GeForce 9300 mit Intel E3200 - 2GB RAM - 22TB HDD - Lian Li PC-C37B - Samsung LE40A559

[1] 2 >>> MLD-6.x / General / Aufnahmen auf USB-Stick und anschließend auf NAS verschieben
 



Users Online Users Online

0 Members and 1 Guest are viewing this topic.