USB mount und export

Meza100

Benutzer
Mitglied seit
29. Mrz 2021
Beiträge
72
Punkte für Reaktionen
5
Punkte
8
Ich habe dasselbe Script wie von the-masterplan vorhin beschrieben wurde. Anfangs gings nicht und seit einer gewissen Zeit funktioniert es ohne Probleme. Meine Vermutung war, dass die Platte viel zu lange "aus" war. Aber konnte das beim Testen auch nicht nachvollziehen. Hatte mit dem Script auch 2 Platten dran.

Auf jeden Fall funktioniert das jetzt ohne Probleme mit beiden Platten im Wechsel.
 

MasterG87

Benutzer
Mitglied seit
08. Mrz 2021
Beiträge
5
Punkte für Reaktionen
0
Punkte
1
Also ich habe beide Skripte probiert. Die Zeile
for scsi_host in /sys/class/scsi_host/host*/scan; do echo "- - -" > ${scsi_host}; done

scheint eleganter zu sein, da sie zu keinem fehlerhaften Auswurf der Festplatte führt.

Das andere Skript von the-masterplan mit unbind und bind führt nämlich zu einem fehlerhaften Auswurf der Festplatte, falls diese wieder erwarten doch noch nicht ausgeworfen wurde.
 

Meza100

Benutzer
Mitglied seit
29. Mrz 2021
Beiträge
72
Punkte für Reaktionen
5
Punkte
8
Das andere Skript von the-masterplan mit unbind und bind führt nämlich zu einem fehlerhaften Auswurf der Festplatte, falls diese wieder erwarten doch noch nicht ausgeworfen wurde.
Hi @MasterG87 ,

