Ordner von externer HD einbinden

Status
Für weitere Antworten geschlossen.

Stefan Socke

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

ich schreibe mal hier, da mein Problem wohl nur über SSH gelöst werden kann.

Ich habe eine 2-Bay Station (Raid 1). Auf dieser habe ich unter anderem auf dem gemeinsamen Laufwerk "video" einen Ordner "Filme1" liegen.
Da der Festplattenverbund inzwischen fast voll ist, wollte ich zuerst grössere Platten einbauen. Allerdings habe ich alle Filme sowieso noch als Blu-Ray vorliegen, darum macht es nichts wenn die Dateien verloren gehen sollten.
Also habe ich mir eine einzelne Festplatte geholt, die per USB an die Station gehängt, einen Ordner "Filme2" erstellt und alle Film dort hin verschoben.

Soweit so gut. Ich hätte aber ganz gerne, dass der auf der externen Platte befindliche Ordner "Filme2" in dem Ordner "video" des Raid-Verbundes auch zu sehen ist.
Ich dachte erst es ging wie bei Windows, einfach den Ordner "Filme2" mit der Maus auf "video" ziehen und eine Verknüpfung erstellen. Die Funktion scheint es aber nicht zu geben.

Also habe ich gegoogelt und bin auf SSH gestossen. SSH habe ich auf der Station aktiviert, Putty runtergeladen, mich verbunden und root Rechte erhalten.
So wie ich es verstehe sollte es dann mit diesem Befehl funktionieren:
"sudo mount --bind /volumeUSB1/Filme2 /volume1/video/Filme1"

Hab's jetzt noch nicht versucht, weil ich etwas unsicher bin. Zudem ist es wohl so, dass diese Einstellung bei einem Neustart wieder verloren gehen würde. Es gibt da wohl eine Datei in Linus namens "rc.local" die dafür sorgt, dass das gemountete Laufwerk beim Start wieder verbunden wird. Die Datei finde ich aber nicht. Und mit so einem reinen Kommandotool wie Putty diese zu erzeugen bekomme ich nicht hin.
Gibt es da keinen besseren Weg? Direkt in DSM kommt man wohl an die Linus Verzeichnisse gar nicht ran.

Sorry wenn ich mich da etwas umständlich ausdrücke, aber das sind für mich weitgehend bömische Dörfer.

Gruß
Stefan
 

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.101
Punkte für Reaktionen
253
Punkte
129
Du hast schon ganz gut recherchiert.

Mount bind unterstützt sowas. Geht aber auch per Aufgabenplaner bei start/stop.
Es gibt im Wiki hier die Anleitung dazu. Wiki

Und kontrolliere bzw. Finde noch den richtigen Pfad für die USB Plattre. ZB. in File Station unter den Ordner Einstellungen.
 

Stefan Socke

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

vielen Dank, ich glaube es hat funktioniert :)

Nur zur Sicherheit:

Ich habe mich also mit Putty auf die Synology eingeloggt.
Danach mit sudo -i root Rechte geholt.

Dann mein Laufwerk gemountet:
sudo mount -- bind /volumeUSB1/usbshare/FILME /volume1/video/Filme

Das hat soweit prima geklappt.

Danach eine Datei mount.sh erstellt:
#!/bin/sh
# mount.sh
# mount/bind some folders on startup
# and umount them on shutdown/reboot

case $1 in
start)
sleep 60
/bin/mount -- bind /volumeUSB1/usbshare/FILME /volume1/video/Filme/
;;
stop)
/bin/umount /volume1/video/Filme/
;;
*)
echo "Usage: $0 [start|stop]"
;;
esac


Die Datei verschoben auf /usr/local/etc/rc.d

Und dann dieser Datei die benötigten Rechte gegeben mit
chmod 755 mount.sh

Ob das Script geht habe ich jetzt nicht versucht. Ich hoffe das enthält keine Schreibfehler.

Gruß
Stefan
 

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.101
Punkte für Reaktionen
253
Punkte
129
Ok super das du es mit ssh hinbekommen hast.
Wie gesagt geht das heutzutage via Aufgabenplaner einfacher und überlebt somit dann idR auch DSM Major Updates. Bei der rc.local ist das nicht garantiert.
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
903
Punkte für Reaktionen
64
Punkte
54

Stefan Socke

Benutzer
Mitglied seit
22. Okt 2013
Beiträge
16
Punkte für Reaktionen
0
Punkte
1
Na ja, ist ja alles nur abgetippt, bin halt ein Windows verseuchter Mensch ;-)

