Löschen von Aufnahmen und symlinks

  • Hi *,


    gibt es eine Möglichkeit zu verhindern, dass der VDR die Dateien in einem gelinkten Aufnahmeverzeichnis anstelle nur den Link löscht?

    Hintergrund:

    In meinem vdr.exec Script linke ich das .rec Verzeichnis neuer Aufnahmen in einen von mir mit verständlichem Namen angelegten Ordner unterhalb von "00-neue Aufnahmen" im Hauptaufnahmeverzeichnis, z.B.


    Die Idee ist, dass man immer auf einen Blick sieht, was neu aufgenommen wurde.

    Allerdings möchte ich nicht, dass beim Löschen der Aufnahme unter "neue Aufnahmen" die Aufnahme aus dem Originalordner entfernt wird, sondern nur der Ordner samt dem Link darunter unter "neue Aufnahmen".

    Ich habe das jetzt im "delete" Zweig des vdr.exec Scripts eingebaut, wo er erst den Link, dann das Verzeichnis der gelinkten Aufnahme entfernt, bevor der VDR zum eigentlichen Löschen kommt. Zu dem Zeitpunkt hat der VDR das .rec schon in .del umbenannt. Allerdings ist das irgendwie unschön, weil es aufgrund von Timingproblemen auch schief gehen könnte.

    Daher die Frage, ob man dem VDR abgewöhnen kann, dass er Links folgt.

    Wahlweise nehme ich auch gerne Tips zur allgemeinen Vorgehensweise, falls bei meiner einer oder mehrere Denkfehler enthalten sind, oder es einfach eine bessere Lösung gibt.


    Danke und ciao.

    Michael

  • Allerdings möchte ich nicht, dass beim Löschen der Aufnahme unter "neue Aufnahmen" die Aufnahme aus dem Originalordner entfernt wird, sondern nur der Ordner samt dem Link darunter unter "neue Aufnahmen".

    Das wird so einfach nicht funktionieren, da der VDR ja nicht weiß, das es ein Link ist.


    Die einzige Idee, die ich da jetzt spontan hätte, wäre mit einem Hardlink, anstelle eines Softlink zu arbeiten, dann wären das für den VDR zwei unterschiedliche Geschichten. Allerdings funktioniert das nicht für Ordner, sondern nur für Dateien. Da Du aber sowieso ein Script laufen lässt , könntest Du auch die Dateien etsprechend anstelle des Ordners hard linken. Getestet habe ich sowas aber auch noch nicht.


    Grüße

    kamel5

    VDR 2.6.6: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 39 Kernel 6.8 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Hm, warum weiß der VDR nicht, dass es ein symlink ist? Er *könnte* es wissen. Er löscht ja auch - zumindest wenn man nach den Meldungen geht - jede Datei und jeden Ordner einzeln. Beim Hardlink ist es nicht so einfach zu erkennen.

  • Hm, warum weiß der VDR nicht, dass es ein symlink ist?

    Naja, das hat bisher vielleicht keiner gebraucht, und ist deshalb nicht verfügbar.

    Beim Hardlink ist es nicht so einfach zu erkennen.

    Hardlink ist eigentlich ganz simpel. Da brauchst Du nichts weiter zu beachten.


    Für den VDR sind dann "00-neue_Aufnahmen/Doctor_Who_-_01x05_-_Der_dritte_Weltkrieg/2023-02-08.01.50.24-0.rec" und "Science_Fiction-Fantasy/Doctor_Who/01x05_-_Der_Dritte_Weltkrieg/2023-02-08.01.50.24-0.rec" zwei vollkommen verschiedene Verzeichnisse, die nur dadurch miteinander verbunden sind, das die darin liegenden Dateien quasie die selben sind, sie nehmen also nur einmal Platz weg. Beim Löschen wird dann "00-neue_Aufnahmen/Doctor_Who_-_01x05_-_Der_dritte_Weltkrieg/2023-02-08.01.50.24-0.rec" zu "00-neue_Aufnahmen/Doctor_Who_-_01x05_-_Der_dritte_Weltkrieg/2023-02-08.01.50.24-0.del" und wird gelöscht. Der andere Pfad bleibt davon unberührt.


    z.B.: ln vdr.conf vdr.conf.bak

    führt zu:

    -rw-r--r-- 2 root root 4621 17. Dez 12:01 vdr.conf

    -rw-r--r-- 2 root root 4621 17. Dez 12:01 vdr.conf.bak


    Du siehst vorne an der roten "2", das diese Datei zwar nur einmal existiert, aber zweimal im Dateisystem auftaucht...

    Wenn Du jetzt eine davon löschst, bleibt die andere unverändert übrig.

    rm vdr.conf.bak

    führt zu:

    -rw-r--r-- 1 root root 4621 17. Dez 12:01 vdr.conf


    Dadurch kann der VDR die Aufnahme in "00-neue_Aufnahmen" unabhängig von der anderen Aufnahme löschen, ohne das Du da irgendwas beachten musst.


    Grüße

    kamel5

    VDR 2.6.6: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 39 Kernel 6.8 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Ja, aber das Hardlinken müsste dann für alle Dateien einzeln passieren - und wenn später neue Dateien dazu kommen, z.B. durch einen Scraper oder auch die "resume" Dateien wären die im zweiten Verzeichnis nicht vorhanden.

  • Ich würde das hier pragmatisch sehen. Wenn die Aufnahme fertig ist und Dein Script läuft, kannst Du natürlich nur die Dateien, die dann vorhanden sind, verlinken. Die resume-Datei könnte man sowieso ignorieren, und alles Andere, was dann später dazu kommt, gibt es natürlich nur in dem entsprechenden Verzeichnis.

    Die Frage ist, was kommt denn später noch dazu. Soviel kann das ja nicht sein. Du könntest Dein Script z.B. mit einer kurzen Verzögerung laufen lassen.

    Und wenn es Sachen sind, die sowieso automatisch unabhängig von der Aufnahme im Hintergrund stattfinden, dann werden die auch autom. auf beide Verzeichnisse angewendet, nehmen dann aber auch 2 mal Platz weg.


    Grüße

    kamel5

    VDR 2.6.6: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 39 Kernel 6.8 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Was ich oben nicht erkennen konnte, liegen die beiden Verzeichnisse auf dem gleichen Dateisystem?

    Hardlink geht natürlich nur auf dem gleichen Dateisystem.


    Grüße

    kamel5

    VDR 2.6.6: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 39 Kernel 6.8 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Und wenn es Sachen sind, die sowieso automatisch unabhängig von der Aufnahme im Hintergrund stattfinden, dann werden die auch autom. auf beide Verzeichnisse angewendet, nehmen dann aber auch 2 mal Platz weg.


    Grüße

    kamel5

    So gesehen, stimmt das natürlich.

    Ich lasse das aber momentan trotzdem mal so:


    Solange der Löschthread nicht schneller ist als das Post-Delete-Script, sollte das trotzdem klappen.


    Danke für deine Anregungen trotzdem.


    Ciao.

    Michael.

  • Was ich oben nicht erkennen konnte, liegen die beiden Verzeichnisse auf dem gleichen Dateisystem?

    Hardlink geht natürlich nur auf dem gleichen Dateisystem.


    Grüße

    kamel5


    Ja, liegen auf demselben Filesystem, das dann per NFS überall hin gemountet wird.

  • Ich würde da entweder - wenn auf derselben Partition - mit mv anstelle Links arbeiten (nicht mehr neue Aufnahmeverzeichnisse dann in die normale Hierarchie verschieben) oder etwa das "neue Aufnahmen"-Verzeichnis nur "virtuell" als gemountete Linksammlung halten und follow-symlinks auf Mount-Ebene abstellen. cifs-mount kann das, evtl. auch die mount-option "-o nosymfollow" seit Kernel 5.10.

  • Ich würde da entweder - wenn auf derselben Partition - mit mv anstelle Links arbeiten (nicht mehr neue Aufnahmeverzeichnisse dann in die normale Hierarchie verschieben) oder etwa das "neue Aufnahmen"-Verzeichnis nur "virtuell" als gemountete Linksammlung halten und follow-symlinks auf Mount-Ebene abstellen. cifs-mount kann das, evtl. auch die mount-option "-o nosymfollow" seit Kernel 5.10.

    Den zweiten Vorschlag schaue ich mir mal an, das hört sich interessant an.

    Die erste Idee bedeutet, dass ich quasi das Löschen fake und stattdessen Verschieben spiele, wenn ich dich recht verstehe. Da müsste ich aber alles unter "neue Aufnahmen" aufnehmen lassen und es erst später verschieben. Das wäre dann aber nur einmal da und nicht mehr auch unter dem "normalen" Baum, was vor allem bei Serienfolgen verwirrend wäre. Außerdem hätte ich wie bei meinen Links ggf. ein Timing-Problem, wenn der VDR Löschthread schneller ist.

  • Bei der 2. Variante ist leider zwar das Erstellen eines Symlinks möglich, und auch die Verzeichnisanzeige, aber natürlich folgt ein Programm, das die Dateien lesen soll, auch nicht mehr dem Symlink. D.h. Abspielen ist unter diesem z.B. mit mount --bind eingebundenen Verzeichnis auch nicht möglich, mußte ich entdecken. In der Shell kommt die irreführende Meldung "too many levels of recursive symlinks".

    Da der VDR nicht über 2 Pfade (normal und mit nosymfollow) zugreifen mag, wäre das nur als alternativer Pfad für ein Shellscript o.a. denkbar, welches das Löschen übernimmt.

  • mach mal keinen bind mount, sondern einen normalen mount. Das müsste doch klappen, oder?

  • gibt es eine Möglichkeit zu verhindern, dass der VDR die Dateien in einem gelinkten Aufnahmeverzeichnis anstelle nur den Link löscht?

    Nicht dass ich wüsste.

    Dieses Verhalten ist beabsichtigt, sonst gäbe es Probleme mit den alten verlinkten Aufnahmen.

    Außerdem wäre es nicht möglich einfach ein Verzeichnis für Aufnahmen in das Videodir hinein zu linken.


    Solange der Löschthread nicht schneller ist als das Post-Delete-Script, sollte das trotzdem klappen.

    Der Löschthread läuft normalerweise viel später, wenn der VDR nichts zu tun hat.

    Ob das eine Kollision gänzlich ausschließt, bin ich aber überfragt.


    Pragmatische Lösung wäre das Script zum löschen der Links unter "Befehle" (rote Taste) unterzubringen.


    Du bist übrigens nicht der Einzige, der so eine Idee hatte.

    Eine Möglichkeit zur Anzeige der letzten 50 oder 100 Aufnahmen in umgekehrter chronologischer Reihenfolge fände auch ich klasse.

    Gruss
    SHF


  • Nicht dass ich wüsste.

    Dieses Verhalten ist beabsichtigt, sonst gäbe es Probleme mit den alten verlinkten Aufnahmen.

    Außerdem wäre es nicht möglich einfach ein Verzeichnis für Aufnahmen in das Videodir hinein zu linken.


    Du meinst, dass aus mehreren Video-Verzeichnissen video0-x alle Aufnahmen zusammengelinkt werden?

    Das wüsst man ja. Wenn der Link aus der eigenen Video-Root herauszeigt, ist es so einer, wenn er innerhalb der eigenen Hierarchie liegt, ist es kein solcher.

  • Hi,

    Dasy video0 bis x zusammenlinken gibt es nicht mehr. Ggf. noch per distributedvideodir Plugin wieder herstellbar. Das ist mir aber nicht gelungen bisher.

    MfG Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easy-vdr.de

  • Hi,

    Dasy video0 bis x zusammenlinken gibt es nicht mehr. Ggf. noch per distributedvideodir Plugin wieder herstellbar. Das ist mir aber nicht gelungen bisher.

    MfG Stefan

    Ja, das meinte SHF auch, als er von "den alten verlinkten Aufnahmen" schrub.

  • mach mal keinen bind mount, sondern einen normalen mount. Das müsste doch klappen, oder?

    Wenn Dein primäres Ziel, die Sicherheit der originalen Aufnahme ist, dann hilft Dir mount auch nicht weiter.

    mount stellt nur das originale Verzeichnis woanders bereit. Natürlich könnte man ein "mount -o ro" machen, ob da aber der VDR mit klar kommt, ohne Schreibrechte, eher nicht.


    Wenn Du mit einem geringen Risiko leben kannst, dann ist das mit dem symlink schon i.O.

    Wenn nicht, dann musst Du eine Kopie der originalen Aufnahme anlegen. Wenn Du genug Plattenplatz hast (als Cache) würde ich einfach eine normale Kopie machen, im anderen Falle mit hardlink, wie oben schon geschrieben oder auch mit "cp --reflink", wenn es das Dateisystem unterstützt, so weit ich das verstanden habe, kann das im Moment btrfs oder xfs.

    Zum testen mal "cp --reflink=always originaldatei kopie" eingeben. Wenn es eine Fehlermeldung gibt, kann es das Dateisystem nicht.

    Eine Möglichkeit zur Anzeige der letzten 50 oder 100 Aufnahmen in umgekehrter chronologischer Reihenfolge fände auch ich klasse.

    So was in der Art kann man mit dem Plugin "recsearch" machen. Man kann dort zwar im Moment nicht die Aufnahmen auf eine Menge x begrenzen, man kann sich aber die Aufnahmen der letzten x Tage anzeigen lassen. Vielleicht hilft das ja schon. Und eine Erweiterung auf x Aufnahmen ließe sich möglicherweise auch noch einbauen.


    Grüße

    kamel5

    VDR 2.6.6: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 39 Kernel 6.8 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

  • Wenn Dein primäres Ziel, die Sicherheit der originalen Aufnahme ist, dann hilft Dir mount auch nicht weiter.

    mount stellt nur das originale Verzeichnis woanders bereit. Natürlich könnte man ein "mount -o ro" machen, ob da aber der VDR mit klar kommt, ohne Schreibrechte, eher nicht.

    [...]

    Grüße

    kamel5

    Es ging um einen Mount, der ein follow symlinks verbietet.

  • OK, das hilft Dir doch aber nicht weiter. Wenn dem symlink nicht gefolgt wird, dann kannst Du doch mit dem Zielverzeichnis überhaupt nichts machen.

    ls -l 00-neue_Aufnahmen/* 00-neue_Aufnahmen/Doctor_Who_-_01x05_-_Der_dritte_Weltkrieg:

    total 4

    lrwxrwxrwx 1 vdr video 113 8. Feb 03:00 2023-02-08.01.50.24-0.rec -> /var/spool/video/video0/Science_Fiction-Fantasy/Doctor_Who/01x05_-_Der_Dritte_Weltkrieg/2023-02-08.01.50.24-0.rec

    Mal an diesem Beispiel, wenn dem symlink nicht gefolgt wird, kannst Du auch die Aufnahme unter "00-neue_Aufnahmen" nicht abspielen.


    Grüße

    kamel5

    VDR 2.6.6: ASUS Prime X470-PRO, Ryzen 7 5700X, 64GB, 6TB HD, GT1030, Fedora 39 Kernel 6.8 X86_64, Devicebonding 2 x 1 auf 2, TT6400, DVBSky S952 V3

    Git-Repo: gitlab.com/kamel5

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!