Aufnahmen verschieben / Rückgabewert von cp bei "no space left"

  • Ich habe mir dieses Script zum Verschieben von Aufnahmen zusammengebastelt:



    Klappt auch ganz gut. Allerdings kann man Aufnahmen verlieren, wenn die Zielplatte fast voll ist, da nach
    cp -r "$REC" "$TARGET"
    trotz des Fehlers "no space left on device" der Rückgabewert $? == 0 ist. Fehler wird nicht erkannt -> Aufnahme nicht komplett kopiert -> Quellvideo gelöscht.
    Noch mehr Ideen? Vorschläge?

  • Zitat

    Original von clocker
    Ich habe mir dieses Script zum Verschieben von Aufnahmen zusammengebastelt:


    Warum nimmst Du ein cp, wenn Du doch verschieben (mv) willst?
    mv löscht erst, wenn alles vollständig übertragen ist, dann brauchst Du Dich darum nicht mehr kümmern.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Naja, eigentlich hast du recht. Ich habe es erst auch so machen wollen. Aber dann hängt die Aufnahme im schlimmsten Fall halb hier und halb da. Und dann ist wieder Handarbeit angesagt, weil man nachschauen muss, welche Teile wo sind.
    Außerdem will ich noch eine zweite Scriptvariante, die nur kopiert anstatt zu verschieben.

  • Zitat

    Original von clocker
    Naja, eigentlich hast du recht. Ich habe es erst auch so machen wollen. Aber dann hängt die Aufnahme im schlimmsten Fall halb hier und halb da.


    Nö. Ich meine, mv löscht erst dann, wenn es ALLES hat sauber rüberkopieren können. D.h. ist der Rückgabewert != 0, kannst Du das Zielverzeichnis sorgenfrei löschen, da es nicht geklappt hat. Das Original sollte dann aber noch zu 100% da sein.


    Ansonsten schau Dir mal rsync an, damit geht sowas auch sehr gut und kann vor allem auch auf abgebrochenen Teilen fix aufsetzen.

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • Dukannst vorher die Größe des Quell-Verzeichnis auslesen:


    RECSIZE=$[$(du -c $REC|tail -n1|awk '{print $1}')/1024]


    und den freien Platz auf dem Ziel-LW:


    FREE=$[$(df $TARGET|tail -n1|awk '{print $4}')/1024]


    Gruß


    Toxic

    Registrierter VDR-User #1275


    VDR-Server: Proxmox 7.1 - LXC Container - Debian 11.5 - eTobi-VDR 2.6.0

    DVB-Hardware: Digital Devices - Cine S2 V5.5 und V6

    VDR-Clients: FireTV Sticks 2 bis 4K Max und Kodi 19.4

    Einmal editiert, zuletzt von Toxic-Tonic ()

  • Ich werde um die Größenabfrage nicht herumkommen, danke dafür.


    knebb
    Wie ich gerade getestet habe, ist es mit dem Busybox-mv meines LinVDR sogar noch viel schlimmer, als ich befürchtete. Es löscht die Quelle gnadenlos, egal, wie viel kopiert wurde. Ich komme um den cp-Befehl nicht herum.

  • Zitat

    Original von clocker
    Es löscht die Quelle gnadenlos, egal, wie viel kopiert wurde.


    Ah. Gut, daß wir getestet haben ;D

    Glotze: yaVDR (ASRock Q1900M, 4GB RAM, DD Cine S2 V6.5, ZOTAC GT630 (Rev. 2)
    Server: HP ProLiant MicroServer G8, VMware ESXi 5.5 :P

  • So, danke. Die Lösung sieht jetzt so aus:



    Edit: Wenn man mehrere Aufnahmen gleichzeitig verschiebt, dürfte es aber wieder knallen. ?(


    Edit5:
    Kleiner Workaround:

    Code
    # Läuft ein anderer Kopiervorgang?
      while (pidof cp >/dev/null); do
        sleep 5
      done


    Das noch oben vor "Genug Platz?" reingesetzt, hält das Script so lange an, bis kein anderer Kopiervorgang mehr im Hintergrund läuft und legt dann erst los.
    So, jetzt reicht's aber. :D

  • Macht keinen Unterschied, da immer nur das Verzeichnis mit dem Aufnahmetitel angelegt wird. Beispiel:


    Du willst dir
    /mnt/server/Sendung/2006-03-01.20.10.50.99.rec
    auf den Rechner holen.


    Dann macht das Script daraus
    mkdir /video0/Sendung


    und danach
    cp -r /mnt/server/Sendung/2006-03-01.20.10.50.99.rec /video0/Sendung


    Also kein Problem.


    PS: Die Änderung, die ich gepostet habe (die mit "pidof cp") muss natürlich VOR dem Abfragen des freien Speichers rein. Also auch vor FREE= usw. Also war es noch nicht ganz korrekt.

  • Ich habe das Script noch etwas verfeinert und erweitert:



    Jetzt werden auch Symlinks in /video0 erstellt, wenn man die eigentliche Aufnahme nach /video1 verschieben lässt, so dass die Aufnahme korrekt im Aufzeichnungsmenü angezeigt wird.


    Das Script speichert man als /usr/bin/moverec und fügt an seine reccmds.conf beispielsweise folgende Zeilen an:


    Code
    Verschieben auf lokale Platte: /usr/bin/moverec /video1
    Verschieben auf Server: /usr/bin/moverec "/video0/Server"


    Der erste Parameter ist somit das Ziel.

  • Ich habe genau so ein skript gesucht um einfach meine Aufnahmen auf meine USB-Festplatte zu verschieben.
    Ich habe das Skript abgetippt.
    Nachdem es das skript lief wollte ich dann die ersten aufnahmen auf meine USB-Platte verschieben. Nachdem ich für die ersten 3 Aufnahmen das skript gestartet hatte hatte ich dann auch prompt 3 kopieraufträge in der am laufen.
    Wurde das mit dem überwachender ob schon kopierbefehle laufen schon überprüft ob es funktioniert?


    MfG. ata93606

  • Wenn ich dich richtig verstanden habe, willst du wissen, ob das Script wirklich überprüft, ob andere Kopiervorgänge laufen?


    Hier funktioniert es genau so.


    Dafür ist dieser Part zuständig:

    Code
    ...
    # Läuft noch ein anderer Kopiervorgang?
      while (pidof cp >/dev/null); do
        sleep 5
      done
    ...


    Das Script bleibt in der Schleife hängen, solange noch ein cp-Kommando läuft.

  • Tippfehler? Na, ich will doch hoffen, du hast das Script per Copy&Paste da oben rauskopiert. Speziell die Zeilen mit den Apostrophen und Akzenten sind nicht ohne. Immerhin sind ´ ` ' drei verschiedene Zeichen...

  • Der betroffene Rechner ist zu Hause und da habe ich nur Internet über modem und das auch nur in einem anderen Zimmer.
    Das heist mit Nottbook ins internet (XP), Skript auf usb-stick abspeichern und dann auf den LINVDR-Rechner einspielen. da isses fat leichter abgetippt.

Jetzt mitmachen!

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