eSATA-Platte nach rsnapshot-Backup automatisch auswerfen?

Status
Für weitere Antworten geschlossen.

damada

Benutzer
Mitglied seit
22. Okt 2010
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich sichere meine DS-710+ automatisch per cronjob und dem als ipkg installierten rsnapshot auf eine 2TB eSATA-Platte. Die Anleitung hierzu habe ich hier gefunden:

http://www.synology-wiki.de/index.php/Rsnapshot

Die Platte hängt nicht permanent am NAS, sondern ich stöpsele sie nur hin und wieder an, wenn ich der Meinung bin, ein weiterer Snapshot wäre sinnvoll. Der Cronjob startet jeden Abend um 21:00, und wenn die Platte nicht dranhängt, gibt's halt einen Eintrag im rsnapshot-Log und es passiert sonst nix.

Soweit funktioniert das auch ganz einwandfrei. Nun wäre es aber noch toll, wenn die Platte nach dem Backup aus dem System entfernt werden könnte, so wie das die Eject-Option im DSM macht.

Aktuell kann ich die Platte in der Crontab nur Unmounten:

#minute hour mday month wday who command
0 21 * * * root /opt/bin/rsnapshot daily && sync && umount /volumeSATA/satashare

Problem ist aber, dass das eSATA-Lämpchen dann noch weiterhin leuchtet, d.h. es ist schwer zu sagen, ob das Backup fertig ist!

Frage daher: wie lautet denn der zugehörige Befehl (nicht die GUI-Option!), um eSATA-Laufwerke komplett aus dem System zu entfernen, sodass ich sie sicher ausschalten kann?

Vielen Dank im Voraus,
viele Grüße,

Daniel
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Du suchst wahrscheinlich eher ein Tool, was dir eine LED ausmacht oder so. Schau mal ins Wiki, da gibt es Steuersequenzen für die LEDs.

Itari
 

Merthos

Benutzer
Mitglied seit
01. Mai 2010
Beiträge
2.709
Punkte für Reaktionen
2
Punkte
84
Rich (BBCode):
synosata -umount sdg1
bzw. das jeweilige device. Allerdings ist nicht gesagt, dass die LED dann auch ausgeht.
 

damada

Benutzer
Mitglied seit
22. Okt 2010
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Hi,

synosata -umount sdg1
das tut mMn auch nichts anderes als
umount /volumeSATA/satashare
oder? Jedenfalls schalten beide Befehle die LED nicht aus, sodass man nicht erkennen kann, ob die Platte noch im System ist oder nicht.

Was ich also suche, ist exakt das Shellkommando, welches der GUI-Option "Auswerfen" im Menü "externe Datenträger" entspricht. Die LED-Sequenzen möchte ich eigentlich eher nicht anfassen, das ist mir dann schon zuviel Gepfusche am System :)

Bin für jeden sachdienlichen Hinweis dankbar!
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Was ich also suche, ist exakt das Shellkommando, welches der GUI-Option "Auswerfen" im Menü "externe Datenträger" entspricht.

Ich kenne keines. Was ich beim Dumpen der cgi-Files des DSM oft sehe, sind Shell-Skript-Fragmente ... also es könnte sein, dass auch in dem cgi-File für das Abhängen der SATA-Platte eine separate LED-Steuersequenz abgesetzt wird. Da man nur mit viel Mühe, an die Logik herankommt, ist es wahrscheinlich am besten, du fragst direkt bei den Synology-Entwicklern nach.

Itari
 

QTip

Super-Moderator
Teammitglied
Mitglied seit
04. Sep 2008
Beiträge
2.341
Punkte für Reaktionen
14
Punkte
84
Hi,

das tut mMn auch nichts anderes als
oder? Jedenfalls schalten beide Befehle die LED nicht aus, sodass man nicht erkennen kann, ob die Platte noch im System ist oder nicht.

Was ich also suche, ist exakt das Shellkommando, welches der GUI-Option "Auswerfen" im Menü "externe Datenträger" entspricht. Die LED-Sequenzen möchte ich eigentlich eher nicht anfassen, das ist mir dann schon zuviel Gepfusche am System :)

