IP Abfrage dann automount

yamaharacer

Lt. Junior Grade
Registriert
Jan. 2008
Beiträge
392
Hallo,
ich versuche mich gerade an einer Möglichkeit für mein Steam Deck folgendes zu machen:

Ausgangssituation:
Eine NAS die nicht permanent läuft
Spiele (für Emulatoren) die dort abliegen

Was das Steam Deck können soll:
Cron Job mit abfrage ob die NAS läuft. Wenn nicht, dann WOL senden, sobald IP verfügbar SMB automounten.
Falls die NAS schon läuft, direkt automounten. (das habe ich ganz normal mit fstab gemacht)

Für den Cron habe ich mich an dem orientiert: https://wiki.ubuntuusers.de/Skripte/Auto_OFF/

Code:
#!/bin/bash
#
#set -x
. /etc/NAS-online-check.conf
logit()
{
    logger -p local0.notice -s -- WOL: $*
}
IsOnline()
{
        for i in $*; do
        ping $i -c1
        if [ "$?" == "0" ]; then
          logit PC $i is still active, auto WOL terminated
          return 1
        fi
        done
    return 0
}
isbusy()
{
    IsOnline $CLIENTS
        if [ "$?" == "1" ]; then
                return 1
        fi
    return 0
}

COUNTFILE="/home/deck/Documents/IP_counter"
if [ "$IP_Check" = "true" ] || [ "$IP_Check" = "yes" ] ; then 
    if [ "$?" == "0" ]; then
        isbusy
        if
            # was it not busy already last time? Then WOL.
            if [ -e $COUNTFILE ]; then
            # WOL
            rm -f $COUNTFILE
            sleep 5
            wol B4:2E:99:FB:48:5B
            sleep 20
            exit 0
            else
            rm -f $COUNTFILE
            #logit aborted
            exit 0
        fi
    fi
fi
logit malfunction
exit 1

Nun fehlt mir noch der IP Check ob WOL funktioniert hat, und der automount befehl. Und hier weiß ich nicht wie ich den einbinden soll.

Eventuell mach ich mir aber auch zu viel Aufwand und jemand hat eine bessere Idee. Kann mir jemand helfen?

Danke
 
Zuletzt bearbeitet:
yamaharacer schrieb:
Nun fehlt mir noch der IP Check ob WOL funktioniert hat, und der automount befehl.
Mal auf die Schnelle ohne es geprüft zu haben.

Code:
#!/bin/bash

NAS='192.x.x.x'

if ping -w 3 -c 1 "$NAS" > /dev/null
  then
      sleep 600
      if [ "`mount|grep /pfad/zum/Mountpoint`" == "" ]
        then
            mount /pfad/zum/Mountpoint
      fi
fi

ping -w 3 -c 1 "$NAS" > /dev/null wird per Ping geprüft ob NAS vorhanden

sleep 600 Zeit von Erreichbarkeit der IP-Adresse bis alle Dienste auf dem NAS gestartet sind (z.B. 600 Sekunden)

if [ "`mount|grep /pfad/zum/Mountpoint`" == "" ] Prüfen ob das Laufwerk schon gemountet ist

mount /pfad/zum/Mountpoint Laufwerk wird gemountet
 
Helge01 schrieb:
ping -w 3 -c 1 "$NAS" > /dev/null wird per Ping geprüft ob NAS vorhanden

sleep 600 Zeit von Erreichbarkeit der IP-Adresse bis alle Dienste auf dem NAS gestartet sind (z.B. 600 Sekunden)
Prüfen mit netcat mit timeout auf den Port von NFS/SMB wäre etwas smarter.
 
  • Gefällt mir
Reaktionen: Pummeluff und Helge01
Na dann wie gewünscht. :D

Code:
#!/bin/bash

NAS='192.x.x.x'
PORT='445'
MPFAD='/pfad/zum/mountpoint'

if netcat -zw 5 $NAS $PORT > /dev/null
then
      if [ "`mount|grep $MPFAD`" == "" ]
        then
            mount $MPFAD
      fi
fi
 
Zuletzt bearbeitet:
Ich würde das trennen.
Automount über system.d

Dann brauchst Du Dich nur um die Abfrage und das WOL im Skript kümmern und der Automount läuft sowieso immer.

Ich hab das für meinen großen Filer gebaut.
Ich hab ein kleines 6W SSD-NAS auf dem alle Essentials liegen, und einen großer 100W Filer, der nur (manuell) von mir gestartet wird, wenn ich etwas brauche, was nicht auf dem kleinen liegt.

Aber viele Wege führen nach Rom :-)
 
yamaharacer schrieb:
Eventuell mach ich mir aber auch zu viel Aufwand und jemand hat eine bessere Idee.
Was ist denn das Ziel? Das System soll nicht hängen, wenn die NAS nicht verfügbar ist? Ich vermute, es wird kein Skript benötigt, sondern lediglich passende Automount Einstellungen. Ich nutze systemd automount in etwa so:

Bash:
/etc/fstab:
4.2.1.0:/nas/pfad  /mount/pfad  nfs x-systemd.automount,noauto,user,retry=0,x-systemd.idle-timeout=60,nolock,rw,timeo=5,retrans=1,x-systemd.device-timeout=60,soft,nofail 0 0
 
Helge01 schrieb:
if [ "`mount|grep /pfad/zum/Mountpoint`" == "" ] Prüfen ob das Laufwerk schon gemountet ist
Dafür gibt es übrigens den Befehl mountpoint:
Bash:
if mountpoint -q /pfad/zum/Mointpoint; then
 # ist gemountet
fi
 
  • Gefällt mir
Reaktionen: Pummeluff und Helge01
Donnerkind schrieb:
Dafür gibt es übrigens den Befehl mountpoint
Der Befehl funktioniert vermutlich nur wenn der mountpoint definiert ist, z.B. in der fstab. Woher soll dieser sonst wissen das irgend ein Pfad im Dateisystem der Mountpoint für ein Netzlaufwerk ist.
 
Rossie schrieb:
Was ist denn das Ziel? Das System soll nicht hängen, wenn die NAS nicht verfügbar ist? Ich vermute, es wird kein Skript benötigt, sondern lediglich passende Automount Einstellungen. Ich nutze systemd automount in etwa so:

Bash:
/etc/fstab:
4.2.1.0:/nas/pfad  /mount/pfad  nfs x-systemd.automount,noauto,user,retry=0,x-systemd.idle-timeout=60,nolock,rw,timeo=5,retrans=1,x-systemd.device-timeout=60,soft,nofail 0 0

Also im Moment ist es so, dass ich über fstab die NAS mounte.
Code:
//192.168.178.181/sega /mnt/sega cifs credentials=/home/matthiask/Dokumente/.smbcredentials,user,_netdev,nofail,x-systemd.device-timeout=1m,iocharset=utf8,rw,uid=3000,gid=3009,file_mode=0777,dir_mode=0777 0 0

Das funktioniert natürlich nur wenn die NAS bereits hochgefahren ist.

Hierzu war dann die Überlegung ein wol per script beim start des Systems zu senden und dann abzufragen, ob die NAS online ist. Sobald sie online ist sollen die Zugriffe dann gemounted werden.
 
Helge01 schrieb:
Der Befehl funktioniert vermutlich nur wenn der mountpoint definiert ist, z.B. in der fstab. Woher soll dieser sonst wissen das irgend ein Pfad im Dateisystem der Mountpoint für ein Netzlaufwerk ist.
/proc/mounts
/proc/$$/mountinfo
 
  • Gefällt mir
Reaktionen: Donnerkind
HisN schrieb:
Ich würde das trennen.
Automount über system.d

Dann brauchst Du Dich nur um die Abfrage und das WOL im Skript kümmern und der Automount läuft sowieso immer.

also irgendwie funktioniert das mit system.d und automount nicht. Oder ich habe eine andere Definition davon.

Ich bin nun so vorgegangen dass ich automount über system.d in der fstab mache. Dann habe ich den Server mal heruntergefahren und erst nach dem PC gestartet.

Er mountet allerdings weiterhin nicht automatisch. Erst wenn ich das erste mal darauf zugreife sprich drauf klicke:
automount.png


Das ist für das Deck etwas unpraktisch, da ich erst in den Desktopmodus muss um das durchzuführen.
 
Ich hab das in etwa wie hier gemacht.

https://rayagainstthemachine.net/linux administration/systemd-automount/

Also in /etc/systemd/system eine datei mit dem namen des shares der gemountet wird angelegt z.b.

mnt-temp.automount
der würde das Verzeichnis /mnt/temp mounten.
mit dem Inhalt
Code:
[Unit]
Description=Automount SMB Temp

[Automount]
Where=/mnt/temp
TimeoutIdleSec=5min

[Install]
WantedBy=multi-user.target

Und eine datei mnt-temp.mount
mit dem Inhalt
Code:
[Unit]
Description=Mount SMB temp
After=network-online.target
Wants=network-online.target
Requires=network-online.target

[Mount]
What=//hier.die.ip.adresse/temp
Where=/mnt/temp
Type=cifs
Options=_netdev,rw,credentials=/etc/samba/credentials,vers=3.0,iocharset=utf8

[Install]
WantedBy=multi-user.target

Und dann hab ich das Timout noch gekillt.

das geht mit systemctl edit mnt-temp.mount

da gehört noch

Code:
[Unit]
StartLimitIntervalSec=0
StartLimitBurst=0

[Service]
Restart=always
RestartSec=30

rein.

Da ich ein Linux-Noob bin, ist da bestimmt noch Verbesserungsbedarf. Aber so funktioniert es.
Ich kann meinen großen Filer tagelang abgeschaltet lassen, aber sobald er an ist, kann ich auf die Verzeichnisse Zugreifen.

Und natürlich wird erst gemountet, wenn Du drauf klickst. Vorher macht es doch gar keinen Sinn :-)
Das wäre doch nur unnötige Ressourcen-Verschwendung^^
 
  • Gefällt mir
Reaktionen: Pummeluff
HisN schrieb:
Das wäre doch nur unnötige Ressourcen-Verschwendung^^

Das brauche ich allerdings im Steam deck. Da ich von Gaming Mode beispielsweise Dolphin Emulator starte, erkennt dieser dann die Spiele nicht, da der Mountpoint nicht geladen wurde.

Dann muss ich doch was mit ip abfrage machen und dann einen Mount befehl.

Ich lese mich hier nochmal genauer ein und probiere morgen nochmal ein bischen.
 
Hmm.. Ich nutze das für einen Plex-Server.
Sobald Plex auf die Verzeichnisse zugreift dauert es ne Sekunde, dann sind die Dateien da. Ohne das ich manuell eingreifen muss.
 
yamaharacer schrieb:
Dann muss ich doch was mit ip abfrage machen und dann einen Mount befehl.
Nö, musst du eigentlich nicht. Die Lösung von @HisN ist schon optimal.

Automount heißt, dass die Quelle automatisch eingehängt wird, wenn im Zielverzeichnis darauf zugegriffen wird.

Du kannst übrigens noch in den Automount eine Abhängigkeit einbauen.
https://www.freedesktop.org/software/systemd/man/latest/systemd.automount.html

Automatic Dependencies
Implicit Dependencies

The following dependencies are implicitly added:

If an automount unit is beneath another mount unit in the file system hierarchy, a requirement and ordering dependencies are created to the on the unit higher in the hierarchy.

An implicit Before= dependency is created between an automount unit and the mount unit it activates.

Analog zur Impliziten Abhängigkeit kannst du in die Automount- oder Mount-Unit mit Requires= auf eine andere Unit referenzieren, in der du dann das Wake on Lan ausführst.
 
  • Gefällt mir
Reaktionen: chillking und HisN
Zurück
Oben