Die Mounterei ist ja noch leicht zu verstehen, aber gerade die Syntax des Scripts verstehe ich gar nicht. Darum bin ich auch unsicher ob das so passt.
Ich habe mal versucht rauszufinden wo Linux solche geplanten Aufgaben überall ablegt, das ist aber derart unübersichtlich, dass ich da nicht so recht hintersteige.
Ist der Pfad "/usr/local/etc/rc.d" wirklich der Richtige für sowas?

Was mich auch etwas unischer macht, was passiert wenn das Script fehlerhaft ist? Kann es dann sein, dass die Diskstation beim Start hängenbleibt? Dann hätte ich echt ein Problem.

PS: Sorry an Böhmen für das fehlende "H" ;-)

Ok super das du es mit ssh hinbekommen hast.
Wie gesagt geht das heutzutage via Aufgabenplaner einfacher und überlebt somit dann idR auch DSM Major Updates. Bei der rc.local ist das nicht garantiert.

Äh, jetzt bin ich etwas verwirrt.
Das Script steht doch so in dem Link von dir bezüglich Aufgabenplaner. Oder verwechsele ich da was?
 

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.101
Punkte für Reaktionen
253
Punkte
129
Ach, sorry, der Wiki Eintrag ist ja noch super alt.
Es gibt eine elegantere Methode, ich logge mich später mal auf meiner Syno ein, und mache Screenshots.

Das bestehende /usr/local/etc/rc.d ist für Syno das richtige, ja, aber es wird so nicht mehr benötigt. Geht alles übers GUI.

Sorry, dachte mir echt, das Wiki ist aktueller.
 

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.101
Punkte für Reaktionen
253
Punkte
129
1.) Das Skript, dass du bereits erstellt hast ist also wohl schon ok und passt soweit.
2.) Bei mir liegt das Skript dann in einem Backupverzeichnis unter Volume1
3.) Du meldest dich am NAS per Webbrowser an, startest die Systemsteuerung -> Aufgabenplaner.
4.) Du erstellst 2 Skripts
4.1) eines beim Hochfahren mit dem Skriptaufruf und "start"
4.2) eines beim Herunterfahren mit dem Skriptaufruf und "stop"

Anbei noch 2 Screenshots, als Anhaltspunkt.

Aufgabe1.PNG
Aufgabe2.PNG
 

Stefan Socke

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

ah, danke, das sieht ja sehr viel einfacher aus :)

Ich habe also die erste Script Datei aus rc.d wieder gelöscht, mir einen gemeinsamen Ordner "Script" angelegt und dort die beiden Scripte verstaut.

Die Aufgabenplanung sieht jetzt so aus:

Aufgaben.jpg

Die beiden Scripte muss ich doch aber sicher nicht so schreiben wie weiter oben (in blau) zu sehen, oder?
Diese "case" und "esac" ist doch sowas wie if-else, und das brauche ich bei getrennten Scripten ja nicht.

Habe die jetzt so vereinfacht:

Scripte.jpg

Alles was hinter einem # steht sind vermutlich nur Anmerkungen, oder?
Oder steht das erste #!/bin/sh für irgendwas, was notwendig ist?

Gruß
Stefan
 
Zuletzt bearbeitet:

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.101
Punkte für Reaktionen
253
Punkte
129
Hi, also ein paar Anmerkungen.

1.) Genau, der # startet grundsätzlich einen Kommentar
2.) #!/bin/sh heißt Hash-Bang und lässt man drin, ist ein Spezialkommentar zur Vermeidung von Ausführungsproblemen. Ist eine Art Typdefinition.
3.) Super, wenn du deine Skripte aufgetrennt hast, sparst du dir natürlich das if-else Konstrukt, genau.
4.) Schönheitsfehler: im Aufgabenplaner kannst du dir dann aber die "stop" bzw. "start" Parameter hinter dem skript.sh sparen, da diese keine Funktion mehr haben ;)
 

Stefan Socke

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