Bin für jeden sachdienlichen Hinweis dankbar!
Hi,

ich habe mal ein wenig geforscht und eine funktionierende Lösung gefunden. Es wird das Verfahren vom DSM verwendet, mit dem einzigen Unterschied, dass man es nun auch in einer Shell bzw. durch ein Script steuern kann. Es wird eine funktionierende HTTPS-Verbindung vorausgesetzt. Möchte man es über eine normale HTTP-Verbindung benutzen, dann müssen alle https gegen http ersetzt werden.

Es müssen nur die Variablen DSIP und PASS angepasst werden.
Benutzung:
<script> usb oder sata - entfernt alle USB oder eSATA Laufwerke
<script> usbshare(x) oder satashare - entfernt das Laufwerk mit dem entsprechendem Freigabenamen (wie unter Gemeinsamer Ordner angegeben)
<script> list - eine Liste aller zur Zeit eingehangenen ext. Laufwerke mit Beschreibung Freigabename und Devicename

Und wie immer; Alles auf eigene Kappe!!!
Rich (BBCode):
#!/bin/sh
#
# eject external devices
# (c) 2011 QTip
#
DSIP="IP-oder-adresse-der-DS"
USER="admin"
PASS="dein-admin-password"
RESULT="/tmp/externaldevices"
#----------------------------------------
DEVICE=""
DEVICENAME=""
DISPLAYNAME=""
SHAREDFOLDER=""
EJECTTYPE=""
STATUS=""

case $1 in
    usb*|sata*)
    case $1 in
        usb*)
        EJECTTYPE="eject_usb=true"
        ;;
        sata*)
        EJECTTYPE="eject_esata=true"
        ;;
    esac
    /usr/syno/bin/wget --no-check-certificate --cookies=on --keep-session-cookies --save-cookies=cookie -q -O $RESULT "https://${DSIP}:5001/webman/modules/login.cgi?username=${USER}&passwd=${PASS}"
    /usr/syno/bin/wget --no-check-certificate --cookies=on --keep-session-cookies --load-cookies=cookie -q -O $RESULT "https://${DSIP}:5001/webman/modules/ControlPanel/modules/externaldevices.cgi?action=load&load_device=true"
    DEVICE=`/bin/cat $RESULT | /bin/grep -B8 "$1" | /bin/grep "device_name" | /usr/bin/cut -d "\"" -f4 | /bin/sed 's/^ *//g`
    if [ -z "$DEVICE" ] ; then echo "no device(s) found!"; exit 0; fi
    for DEV in ${DEVICE} ; do
        echo -n "ejecting device $DEV..."
        /usr/syno/bin/wget --no-check-certificate --cookies=on --keep-session-cookies --load-cookies=cookie -q -O $RESULT "https://${DSIP}:5001/webman/modules/ControlPanel/modules/externaldevices.cgi?action=apply&device_name=${DEV}&${EJECTTYPE}"
        STATUS=`/bin/cat $RESULT | /bin/grep "success" | /usr/bin/cut -d "\"" -f2 | /bin/sed 's/^ *//g`
        echo "$STATUS"
        sleep 1
    done
    rm -f $RESULT
    exit 0
    ;;
    list)
    /usr/syno/bin/wget --no-check-certificate --cookies=on --keep-session-cookies --save-cookies=cookie -q -O $RESULT "https://${DSIP}:5001/webman/modules/login.cgi?username=${USER}&passwd=${PASS}"
    /usr/syno/bin/wget --no-check-certificate --cookies=on --keep-session-cookies --load-cookies=cookie -q -O $RESULT "https://${DSIP}:5001/webman/modules/ControlPanel/modules/externaldevices.cgi?action=load&load_device=true"
    SHAREDFOLDER=`/bin/cat $RESULT | /bin/grep "sharedfolder" | /usr/bin/cut -d "\"" -f4 | /bin/sed 's/^ *//g`
    DEVICENAME=`/bin/cat $RESULT | /bin/grep "device_name" | /usr/bin/cut -d "\"" -f4 | /bin/sed 's/^ *//g`
    if [ -z "$DEVICENAME" ] ; then echo "no device(s) found!"; exit 0; fi
    echo "List of available external devices:"
    /usr/bin/printf "%s \t\t\t %s \t %s\n" "description" "sharename" "device"
    /usr/bin/printf "%s\n" "-------------------------------------------------------"
    for SHARENAME in ${SHAREDFOLDER} ; do
        DISPLAYNAME=`/bin/cat $RESULT | /bin/grep -B9 "${SHARENAME}" | /bin/grep "device_display_name" | /usr/bin/cut -d "\"" -f4 | /bin/sed 's/^ *//g`
        DEVICENAME=`/bin/cat $RESULT | /bin/grep -B8 "${SHARENAME}" | /bin/grep "device_name" | /usr/bin/cut -d "\"" -f4 | /bin/sed 's/^ *//g`
        if [ "$SHARENAME" = "satashare" ] ; then
             /usr/bin/printf "\n%s \t %s \t %s\n" "$DISPLAYNAME" "$SHARENAME" "$DEVICENAME"
        else
             /usr/bin/printf "%s \t\t %s \t %s\n" "$DISPLAYNAME" "$SHARENAME" "$DEVICENAME"
        fi
    done
    rm -f $RESULT
    exit 0
    ;;
    *)
    echo "DiskStation - Eject external devices"
    /usr/bin/printf "\nUsage: $0 [OPTION]...\n\n"
    /usr/bin/printf "\t%s\t\t%s\n" "'usb' or 'sata'" "eject all drives, depend on the given keyword"
    /usr/bin/printf "\t%s\t\t%s\n" "'usbhare(x)'" "eject usb-drive with given sharename/-number"
    /usr/bin/printf "\t%s\t\t%s\n" "'satashare'" "eject eSata-drive with given sharename"
    /usr/bin/printf "\t%s\t\t\t%s\n" "'list'" "list information about all external drives"
    exit 0
    ;;