genau diese Probleme habe ich momentan... :( Wenn ich das Script von the-masterplan durch das andere Script tauschen würde, wie müsste dies aussehen?

Bisheriges Script:
echo "3-1" > /sys/bus/usb/drivers/usb/unbind
sleep 5
echo "3-1" > /sys/bus/usb/drivers/usb/bind

Neues Script:
for scsi_host in /sys/class/scsi_host/host*/scan; do echo "- - -" > ${scsi_host}; done

müsste ich bei "echo "---"" bei den drei Bindestrichen die "3-1" eintragen - quasi so:
for scsi_host in /sys/class/scsi_host/host*/scan; do echo "3-1" > ${scsi_host}; done

Danke und Grüße,
Stefan
 

MasterG87

Benutzer
Mitglied seit
08. Mrz 2021
Beiträge
5
Punkte für Reaktionen
0
Punkte
1
Hallo Stefan,

ich musste leider auf die Lösung von the-masterplan zurück wechseln. Das neue Skript hat dann bei mir doch nicht konstant funktioniert. Jetzt muss ich leider mit den Nachteilen leben. Tut mir Leid für die Verwirrung.

Einmalig funktioniert hat es genauso:
for scsi_host in /sys/class/scsi_host/host*/scan; do echo "- - -" > ${scsi_host}; done

Man muss nichts einfügen. Er sucht sich automatisch die richtigen Zahlen. Dauert danach paar Sekunden und die Festplatte ist gemountet. Falls das bei dir konstant funktioniert, sicher des bessere Weg.

Gruß.
 
Zuletzt bearbeitet von einem Moderator:

Meza100

Benutzer
Mitglied seit
29. Mrz 2021
Beiträge
72
Punkte für Reaktionen
5
Punkte
8
Hi @MasterG87

schade, dass es nicht so funktioniert. Ich habe auch jedes Mal, sobald ich die Platten wechsle, am nächsten Tag eine Fehlermeldung. Ich hätte dies gerne auch gelöst...

Hat da hierfür jemand eine Idee?

Danke und Grüße,
Stefan
 

raffnix84

Benutzer
Mitglied seit
18. Nov 2012
Beiträge
38
Punkte für Reaktionen
2
Punkte
14
versucht mal das hier:

Bash:
#!/bin/ash
#  get list of usb devices
lsusb

# get info of your device
/usr/syno/bin/synousbdisk -info usb1

# unmount && unbind
/usr/syno/bin/synousbdisk -umount usb1 && \
echo "2-1" > /sys/bus/usb/drivers/usb/unbind && sleep 10

# bind & automount
echo "2-1" > /sys/bus/usb/drivers/usb/bind
 

raffnix84

Benutzer
Mitglied seit
18. Nov 2012
Beiträge
38
Punkte für Reaktionen
2
Punkte
14
Das ist mein Script das bei mir recht gut funktioniert
mit lsusb bekommt ihr die "DEVICE_ADDR" raus und "DEVICE_NAME" ist bei mir immer usb1... keine Ahnung warum obwohl laut lsusb es bei mir usb2 sein sollte... aber hey, es läuft!

Ich habe mir noch eingebaut da solange das backup läuft, also "TASK_NAME=databackup" aktiv ist, er mit dem auswerfen wartet. Ich denke das ist auch ganz nett und kann jeder anpassen wie er will. Das Skript soll keinen schönheitspreis gewinnen sondern einfach zu verstehe sein darum manchmal code nicht ganz optimal verschachtelt.

Vor dem Mount erfolgt immer ein unmount (sofern Laufwerk gemountet), das ist so gewollt und soll verhindern das "halb gemountetes Gedöns" den mount verhindern.

Bash:
#!/bin/ash

#Check Name
# lsusb
# /usr/syno/bin/synousbdisk -info usb1

#Time Backup Task Name
TASK_NAME=databackup
DEVICE_NAME="usb1"
DEVICE_ADDR="2-1"

# Check parameter
if [[ "$#" -ne "1" ]]; then
  echo $# wrong parameter count. Correct use:
  echo mount_usb.sh MODE
  echo Valid modes are: mount, umount
  exit 1;
fi

MODE=$1
IS_MOUNTED=$(/usr/syno/bin/synousbdisk -info "$DEVICE_NAME" | grep -w 'Share Name:' | awk '{print $3}'  | tr -d '\r\n' | sed 's/ *$//g')

if [[ "$MODE" != "mount" && "$MODE" != "umount" ]]; then
  echo wrong parameter.
  exit 2;
fi

if [[ "$MODE" == "umount" ]]; then
  if [ -f /usr/syno/bin/timebkp ]; then
    # Sleep as long as time backup is running
    while [ "$( /usr/syno/bin/timebkp list_version --task=$TASK_NAME | grep processing )" ]
    do
      sleep 600
      done
  fi
fi

if [ ! -z "$IS_MOUNTED" ] && [[ "$MODE" == "umount" || "$MODE" == "mount" ]]; then
  sync && \
  /usr/syno/bin/synousbdisk -umount "$DEVICE_NAME" && \
  echo "$DEVICE_ADDR" > /sys/bus/usb/drivers/usb/unbind
  sleep 1
fi

if [[ "$MODE" == "mount" ]]; then
  echo "$DEVICE_ADDR" > /sys/bus/usb/drivers/usb/bind
fi
exit 0;
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Seb3K

HerrFrodo1

Benutzer
Mitglied seit
27. Mrz 2023
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Hallo raffnix84,

leider funktioniert Dein Skript nicht mit meiner 923+
Unter lsusb zeigt er USB1 mit 1-1 an und unter USB2 dann 2-3.
Eingegeben in Dein Skript, kommt immer nur:
0 wrong parameter count. Correct use:
mount_usb.sh MODE
Valid modes are: mount, umount

Das hinten einsteckte Toshiba USB Laufwerk bleibt immer offline.

Hast Du einen Tipp für mich?
 
Zuletzt bearbeitet von einem Moderator:

raffnix84

Benutzer
Mitglied seit
18. Nov 2012
Beiträge
38
Punkte für Reaktionen
2
Punkte
14
Ja ganz einfach, du musst dem auch sagen was der machen soll,

mount_usb.sh MODE <== das ist der Parameter (Valid modes are: mount, umount)

somit musst du
sh /abcd/mount_usb.sh mount
oder
sh /abcd/mount_usb.sh umount
ausführen

Gruss
 
Zuletzt bearbeitet von einem Moderator:

HerrFrodo1

Benutzer
Mitglied seit
27. Mrz 2023
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
@raffnix84
Ich verstehe leider nicht wie ich es korrekt einbinden kann - bin noch zu schlecht :-(

Das Mode der Parameter ist habe ich gewusst, aber ich weiß nicht was ich im Script anders eintragen muss.

Zuerst übergibst Du den Variablen ihren Wert:
#Time Backup Task Name
TASK_NAME=databackup
DEVICE_NAME="usb1" <-- erstaunlich, aber gemountet ist der vordere USB auch USB1
DEVICE_ADDR="2-1" <---- hier habe ich "2-3"

Dann möchtest Du bestimmt checken ob die Platte mount oder umount ist - nur wie verstehe ich nicht:
# Check parameter
if [[ "$#" -ne "1" ]]; then
echo $# wrong parameter count. Correct use:
echo mount_usb.sh MODE
echo Valid modes are: mount, umount
exit 1;
fi


Grüsse!
 

raffnix84

Benutzer
Mitglied seit
18. Nov 2012
Beiträge
38
Punkte für Reaktionen
2
Punkte
14
Die Frage ist was du mit einbinden meinst?

Die #Check parameter prüft nur die Anzahl der Parameter und wirft einen Fehler wenn die Anzahl der Parameter ungleich 1 (also mehr oder weniger als 1) ist.

Wie wäre es wenn du einfach mal überlegst was du machen möchtest und dann die Fragen möglichst präzise ausformulierst.

Ich wüsste jetzt nicht wie dich "Dann möchtest Du bestimmt checken ob die Platte mount oder umount ist - nur wie verstehe ich nicht:" weiter bringt aber nun gut.


Bash:
# hier passiert der check ob die richtigen parameter (mount oder umount) gesetzt sind, wenn nicht Fehler!
if [[ "$MODE" != "mount" && "$MODE" != "umount" ]]; then
  echo wrong parameter.
  exit 2;
fi

# das wird ausgeführt wenn "umount" als parameter übergeben wird, hier wird gewartet bis der prozess 
# timebkp abgeschlossen wird oder nicht mehr läuft.
if [[ "$MODE" == "umount" ]]; then
  if [ -f /usr/syno/bin/timebkp ]; then
    # Sleep as long as time backup is running
    while [ "$( /usr/syno/bin/timebkp list_version --task=$TASK_NAME | grep processing )" ]
    do
      sleep 600
      done
  fi
fi

# wenn hdd gemountet wird hier erstmal immer unmounted
if [ ! -z "$IS_MOUNTED" ] && [[ "$MODE" == "umount" || "$MODE" == "mount" ]]; then
  sync && \
  /usr/syno/bin/synousbdisk -umount "$DEVICE_NAME" && \
  echo "$DEVICE_ADDR" > /sys/bus/usb/drivers/usb/unbind
  sleep 1
fi

# wenn gemountet werden soll (parameter: "mount") dann wird hier die hdd gemountet, dauert 
# manchmal eine weile bis es im DSM File Explorer angezeigt wird
if [[ "$MODE" == "mount" ]]; then
  echo "$DEVICE_ADDR" > /sys/bus/usb/drivers/usb/bind
fi

hoffentlich hilft das,

Viele Grüsse
 
Zuletzt bearbeitet von einem Moderator:

HerrFrodo1

Benutzer
Mitglied seit
27. Mrz 2023
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
@raffnix84
Vielen Dank für Deine Antwort und die Zeit die Du für mich aufwendest!
Ich stehe auf dem Schlauch....

Ich präzisiere mein Vorgehen:
Ich möchte mit HyperBackup ein Backup der Syno auf eine an der Syno angeschlossene USBHDD abspeichern.
Aus Gründen der Sicherheit, lasse ich die USBHDD nach der Sicherung auswerfen.
Ich erstelle im Aufgabenplaner eine Aufgabe mit root als Benutzer.
Die Aufgabe soll alle 2 Tage (weil 2 USBHDD im Wechsel), 15min vor der Datensicherung ausgeführt werden,
damit die USBHDD wieder gemountet wird und somit von HyperBackup erkannt wird.
Ich kopiere also Dein Script unter Befehl ausführen hinein und ändere folgendes:
TASK_NAME=databackup (habe ich auch so benannt :)
DEVICE_NAME="usb1" <-- erstaunlich, aber gemountet ist der vordere USB auch USB1
DEVICE_ADDR="2-1" <---- hier habe ich "2-3"

Und was kommt danach? Was müsste ich noch verändern?
Das Script soll ja immer zum ausgeführten Zeitpunkt die USBHDD mounten.

Wenn ich das Script so ausführe, dann wird die USBHDD nicht gemountet.
Im Logfile steht dann drin:
0 wrong parameter count. Correct use:
mount_usb.sh MODE
Valid modes are: mount, umount

Muss ich da reinschreiben, dass er mounten soll? --> mount_usb.sh mount?

Also ganz blöd gefragt, was muss ich tun, damit das Script die Aufgabe erfüllt und meine USBHDD mountet?

Besten Dank und viele Grüße!
 

raffnix84

Benutzer
Mitglied seit
18. Nov 2012
Beiträge
38
Punkte für Reaktionen
2
Punkte
14
Ahhh, ja genau so habe ich es auch:

Mount
1680155261618.png

Unmount
1680155290077.png



Du kannst die Funktionsweise des scripts testen indem du auf der konsole (SSH) folgende Befehle absetzt:
Bash:
#mount (daurt ein wenig bis in DSM FIle Explorer sichtbar, geduld)
bash /pfad/zum/script/mount_usb.sh mount

#unmount
bash /pfad/zum/script/mount_usb.sh umount


Gruss
 
Zuletzt bearbeitet:
  • Like
Reaktionen: HerrFrodo1

HerrFrodo1

Benutzer
Mitglied seit
27. Mrz 2023
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Aaaaaaahaaaaaa!!!!
Jetzt verstehe ich!
Du hast Dir das Script im rootverzeichnis als ausführbares Programm abgelegt…..
Dann startest Du das Script aus der Aufgabe heraus mit dem jeweiligen Parameter für mount oder umount.

Ich dachte man kopiert, wie bei den anderen Lösungen hier zuvor, Dein gesamtes Script in die Aufgabe.

Ich habe mich schon gewundert, warum bisher keine weiteren Fragen und Antworten nach Deinem Script-Post vorhanden waren. Es wollte sich keiner outen, dass er es nicht versteht :)
Programmierer, wie Du es wahrscheinlich einer bist, denken natürlich in höheren Ebenen und wundern sich über doofe Fragen - wie auch von mir ;-)