danke für die Hilfe :)
Ich habe das "Start""Stop" wieder gelöscht aus der Aufgabenplanung.
Aber irgendwas stimmt noch nicht. Nach einem Neustart ist das Laufwerk verschwunden, klappt wohl nicht mit dem Script :-(

Gruß
Stefan
 

tproko

Benutzer
Sehr erfahren
Mitglied seit
11. Jun 2017
Beiträge
2.101
Punkte für Reaktionen
253
Punkte
129
Laut Wiki gehört: mount -o bind
Kein --

Starte die Aufgabe sonst mal manuell über den Aufgabenplaner. Falls das dann doch klappt hast du ein Timing Problem. (Usb platte noch nicht da?)
Aber vermute das Skript passt noch nicht ganz.
 

Stefan Socke

Benutzer
Mitglied seit
22. Okt 2013
Beiträge
16
Punkte für Reaktionen
0
Punkte
1
Ich habe das Script jetzt mal versucht mit Putty zu starten sh Start.sh

Dabei zeigt die Konsole diese Fehler an:
Fehler.JPG

Sleep habe ich mal mit # deaktiviert, dann ist der Fehler schon mal weg.
-o hat auch nicht geholfen.

Script jetzt:
#!/bin/sh
# Start.sh

# sleep 60
sh /bin/mount -o bind /volumeUSB1/usbshare/FILME /volume1/video/Filme/


line 3: command not found

Die Zeile 3 ist doch leer :confused:
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
903
Punkte für Reaktionen
64
Punkte
54
Kann es sein dass Du das Script unter Windows erstellt hast? Windows benutzt am Zeilenende CR LF während Linux nur LF benutzt.
 
Zuletzt bearbeitet:

Stefan Socke

Benutzer
Mitglied seit
22. Okt 2013
Beiträge
16
Punkte für Reaktionen
0
Punkte
1
Ja, stimmt.
Statt dieser Konsoleneditoren dachte ich mir, ich mache das mit dem Windows Editor. Daher wohl diese komischen Zeichen :eek:

OK, habe es jetzt mit Notepad++ gemacht, da gibt es eine Option die Linux Scripte erstellt.
Damit ist schon mal der Sleep Fehler weg, geht jetzt.
Das Mounten klappt aber trotzdem noch nicht.

Muss ich die neue Start.sh auch mit chmod 755 Start.sh ausführbar machen?

Das Script ist jetzt so:
#!/bin.sh
# Start.sh
sleep 60
mount -- bind /volumeUSB1/usbshare/FILME /volume1/video/Filme/


Wenn ich es ausführe wartet er die 60 Sekunden und gibt dann nur die Hilfe zu mount aus:
Batch.JPG
 

Stefan Socke

Benutzer
Mitglied seit
22. Okt 2013
Beiträge
16
Punkte für Reaktionen
0
Punkte
1
Oh oh !!!!

Ich hatte ja schon wieder das --bind drinnen :mad:
Mit -o hat es jetzt geklappt :D
Zumindest in Putty.
 

Stefan Socke

Benutzer
Mitglied seit
22. Okt 2013
Beiträge
16
Punkte für Reaktionen
0
Punkte
1
So, über Putty arbeiten jetzt beide Scripte prima.

Wenn ich aber in DSM den Aufgabenplaner aufrufe und die Scripte dort ausführen lasse passiert nix :(
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
903
Punkte für Reaktionen
64
Punkte
54
..OK, habe es jetzt mit Notepad++ gemacht, da gibt es eine Option die Linux Scripte erstellt...
Genaugenommen wird mit dieser Option nur bewirkt dass kein CR/LF am Ende der Zeiler erzeugt wird sondern nur LF. Wird nicht nur bei Linux sondern auch bei macOS, Unix, Android, BSD u.a. erwartet. Siehe auch hier ;)
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
903
Punkte für Reaktionen
64
Punkte
54
Ich vermute Du musst den ganzen Pfad bei mount angeben. Probiere mal
Code:
#!/bin.sh
# Start.sh
sleep 60
/bin/mount --bind /volumeUSB1/usbshare/FILME /volume1/video/Filme/

EDIT: Das wird es wohl nicht sein :(. Habe in /etc/crontab folgende Zeile gefunden
Code:
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/syno/sbin:/usr/syno/bin:/usr/local/sbin:/usr/local/bin
 

Stefan Socke

Benutzer
Mitglied seit
22. Okt 2013
Beiträge
16
Punkte für Reaktionen
0
Punkte
1
Geschafft :)

Den Pfad hatte ich im Script ganz eingegeben, daran lag es nicht.
Aber offenbar braucht der Aufgabenlaner auch ein "sh" vor dem Pfad+Script. Damit funktioniert es jetzt ohne Probleme.
Ende.JPG

Juhuuu :D
Vielen Dank für eure Hilfe!
 
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