esac
 

damada

Benutzer
Mitglied seit
22. Okt 2010
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Super, vielen lieben Dank!

Scheint einwandfrei zu funktionieren, und die Möglichkeit, es remote einzusetzen, gefällt mir natürlich auch!

Für's erste reicht es mir allerdings, das Skript mit der Option sata im Anschluss an das rsnapshot-Kommando und dem sync in der crontab aufzurufen. Ist zwar etwas Overkill, aber was soll's :)

Wenn der Synology-Support mir zusätlich noch ein Einzeilerlösung präsentiert, werd ich's hier vermerken!

Vielen Dank nochmal,
viele Grüße,

Daniel
 

damada

Benutzer
Mitglied seit
22. Okt 2010
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich habe Antwort vom Synology-Support :)

Dear Daniel,

Thank you for your enquiry.

First of all we don't officially support third party software "opt", then about the Ejecting the external device after backup using eject command set on crontab is not supported either at this stage.

We only allow user to manually eject the device on the External Device page located on the DS management UI page.

In this case, could you please kindly fill this request as an feature request form to allow the PM and developer to analysis and evaluate the feature to see if they could allow user to have an option to automatically eject the External Device after backup in the future release.
Feature Request form:
http://www.synology.com/support/inquiry_form.php?lang=enu&type=1

However, ejecting command:
echo 1 > /sys/block/sd(x)/device/delete

*sd(x) means your external HDD, if it is sdk please type in sdk, if it is sdg then type in sdg.

But we are unable to provide support to set this request up as it is not officially supported.

Hope this helps.

Best Regards
Jim Cheng

In meinem Fall funktioniert das wunderbar, d.h. die LED geht tatsächlich aus, wenn ich das Backup über einen Cronjob folgendermaßen anstoße:
Rich (BBCode):
#minute hour mday month wday who command
0 21 * * * root /opt/bin/rsnapshot daily && sync && umount /volumeSATA/satashare && echo 1 > /sys/block/sdg/device/delete