Aber gut, dass wir mal drüber gesprochen haben!

Besten Dank für Deine Hilfe!

Viele Grüße!
 

raffnix84

Benutzer
Mitglied seit
18. Nov 2012
Beiträge
38
Punkte für Reaktionen
2
Punkte
14
Immer wieder gerne :), ich weiss nicht ob sich da keiner outen möchte, ich kann aber aus Erfahrung sagen das nur sprechenden Menschen geholfen werden kann. Wünsche dir eine schöne Restwoche!
 

raffnix84

Benutzer
Mitglied seit
18. Nov 2012
Beiträge
38
Punkte für Reaktionen
2
Punkte
14
Aber danke für deinen Tipp, mir ist erst gar nicht in den Sinn gekommen das Skript da einfach rein zu kopieren :) - die Idee finde ich gar nicht mal so schlecht!
 

HerrFrodo1

Benutzer
Mitglied seit
27. Mrz 2023
Beiträge
17
Punkte für Reaktionen
0
Punkte
1
Vielleicht bin ich aber auch der Einzige, der so einen Unsinn gemacht hat...und vielleicht sollte mir das zu denken geben 🤔

Ok, ich erkenne an Deinem letzten Post, dass Du auf den richtigen Weg gekommen bist - wann dürfte etwa die Community mit der neuen Direct-Plugin-Version rechnen? 😁

Besten Dank und viele Grüße!
 

Seb3K

Benutzer
Mitglied seit
11. Jul 2016
Beiträge
19
Punkte für Reaktionen
1
Punkte
3
Die Idee ein USB Device via crontab zu mounten/umounten hatte ich auch und bin hier auf diesen Thread gestoßen.

Ich habe mir mal die 3 Anätze von Asicnet the-masterplan
und raffnix84
angeschaut.

Die Shell Scripte von raffnix sind ja sogar schön über Varianblen zu benutzen.
Ich werde mir das nach meinem Urlaub im Oktober mal anschauen.

Ich hätte es auch erstmal klassisch mit mount auf /dev/xy versucht aber wenn es schon /usr/syno/bin/synousbdisk gibt, um so besser.
Oder /sys/bus/usb/drivers/usb/*bind
Die Idee mit /usr/syno/bin/timebkp list_version --task=$TASK_NAME | grep processing ) find ich auch klasse.

Ansonsten hatte ich hier noch
for scsi_host in /sys/class/scsi_host/host*/scan; do echo "- - -" > ${scsi_host}; done
gesehen. Wenn scheinbar die HD nicht aus dem Spinoff aufwacht. Da war meine erste Idee einen cronjob zu schreiben, der einfach ein echo "bla" > auf eine Datei auf dem Device schreibt(?)
Das das mit dem Spin off etc. werde ich dann konkret auf meinem System testen (noch habe ich nicht mal ein USB Gehäuse).

