Ich mounte meine Netzlaufwerke mittels systemd. (Da gabs eine gute Anleitung)
Ab und an passiert es das die Netzlaufwerke nicht gemounted sind, habe aktuell aber keine Ahnung warum.
Dafür habe ich mir ein Script gebastellt das überprüft ob die NAS online ist und ob die Netzlaufwerke gemounted sind.
Wenn sie es nicht sind, führt es z.B. folgendes aus.
systemctl start NetMounts-NAS01-BackUp_01.mount
Jedoch braucht das Script root rechte welche ich dann manuell per passwort erteilen muss.
Jetzt habe ich die fixe Idee das irgendwie mittels systemd das permanent prüfen zu lassen ob die Netzlaufwerke gemounted sind und falls nicht diese dann automatisch mounten zu lassen.
Im moment fehlt mir der Ansatz wie das zu machen ist.
Oder eine andere Möglichkeit wie man das hinbekommt.
Ohne das ich mir das system verbiege oder durch das script bzw systemd das system langsam oder blockiert wird.
Erstelle doch einfach einen Timer der einen Systemd System Service startet. Der Timer könnte z.B. 5 Minuten nach dem Booten und dann alle 20 Minuten einen Service starten. Der Service besteht einfach als Typ oneshot aus deinem Script.
Bei Systemd laufen System Services immer als root außer du definierst in der Service Datei einen anderen Benutzer.
Die Zeiten des Timers kannst du natürlich frei wählen. Allerdings sollten die nicht zu kurz sein, alle 5 Sekunden wäre wahrscheinlich etwas zu häufig.
Ein ganz simples Beispiel. Es wäre sinnvoll zumindest das Netzwerk als Abhängigkeit mit einzubauen.
[Unit]
Description=Check Mounts service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/mountscipt.sh
------ edit
Kleine Ergänzung. Du verwendest aber schon automounts? Falls nicht mach das erst und schaue ob es hilft. Für ein Dateisystem mit Netzwerk-Abhängigkeit musst du immer automounts verwenden. Nur falls das immer noch nicht funktioniert, erstelle Scripte und Timer. Und ganz wichtig, niemals die mounts einschalten (“enable”) immer nur die autmounts einschalten und starten.
wenn dann der mount nicht da ist lass ich mein script laufen.
Auszug enthält nur code der für “NetMounts-NAS01-Data.mount”
Auszug aus dem Script
echo ">>Script Start<<"
echo ""
echo ""
#WOL
echo "Es wird geprüft ob die NAS Online ist"
echo ""
if ping -c 1 10.10.10.100 &> /dev/null
then
echo "NAS ist per ping erreichbar"
echo ""
else
echo "NAS ist per ping NICHT erreichbar"
echo "Wake On Lan wird gestartet"
wakeonlan AA:AA:AA:AA:AA:AA
time=210
echo "Warte " $time "Sek auf NAS Boot"
while [ $time -gt 0 ]
do
sleep 1
((time--))
echo "Noch: " $time " Sekunden"
done
fi
echo "Neu laden von systemctl daemon"
echo "systemctl daemon-reload"
systemctl daemon-reload
echo ""
echo ""
echo ""
echo "Teste ob Data gemounted ist"
test=$(systemctl show -p SubState --value NetMounts-NAS01-Data.mount)
if [ "$test" = "failed" ]
then
echo "Data nicht gemounted"
echo "Es wird versucht Data zu mounten"
echo "sudo systemctl start NetMounts-NAS01-Data.mount"
sudo sudo systemctl start NetMounts-NAS01-Data.mount
Data="1"
elif [ "$test" = "mounted" ]
then
echo "Data bereits gemounted"
fi
echo ""
echo ""
echo ""
check="0"
if [ "$Data" = "1" ]
then
echo "Data wird erneut geoprüft"
test=$(systemctl show -p SubState --value NetMounts-NAS01-Data.mount)
echo "Status: "$test
echo "es wird zur sicherheit versucht den Service auf enable zu setzen"
echo "sudo systemctl enable NetMounts-NAS01-Data.mount"
sudo systemctl enable NetMounts-NAS01-Data.mount
check="1"
echo ""
fi
if [ "$check" = "1" ]
then
echo "sudo systemctl daemon-reload"
sudo systemctl daemon-reload
fi
echo ""
echo "Script wurde beendet"
echo "zum verlassen des Scripts >Enter< drücken"
read tmp
exit
Das mounten und das script habe ich aus Anleitungen bzw. Beispiele erstellt.
Ob das jetzt der richtige Weg ist kann ich aus Mangel an Wissen und Erfahrung leider nicht sagen.
In der Summe sind 4 Mounts im Systemd als auch im Script.
Wegen der Länge habe ich nur die Teile für das Data Mount hier eingefügt.
In dem Fall ist das der falsche Weg. Erstelle für deine Mount-Units zusätzlich passende Automount-Units, aktivere diese (“enable”) und deaktiviere (“disable”) die normalen Mount-Units. Beim Starten werden dann die Automount-Units und wenn zugriffe auf die Daten erfolgt, werden diese erst wirklich gemountet.
Beim ersten Zugriff kann es dann wenige Sekunden länger dauern, aber dafür sie die immer Verfügbar.
Ok.
Habe mir die Anleitung angeschaut.
Nur habe ich da wohl ein Verständniss Problem.
Das automount im Beispiel (SMB) enthält weder “Type” noch “Options”
Werden die einfach mit eingefügt wie beim normalen mount?
Oder greift das automount auf das normale mount zu, was mir unlogisch erscheint vom Inhalt her des automount.
Stell dir eine Automount-Unit wie einen Starter für eine Mount-Unit vor. Systemd überwacht mit einer Automount-Unit den im Namen angegeben Pfad und falls ein Programm auf den Pfad bzw. Dateien in dem Pfad zugreifen will, wird von Systemd die Mount-Unit gestartet.
Eine Automount-Unit kann auch einen Timeout enthalten nach dem die Mount-Unit wieder deaktiviert wird. Das ist Optional, wird aber oft verwendet.
Damit eine Automount-Unit funktioniert muss es auch immer eine passende Mount-Unit geben. In deinen Fall gibt es dann nicht nur eine Datei in /etc/systemd/system names NetMounts-NAS01-Data.mount sondern auch noch NetMounts-NAS01-Data.automount
Am Inhalt von NetMounts-NAS01-Data.mount ändert sich nichts. Die Automount-Unit erstellst du wie in dem “How To” gezeigt.
Wichtig ist nur NetMounts-NAS01-Data.mount zu deaktivieren (“disable”)
systemctl disable NetMounts-NAS01-Data.mount
und dann für den nächsten Computerstart die Automount-Unit zu aktiveren (“enable”)
Hi, sollte eure Lösung nicht zufriedenstellend sein, hab ich hier noch zu dem Thema einen Link.
Hier wird mittels des NetworkManager Dispatcher die Verbindung hergestellt, wenn die Netzwerkverbindung erstellt ist. 5.2 Dispatcher examples
Bin bei meinem gescheiterten Versuch mein WLAN als Fallback für mein Powerline/Ethernet zu nutzen, darüber gestopert. (Falls einer von Euch einen Tipp zu dem Thema hat, gerne her damit. Bin mittlerweile bei Netzwerk-Bonding gelandet )