Wenn ich die eSATA-Platte dann aus- und wieder anschalte, leuchtet auch die LED wieder, d.h. das ganze frickelt nichts im System kaputt.

Ein dreifaches Hoch auf den kompetenten Support und dieses großartige Produkt!
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Rich (BBCode):
echo 1 > /sys/block/sdg/device/delete

Wenn ich die eSATA-Platte dann aus- und wieder anschalte, leuchtet auch die LED wieder, d.h. das ganze frickelt nichts im System kaputt.

Ja, so ungefähr hatte ich das mit einer Steuersequenz gemeint ;) Schön, dass der Support dir da weiter helfen konnte.

Itari
 

damada

Benutzer
Mitglied seit
22. Okt 2010
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Hallo nochmal,

meine bisherige Lösung hatte noch eine kleine Schwachstelle, nämlich dass rsnapshot in der Standardkonfiguration das Zielverzeichnis anlegt, sofern es nicht existiert. Das hat dazu geführt, dass unterhalb des Mountpoints für die eSATA-Platte eine Verzeichnishierarchie angelegt wurde, als sie nicht angeschlossen war und der cronjob loslegte.

Gelöst habe ich das nun so, dass ich per cronjob ein Skript aufrufe, das prüft, ob die eSATA-Platte überhaupt gemountet ist. Nur dann wird auch rsnapshot aufgerufen.

Die entsprechende Zeile in /etc/crontab sieht also nun so aus:
Rich (BBCode):
0	22	*	*	*	root	sh /root/runBackup.sh

Und hier das Skript:
Rich (BBCode):
#!/opt/bin/bash
volume="/volumeSATA/satashare";

## v1:
if mount | grep "on ${volume} type" > /dev/null
then
  echo "** eSATA mounted, proceeding!"
  /opt/bin/rsnapshot daily
  sync
  umount /volumeSATA/satashare
  echo 1 > /sys/block/sdg/device/delete
else
  echo "** eSATA not mounted, nothing to do!"
fi

###v2:
#mount | grep "on ${volume} type" > /dev/null
#if [ $? -eq 0 ]
#then
#  ...
#else
#  ...
#fi

Viele Grüße,
Daniel
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Gelöst habe ich das nun so, dass ich per cronjob ein Skript aufrufe, das prüft, ob die eSATA-Platte überhaupt gemountet ist. Nur dann wird auch rsnapshot aufgerufen.
Schau dir mal die rsnapshot.conf an. Dort gibt es den Parameter der afaik create root (oder so heisst) ist der auf no bzw false gesetzt, dann wird das Rootverzeichnis für das Backup ned angelegt, wenn es nicht vorhanden ist. rsnapshot wirft dann also einen Fehler. Diese Parameter ist extra für externe Platten gemacht worden
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Gerade nachgeguckt, der Parameter sollte no_create_root heissen und in dem Fall bei true resp 1 das Verzeichnis nicht anlegen
 

damada

Benutzer
Mitglied seit
22. Okt 2010
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Hallo,

das stimmt schon, rsnapshot lässt sich durchaus korrekt konfigurieren. Allerdings hat mein Ansatz den Vorteil, dass im Anschluss an den Backupversuch auch nicht mehr versucht wird, das Laufwerk auszuwerfen, obwohl es gar nicht im System hängt.

Ich hatte nun mehrfach das Problem, dass sich die DS nicht mehr sauber runterfahren ließ (was üblicherweise per cronjob um 23:30 passiert). Es half nur noch, die DS "hart" auszuschalten, was beim nächsten Einschalten (geht dann nur manuell) erstmal einen Dateisystemcheck zur Folge hat...

Seit ich umgestellt habe, kann ich dieses Verhalten nicht mehr beobachten, d.h. die DS fährt sauber runter und schaltet sich deshalb auch wieder automatisch am nächsten Morgen ein.