Danke euch für die Denkansätze! :)

Ich würde eine Zeitschaltuhr glaub ich dennoch nutzen (Auch wenn Spindown funktioniert und ohne mount ja qausi kein Zugriff stattfindet).
Einfach nur um eine physikalische Trennung zu haben (Falls ein Verschlüsselungstrojaner doch irgendwie den mount anstarten kann. Ich weiß, es ist eher unwahrscheinlich, denn dieser bräuchte auch die Credentials des NAS aber "haben ist besser als brauchen".)
 

insai

Benutzer
Mitglied seit
06. Jan 2020
Beiträge
43
Punkte für Reaktionen
5
Punkte
8
Hallo Leute,

ich versuche gerade das script von raffnix84 #27 einzusetzten.
Als Anfänger im Linuxbereich etwas schwierig für mich.

Dazu habe ich das script unter: /volume1/homes/Administrator/Einbinden-trennen-USBHDDPart2.sh abgelegt und mittels chmod +x ausführbar gemacht.

Danach habe ich mich mittels Putty als Administrator auf die Syno connectet und getestet ( USB-Device waren nicht gemountet)

Administrator@Backup:~$ bash /volume1/homes/Administrator/Einbinden-trennen-USBHDDPart2.sh mount
Ausgabe im Terminal:
/volume1/homes/Administrator/Einbinden-trennen-USBHDDPart2.sh: line 47: /sys/bus /usb/drivers/usb/bind: Permission denied

Mittels Sudo:
Administrator@Backup:~$ sudo bash /volume1/homes/Administrator/Einbinden-trennen-USBHDDPart2.sh mount
Ausgabe im Terminal:
/volume1/homes/Administrator/Einbinden-trennen-USBHDDPart2.sh: line 47: echo: write error: No such device

Der Fehler in line 47 bezieht sich auf foldende Zeile (glaub ich)

1696497899168.png


Die Variablen Device_Name und Device_Adresse hab ich angepasst.
Kann mich jemand bei dem Problem unterstützen?

Danke herzlichst.
 


 

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