Mount nach Neustart nicht mehr verfügbar

Status
Für weitere Antworten geschlossen.

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

nach langer Suche (leider ohne Erfolg) muß ich nun auf eure Hilfe hoffen.

hier meine Config:

DS110+ DSM2.3 - als always on
DS1010+ DSM2.3 - als Speicher über Wake on Lan
Auf der kleinen DS110+ sind Ordner der DS1010+ über NFS share gemounted.
Funktioniert soweit super.
Die "mount -t nfs <ip_ds>:/volume1/<ordnername> /volume1/<ordnername>" wurden in die /etc/rc.local eingetragen und verbinden sich auch beim start der DS110+

mein Problem:
nachdem ich jetzt eine Webpage (auf der DS110+) mit Wake on Lan Button gebastelt hab um die DS1010+ nur bei Bedarf zu starten, habe ich festgestellt, dass nach einem Start der DS1010+ auf die gemounteten Ordner nicht mehr zugegriffen werden kann. Erst nach einem Neustart der DS110+ ist alles wieder normal.

wie kann ich das ganze Problem lösen ohne die DS110+ neu starten zu müssen?

Bin für jeden Hinweiß dankbar.

Grüße
Mirage
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Es müsste eigentlich reichen auf der DS110 einen umount zu machen und dann die 1010+ runterzufahren
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Es müsste eigentlich reichen auf der DS110 einen umount zu machen und dann die 1010+ runterzufahren

sorry vielleicht steh ich aufm schlauch ... aber beim start der ds1010 wären die mounts doch dann garnicht mehr verfügbar???:confused:

ich hatte mir das ganze irgendwie so vorgestellt:
1. ich klicke den wake on lan button auf der ds101
2. die ds1010 fährt hoch
3. der online status der ds1010 wird abgefragt
4. dann werden die mount befehle abgeschickt

bis auf den klick auf den button sollte alles automatisch laufen

leider bin ich völliger neuling in php und linux ... würde mir auch gern was anlesen, aber ich weiß nicht wo ich anfangen soll, da bringt die suche im forum leider nicht viel, wenn man nicht weiß was man eigentlich sucht
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Wenn du einen Server runterfährst solange ein Client noch mounts darauf hat, sind Probleme meist vorprogrammiert. Darum musst du die mounts umount(en) bevor der Server 1010+ runtergefahren wird.
Beim Starten sollte es so gehen wie du dir vorgestellt hast: WOL Paket abschicken und Status des Servers prüfen. Sobald er oben ist die mounts absetzen.
Den umgekehrten Weg solltest du gehen wenn du den Server runterfahren willst. Dann muss die 1010+ der 110+ mitteilen, dass sie bitte ihre mounts aushängen soll, damit der Server runterfahren kann. Sobald die 110+ alles entfernt hat kann der Server dann runterfahren.
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
ok supi - danke soweit
damit wäre die Theorie klar ... und damit gehen meine Probleme weiter

die Praxis:

für den online Status habe ich mittlerweile den php befehl
"@fsockopen" gefunden - somit hab ich den Status online/offline der DS1010 schon mal

nur wie stelle ich es an das mir php die mount oder unmout befehle an die DS110 sendet
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Da würde ich persönlich auf php verzichten und direkt mit Shellskripten arbeiten.
Die mount/umount Befehle sollten schon von der 110+ her kommen. Ansonsten wenn du bei php bleiben willst wäre afaik die Funktion exec() dafür zuständig aus php heraus Kommandos auf der Shell auszuführen
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
hallo ich wieder mal,

hab mir jetzt ein shell script geschrieben, das die mount/umount befehle sendet.
über die konsole funktionert es wunderbar.

nur über die exec() funktion im php bekomme ich das script nicht ausgeführt ... soweit ich mich eingelesen hab und exec(whoami) sagt mir auch, das ich als nobody user unterwegs bin ... dieser hat natürlich keine rechte scripte auszuführen
gibt es einen workaround? ohne die sicherheit zu gefährden

andere möglichkeit wäre direkt über das script das starten und stoppen der großen station (DS1010) zu erkennen -> nur wie stelle ich das am dümmsten an

grüße
mirage
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
hallo ich wieder mal,

hab mir jetzt ein shell script geschrieben, das die mount/umount befehle sendet.
über die konsole funktionert es wunderbar.

nur über die exec() funktion im php bekomme ich das script nicht ausgeführt ... soweit ich mich eingelesen hab und exec(whoami) sagt mir auch, das ich als nobody user unterwegs bin ... dieser hat natürlich keine rechte scripte auszuführen
gibt es einen workaround? ohne die sicherheit zu gefährden
Für den mount brauchst du eh root Rechte. Mit nobody geht das nicht. Entweder du schiebst das Script dem System-Apache unter, der unter root läuft oder du führst das Script direkt auf der Konsole mit dem PHP Interpreter aus (mit cron könnte man das z.B. regelmässig machen

andere möglichkeit wäre direkt über das script das starten und stoppen der großen station (DS1010) zu erkennen -> nur wie stelle ich das am dümmsten an

grüße
mirage
Da Starten erkennst du daran, dass der mount keinen Fehler zurückgibt. Das ist relativ einfach ;)
Problematisch wird das Herunterfahren der grossen DS zu erkennen, um die mounts zu entfernen. Da wirst du den shutdown Prozess verzögern müssen.
Ich könnte mir so was vorstellen:
Das zeitgesteuerte Runterfahren ist ja eigentlich nichts weiteres als ein cronjob. Den könnte man also anpassen.
Dann ein Shell Script, das den shutdown (auf der 1010+) auslöst. Dieses Script mountet eine nfs Ressource von deiner 110+ und legt dort ein File an (leere Datei). Und wartet dann.
Auf der 110+ prüft regelmässig ein Script ob diese Datei vorhanden ist. Wenn ja dann "weiss" sie, dass die 1010+ runterfahren will und schreibt etwas in die Datei. Danach hängt sie die mounts aus.
Auf der 1010+ prüft das wartende Shell Script regelmässig ob in der von ihr angelegten Datei ein Wert steht. Wenn ja dann weiss sie, dass die 110+ alle mounts entfernt hat und fährt mit dem shutdown Prozess fort.

Soweit die Theorie :)

Gruss

tobi
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
puhhh da hab ich ja noch was vor mir ... und das nur um ein paar € Strom zu sparen :(

aber was solls ... dank dir auf alle fälle schon mal
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
hallihallo,

so bin jetzt mal wieder ein Stückchen weiter, aber jetzt hängts wieder :(

ich habe mir ein Script Namens S99mount.sh geschrieben.
Follgendes steht drin:
Rich (BBCode):
#!/bin/bash
mo=1               
while [ 1 = 1 ];   #Endlosschleife
do
sleep 10             # Ping nur alle 10s
ping -q -c 1 IP:DS1010 > /dev/null
if [ $? = 1 ];       # wenn ping nicht erfolgreich
then
if [ $mo = 0 ]; then  # wenn mount schon ausgefuehrt
mo=1                    
fi
else                  # wenn ping erfolgreich
if [ $mo = 1 ]; then
sleep 30            # warte 30s da netzwerk der ds1010 frueher erreichbar, als mountbar
/bin/mount -t nfs IP:DS1010:/volume1/games /volume1/games # mounte
mo=0
fi
fi
done

das script arbeitet wunderbar sobald ich es manuell gestartet hab.
Leider funzt es nicht als autostart wenn ich die DS110 neu starte.
habe schon versucht das script in folgende ordner zu legen:
Rich (BBCode):
/usr/syno/etc.defaults/rc.d/   
/usr/syno/etc/rc.d/
/usr/local/etc/rc.d/
rechte 755 sind auch vorhanden
Rich (BBCode):
Hades> ls -al S99mount.sh
-rwxr-xr-x    1 root     root          452 Jul 15 01:58 S99mount.sh

Wieso startet das script nicht beim hochfahren der DS?? Wo liegt mein Fehler?? :confused:

Grüße
Mirage

p.s. den umount werde ich als cronjob machen ... die DS1010 wird nur automatisch zu einer bestimmten zeit runtergefahren. bin leider noch nicht dazu gekommen mir das thema anzuschaun
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Es wundert mich ein wenig, dass das Script manuell zu funzen scheint. Denn soviel mir ist gibt es die Shell /usr/bash (erste Zeile deines Codes) nicht. bash muss man via ipkg installieren und dann ist der Pfad meist /opt/bin/bash.
Die "normale" Shell ist ash und deren Pfad kriegst du mit which ash raus
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
danke für die schnelle Antwort ... leider kann ich es jetzt nicht testen, da ich unterwegs bin.

ich würde dir auch gern ein paar screens zeigen ... aber das script funzt mit der eingabe von "sh S99mount.sh" einwandfrei
wenn es #!/bin/bash nicht gibt wundert mich das auch ... allerdings habe ich ipkg für den wake on lan installiert.

sollte die erste Zeile mit der normalen shell dann "#!/bin/sh" heißen??

heute abend mehr ;)
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Da du das Script manuell mittels sh ... ausgeführt hast, weiss das System, dass du sh-Shell verwenden willst.
Beim Systemstart wird das Script jedoch so ausgeführt:
/usr/syno/etc.defaults/rc.d/S99mount.sh

Da es ohne Angabe der Shell ausgeführt wird muss dann der Pfad in der Datei stimmen
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
"#!/bin/sh" ist richtig
das skript wurde jetzt auch ausgeführt -> Problem

die station hat 10min gebraucht bis ich überhaupt wieder drauf zugreifen konnte :confused:
die status led ging garnicht erst an und die power led war nur am blinken!!

muß irgendwie an dem script liegen ... habs aus dem autostart genommen und jetzt geht wieder alles

Hilfe ... ich bin heillos überfordert
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich würde bei deinem äusseren if Statement explizit auf Erfolg von ping testen. Also eher auf den Return Wert 0 prüfen. Jede Zahl ausser 0 ist ein Fehler. Der Fehler muss nicht immer 1 zürückgeben. Da kann jede Anwendung praktisch zurückgeben was sie will, nur 0 ist "reserviert".
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
leider nein ... hab das script geändert leider kein erfolg

Rich (BBCode):
#!/bin/sh
mo=1
while [ 1 = 1 ];
do
sleep 10
ping -q -c 1 IP > /dev/null
if [ $? = 0 ]; then
echo "DS online"
if [ $mo = 1 ]; then
sleep 30
echo "mounte"
/bin/mount -t nfs IP:/volume1/games /volume1/games
mo=0
fi
else
echo "DS offline"
if [ $mo = 0 ]; then
mo=1
fi
fi
done
die DS bleibt selbst beim runterfahrn (da das skript auch ausgeführt wird) schon hängen ... hilft nur stecker ziehn
beim hochfahrn komm ich zum Glück nach ca. 10min in die konsole

könnte es an der while [ 1 = 1 ] endlosschleife liegen?
oder mag der autostart folder keine scripte die endlos laufen ... hilft es vielleicht das script durch ein anderes aus dem autostart folder aufrufen zu lassen?

bin für jeden Tip dankbar
 

goetz

Super-Moderator
Teammitglied
Sehr erfahren
Mitglied seit
18. Mrz 2009
Beiträge
14.160
Punkte für Reaktionen
407
Punkte
393
Hallo,
wenn Du den Stecker ziehst ist es normal, daß der nächste Start so lange dauert, es wird ein quotacheck durchgeführt. Beim runterfahren werden die Scripte mit dem Parameter stop aufgerufen und wenn da eine Endlosschleife aktiv ist kann sie nicht weiter runterfahren. Ein Beispielscript mit start/stop Bedingungen findest Du im Wiki. Für die Startbedingung würde ich ein weiteres Script aufrufen welches Deine Abfragen macht und im Hintergrund läuft.

Gruß Götz
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Morgen,

ich hab gestern nacht noch etwas getestet.
Leider hat sich auch mit einem start/stop script, das per autostart aufgerufen wird und wiederum mein mount script aufruft nicht viel geändert.

Die DS fährt zwar jetzt normal runter und ich hab nach dem hochfahren alles normal verfügbar (Telnet/DSM/Web) aber
die DS kommt nicht in den Status das sie ganz hochgefahren ist, so blickt die power led fröhlich weiter und die status led geht nie an.
Zudem hab ich gemerkt das die crondtab nicht mehr ausgeführt wird ... im DSM stand bei meinen automatischen netzwerksicherungen: "getrennt"

woran könnte es denn noch liegen??

anbei die Scripte:
Start/Stop
Rich (BBCode):
#!/bin/sh

case $1 in
start)
sh /usr/syno/bin/mount.sh
;;
stop)
sh /usr/syno/bin/umount.sh
;;
*)
echo "Usage: $0 [start|stop]"
;;
esac
exit 0

und mount
Rich (BBCode):
#!/bin/sh
mo=1
while [ 1 = 1 ];
do
sleep 10
ping -q -c 1 IP:DS1010 > /dev/null
if [ $? = 0 ]; then
echo "DS online"
if [ $mo = 1 ]; then
sleep 60
echo "mounte"
/bin/mount -t nfs IP:DS1010:/volume1/games /volume1/games
mo=0
fi
else
echo "DS offline"
if [ $mo = 0 ]; then
mo=1
fi
fi
done

eine kleine Idee:
- gibts es die Möglichkeit eines verzögerten autostarts, das das script erst ausgeführt wird wenn die DS richtig up ist

und noch ne kleine Frage:
- wie kann ich per script abfragen ob der mount schon existiert
ich habe mit if mount | grep /volume1/games versucht ... aber grep kann anscheinend in der mount ausgabe nicht suchen ... es wird immer alles ausgegeben

Grüße
Patrick
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Die DS wird niemals hochfahren, weil sie in der Endlosschleife feststeckt. Du solltest nach dem erfolgreichen mount ein exit machen.
Desweiteren sollten solche Scripte keine Ausgabe erzeugen, auch das kann zu Problemen führen. Wenn du etwas ausgeben willst, dann lass es das Script in eine Datei schreiben
 

Mirage1981

Benutzer
Mitglied seit
12. Jul 2010
Beiträge
15
Punkte für Reaktionen
0
Punkte
0
Du solltest nach dem erfolgreichen mount ein exit machen

das skript sollte aber nach dem erfolgreichen mount nicht aussteigen, sondern weiter prüfen ob die andere station runter und wieder hoch gefahren wird, wenn ja soll das script wieder einen mount ausführen
 
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