Trotzdem vielen lieben Dank für Euer Engagement und die Fachkompetenz hier! Das hebt die Synology-Produkte massiv von anderen ab :)
 

damada

Benutzer
Mitglied seit
22. Okt 2010
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Hallo,

meine Probleme mit nicht mehr möglichem sauberen Shutdown der DS hängen offenbar nicht mit rsnapshot zusammen...

Vielmehr scheint es damit zusammenzuhängen, dass ein großer Dateitransfer z.B. mit rsync auf die DS abgebrochen wird. Genauso auch mit Unison, welches ja letztlich auch nur ein elegantes Zwei-Wege-rsync ist.

Jedenfalls kann ich das Problem triggern, wenn ich z.B. ein VirtualBox-Image (.vdi) auf die DS schiebe, und mittendrin abbreche. Bzw. es scheint schon auszureichen, überhaupt ein vdi kopieren zu wollen bzw. kopiert zu haben... Strange...
 

EdeEdammer

Benutzer
Mitglied seit
25. Jan 2011
Beiträge
3
Punkte für Reaktionen
0
Punkte
0
Backup Verhinderung bei ausgehängtem Wechseldatenträger

Hallo!

Ist "no_create_root 1" der rsnapshot.conf eine Alternative zu Deinem Script?
 

damada

Benutzer
Mitglied seit
22. Okt 2010
Beiträge
22
Punkte für Reaktionen
0
Punkte
0
Ja, mit der Option in der rsnapshot.conf kann sichergestellt werden, dass kein Backup erfolgt, wenn nicht der komplette Zielpfad bereits existiert.

Aber vielleicht braucht man ja mal in einem anderen Zusammenhang ein Skript, dass prüft, ob ein Medium gemountet ist, und dann kann man sich bedienen.

Viele Grüße,
Daniel
 

cbleek

Benutzer
Mitglied seit
26. Jan 2014
Beiträge
31
Punkte für Reaktionen
0
Punkte
0
Ich probiere mich mit meiner DS112 auch gerade an einem getimten Auswurf meiner USB-Platte nach Backup. Dafür will ich die vom Support genannte Scriptzeile
echo 1 > /sys/block/sd(x)/device/delete
direkt in den Aufgabenplaner schreiben. Hat bislang aber nicht geklappt...

Dann bin ich mit WinSCP mal in die Root-Struktur gegangen und habe weder sdg noch sdk gefunden.
*sd(x) means your external HDD, if it is sdk please type in sdk, if it is sdg then type in sdg.
Es gibt nur sda und sdq!?
Welche ist denn die externe USB-Platte? Nicht, dass ich da die interne Platte auf einmal entferne und nicht wiederkriege!?!
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.155
Punkte für Reaktionen
402
Punkte
393
Hallo,
sda ist die interne und sdq die externe. Kontrollieren kannst Du es anhand der Ausgabe von mount.

Gruß Götz
 

cbleek

Benutzer
Mitglied seit
26. Jan 2014
Beiträge
31
Punkte für Reaktionen
0
Punkte
0
Hallo,
sda ist die interne und sdq die externe. Kontrollieren kannst Du es anhand der Ausgabe von mount.

Gruß Götz

Ja, jetzt hat es geklappt!
Aber ich bekomme trotzdem die Meldung: "External Device USB Disk 1 was not ejected properly"
Genau diese Fehlermeldung wollte ich mit dem Script verhindern...
Muss man den Datenträger vorher unmounten? Und wenn ja wie?
Mit Scriptsprache kenne ich mich leider nicht aus.
Bisher steht in der ersten Befehlszeile im Aufgabenplaner nur: "echo 1 > /sys/block/sdq/device/delete"
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.155
Punkte für Reaktionen
402
Punkte
393
Hallo,
natürlich muß die Platte per umount aus dem System gelöst werden
umount /dev/sdq
oder
umount <MOUNTPUNKT>
der mount-Punkt wird Dir ja bei mount angezeigt, sollte in etwa /volume1/usbshare1 oder so ähnlich heißen.

Gruß Götz
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat