Recent Posts

41
Ja, das ist ganz normal bei mir. Das artet immer aus. Arzt sagt das sei unheilbar.  ;D
Es wird aber noch besser. Wenn die Aufnahmen größer werden, stürzt der VDR beim Verschieben irgendwann ab. Wahrscheinlich wartet er auf das Beenden des Script und wenn es ihm zu lange dauert, macht er einen emergencyexit.
42
Und das ganze hatte so schön übersichtlich begonnen  ;D
43
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
44
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/
45
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.
46
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.
47
Hi,
ich habe eine Vermutung wodran das Problem liegen könnte. Falls ich richtig liege müsste das Morgen wieder funktionieren.
Aktuell gibt es gerade einen Fehler mit dem Build, den ich heute Abend erst beheben muss.
48
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.
49
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.
50
Danke für den Tip. Werde das so übernehmen und testen.