File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounten
File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounten
Hallo zusammen,
ich habe einen Raspberry-Pi im 24/7-Betrieb als auch einen separaten Debian-Dateiserver, der jedoch nur sporadisch läuft. Der Raspberry-Pi soll nun automatisch Verzeichnisse des Debian-Dateiservers via NFS4 einbinden, sobald der Debian-Dateiserver gestartet wird.
Momentan schwebt mir ein Skript vor, dass alle 5min via Crontab auf dem Raspberry-Pi ausgeführt wird. Dieses Skript führt ein Ping Abfrage durch (der Debian-Dateiserver hat eine feste IP), um festzustellen ob der Dateiserver verfügbar ist. Falls ja, wird ein entsprechender mount-Befehl durchführt.
Bevor ich mich jedoch in bash/Skriptsprache einarbeite, wollte ich hier mal kurz nachfragen, ob es vielleicht elegantere Lösungen für solche Situation gibt.
Danke vorab!
ich habe einen Raspberry-Pi im 24/7-Betrieb als auch einen separaten Debian-Dateiserver, der jedoch nur sporadisch läuft. Der Raspberry-Pi soll nun automatisch Verzeichnisse des Debian-Dateiservers via NFS4 einbinden, sobald der Debian-Dateiserver gestartet wird.
Momentan schwebt mir ein Skript vor, dass alle 5min via Crontab auf dem Raspberry-Pi ausgeführt wird. Dieses Skript führt ein Ping Abfrage durch (der Debian-Dateiserver hat eine feste IP), um festzustellen ob der Dateiserver verfügbar ist. Falls ja, wird ein entsprechender mount-Befehl durchführt.
Bevor ich mich jedoch in bash/Skriptsprache einarbeite, wollte ich hier mal kurz nachfragen, ob es vielleicht elegantere Lösungen für solche Situation gibt.
Danke vorab!
----------------
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Ich kenne keine Patentloesung fuer diesen Anwendungsfall. Bei Moeglichkeit solltest du versuchen, dass dein Dateiserver sich beim herunterfahren beim Raspberry Pi (ab)meldet. Es genuegt ja ein "ssh dateiserver umount /media/nfsshare" vor dem deaktivieren der Netzwerkkarte, um dem Raspberry Pi zu signalisieren, dass das Share nicht weiter gemountet sein sollte. Dies hat aber auch den ein oder anderen Fallstrick. Wenn beispielsweise gerade ein Zugriff auf den NFS-Share erfolgt, dann misslingt der umount-Versuch. Ausserdem sollte er so weit vor dem deaktivieren der Netzwerkkarte passieren, dass der Raspberry Pi noch eine Chance hat den Share auszuhaengen. Das sind meine Gedanken zu dem Thema.
Gruss syssi
Gruss syssi
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Besten Dank an syssi, für die guten Gedanken zu dem Thema (ich bin immer wieder erstaunt wie offen und freundlich die Nutzer dieses Forums sind ... das ist nicht in jedem Forum so).
Also (folgendes ist für Syssi sicherlich langeweilig, aber vielleicht hilft es einem anderen Neuling, der hier mal drüber stolpert):
Auf meinem Dateiserver habe ich zunächst NFS4 installiert:
Für das Verzeichnis, auf das der Raspberry zugreifen soll, auf dem Dateiserver eine Pseudo-Verzeichnisstruktur angelegt:
Zwischen dem Pseudo-Verzeichnis und dem tatsächlich auf dem Raspberry-Pi anzuzeigenden Verzeichnis ist eine Verbindung herzustellen. Dazu ist /etc/fstab entsprechend zu ergänzen:
Dann ist auf dem Dateiserver eine Datei /etc/exports anzulegen bzw. anzupassen, die bei mir folgenden Inhalt hat:
Reboot.
Auf dem Raspberry dann:
Unter /home ein Verzeichnis erstellt, in dem das <Pseudoverzeichnis_das_auf_dem_Raspberry_angezeigt wird> samt Inhalt erscheinen soll.
Das ist alles Standardvorgehen zum einbinden von Verzeichnissen über NFS4 (--> es gibt alles noch bessere Erläuterungen, als die sehr kurze oben von mir!). Als nächstes würde man nun in die fstab beim Raspberry einen Eintrag machen, dass dieser beim hochfahren automatisch das Verzeichnis von dem Dateiserver mounten.
Und dieses automatische mounten darf bei mir nun nicht der Fall sein!
Manuell kann ich ja vom Raspberry mit folgendem Befehl das gewünschten mounten ausführen:
Und alles was ich doch jetzt will: sobald der Dateiserver hochfährt, soll er diesen mount-Befehl auf dem Raspberry-Pi ausführen. Ich bin mir sicher, dass kann man mit ssh bewerkstelligen ... und genau da arbeite ich mich jetzt als nächstes ein.
[to be continued]
Also (folgendes ist für Syssi sicherlich langeweilig, aber vielleicht hilft es einem anderen Neuling, der hier mal drüber stolpert):
Auf meinem Dateiserver habe ich zunächst NFS4 installiert:
Code: Alles auswählen
aptitude install nfs-kernel-server nfs-common portmap
Code: Alles auswählen
su
mkdir /home/exports_zum_raspberry
mkdir /home/exports_zum_raspberry/<Pseudoverzeichnis_das_auf_dem_Raspberry_angezeigt wird>
Code: Alles auswählen
<Verzeichnis_auf_Dateiserver_dessen_Inhalt_auf_dem_RaspPi_angezeigt werden_soll> /home/exports_zum_raspberry/<Pseudoverzeichnis_das_auf_dem_Raspberry_angezeigt wird> none rw,bind 0 0
Code: Alles auswählen
/home/exports_zum_raspberry <IP vom Raspberry>(rw,sync,no_root_squash,insecure,no_subtree_check,fsid=0)
/home/exports_zum_raspberry/<Pseudoverzeichnis_das_auf_dem_Raspberry_angezeigt wird> <IP vom Raspberry>(rw,nohide,sync,no_root_squash,insecure,no_subtree_check)
Auf dem Raspberry dann:
Unter /home ein Verzeichnis erstellt, in dem das <Pseudoverzeichnis_das_auf_dem_Raspberry_angezeigt wird> samt Inhalt erscheinen soll.
Das ist alles Standardvorgehen zum einbinden von Verzeichnissen über NFS4 (--> es gibt alles noch bessere Erläuterungen, als die sehr kurze oben von mir!). Als nächstes würde man nun in die fstab beim Raspberry einen Eintrag machen, dass dieser beim hochfahren automatisch das Verzeichnis von dem Dateiserver mounten.
Und dieses automatische mounten darf bei mir nun nicht der Fall sein!
Manuell kann ich ja vom Raspberry mit folgendem Befehl das gewünschten mounten ausführen:
Code: Alles auswählen
sudo mount -t nfs4 -o soft,timeo=180,intr <Dateiserver-IP>:/ <Zielverzeichnis_auf_RaspPi>
[to be continued]
----------------
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Du solltest du nicht SSH Public-Key Authentifizierung umsehen, bei welcher du dem Schluessel kein Passwort gibst:
Viel Erfolg!
Code: Alles auswählen
# Dateiserver beliebiger Benutzer
ssh-keygen <return><return><return>
ssh-copy-id -i ~/.ssh/id_rsa.pub user@raspberrypi
# (kann auch Root sein. Jenachdem faellt spaeter dein Kommando aus)
# Nun solltest du folgendes Verbindung ohne Passwort aufbauen koennen
ssh user@raspberrypi # ggf. einmal mit "yes" bestaetigen
exit
# Remote Befehle ausfuehren geht nun auch
ssh user@raspberrypi date
# Nun kannst du dir ein Startskript basteln (Eintrag in der /etc/rc.local?), welches folgendes tut:
ssh -i /home/user/.ssh/id_rsa user@raspberrypi "sudo mount ..."
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Wäre iSCSI ne alternative? Da wird das ganze "einigermaßen" selbständig ausgehandelt und Verbidnungen wiederhergestellt.
Die Mountpunkte müssten aber trotzdem wieder eingehängt werden, da nur das Gerät wieder automatisch verbunden wird. Lässt sich ja aber per cronjob einfach prüfen: Mountpunkt leer? -> umount && mount, ggf mit nochmaliger abfrage obs dann passt. Man sollte nur die Dienste die von den Mountpunkten abhängen prüfen lassen ob alles OK ist (oder die dienste stoppen wenn nicht erfolgreich gemountet werden konnte), sonst wird ins lokale Dateisystem geschrieben anstatt auf das Ziel!
Die Mountpunkte müssten aber trotzdem wieder eingehängt werden, da nur das Gerät wieder automatisch verbunden wird. Lässt sich ja aber per cronjob einfach prüfen: Mountpunkt leer? -> umount && mount, ggf mit nochmaliger abfrage obs dann passt. Man sollte nur die Dienste die von den Mountpunkten abhängen prüfen lassen ob alles OK ist (oder die dienste stoppen wenn nicht erfolgreich gemountet werden konnte), sonst wird ins lokale Dateisystem geschrieben anstatt auf das Ziel!
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Ich habe nur eine vage Vorstellung von iSCSI. Kann es sein, dass damit lediglich das Target als Block-Device im Netzwerk verfuegbar gemacht wird, so dass nur ein Host dieses Target mounten kann oder koennen auch mehrere Hosts simultan Zugriff auf das Dateisystem des Targets erhalten? Ich vermute nicht.r4pt0r hat geschrieben:Wäre iSCSI ne alternative?
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
zunächste nochmals Danke, für eure weiterhin tollen Vorschläge (ich weiß ich wiederhole mich, aber was den gegenseitigen Umgang angeht ist dieses Forum wirklich sehr, sehr positiv!).
Leider sagt mir iSCSI (noch?) nicht viel. Aber eine Voraussetzung ist schon, dass mind. zwei Rechner das Verzeichnis auf dem Dateiserver mounten können müssen. Wie auch immer, da ich dies jedoch für mein kleines Netzwerk zuhause mache, muss ich mich aus zeitlichen Gründen zunächst auf das beschränken, womit ich bereits ein wenig Erfahrung gesammelt habe. Darum bitte verstehen, dass ich zunächst auf der NSF4-Schiene weiterfahren werde - was jedoch nicht bedeuten soll, dass ihr hier gerne die iSCSI Möglichkeit weiter vertiefen könnt (vielleicht springe ich da später nochmals drauf).
Als nächstes werde ich mal den SSH Public-Key Ansatz von syssi versuchen umzusetzen. Zudem habe ich den Vorteil, dass der Dateiserver nur Nachts über ein Script runtergefahren wird (aufgerufen durch einen Cronjob). Diese Skript kann man sicherlich noch derart erweitern, dass ein umount ausgeführt wird (um den anfänglichen Gedanken von syssi gerecht zu werden).
Sobald ich es erfolgreich umgesetzt habe, werde ich dies dann für potentzielle Nachahmer hier wieder posten.
Leider sagt mir iSCSI (noch?) nicht viel. Aber eine Voraussetzung ist schon, dass mind. zwei Rechner das Verzeichnis auf dem Dateiserver mounten können müssen. Wie auch immer, da ich dies jedoch für mein kleines Netzwerk zuhause mache, muss ich mich aus zeitlichen Gründen zunächst auf das beschränken, womit ich bereits ein wenig Erfahrung gesammelt habe. Darum bitte verstehen, dass ich zunächst auf der NSF4-Schiene weiterfahren werde - was jedoch nicht bedeuten soll, dass ihr hier gerne die iSCSI Möglichkeit weiter vertiefen könnt (vielleicht springe ich da später nochmals drauf).
Als nächstes werde ich mal den SSH Public-Key Ansatz von syssi versuchen umzusetzen. Zudem habe ich den Vorteil, dass der Dateiserver nur Nachts über ein Script runtergefahren wird (aufgerufen durch einen Cronjob). Diese Skript kann man sicherlich noch derart erweitern, dass ein umount ausgeführt wird (um den anfänglichen Gedanken von syssi gerecht zu werden).
Sobald ich es erfolgreich umgesetzt habe, werde ich dies dann für potentzielle Nachahmer hier wieder posten.
----------------
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Die Sache mit SSH Public-Key Authentifizierung habe ich nahezu exakt so durchgeführt wie von syssi beschrieben - und was soll ich sagen: einwandfrei.
(
Nach als Hinweis für Nachahmer:
user@raspberrypi
user --> austauschen durch Benutzernamen auf dem Raspberry-Pi, unter dem man sich anmelden will
raspberrypi --> da mein Raspberrypi eine fest IP hat, habe ich hier diese IP angegeben
)
Da ich noch nie so richtig durch diese /etc/rc.??? durchgestiegen bin, habe ich den Weg über "crontab -e" gewählt (Einträge im Crontab):
Zum einhängen/mounten:
(Hinweis: bei crontab muss der gesamte Pfad /usr/bin/ssh angegeben werden - nur ssh klappt nicht).
Zum aushängen/umount:
Das aushängen denke ich so machen zu können, da der Dateiserver nicht manuell sondern auch per Crontab zwei Minuten später runtergefahren wird:
Ich denke meine größte Schwachstelle ist jetzt noch der von syssi eingangs beschriebene "Fallstrick", dass der umount eventuell nicht durchgeführt wird, wenn gerade ein NFS-Zugriff erfolgt.
(
Nach als Hinweis für Nachahmer:
user@raspberrypi
user --> austauschen durch Benutzernamen auf dem Raspberry-Pi, unter dem man sich anmelden will
raspberrypi --> da mein Raspberrypi eine fest IP hat, habe ich hier diese IP angegeben
)
Da ich noch nie so richtig durch diese /etc/rc.??? durchgestiegen bin, habe ich den Weg über "crontab -e" gewählt (Einträge im Crontab):
Zum einhängen/mounten:
Code: Alles auswählen
@reboot /usr/bin/ssh <Raspberry Benutzer>@<Raspberry IP> "sudo mount -t nfs4 -o soft,timeo=180,intr <Dateiserver-IP>:/ <Zielverzeichnis auf dem Raspberry>"
Zum aushängen/umount:
Code: Alles auswählen
43 22 * * 5,6 /usr/bin/ssh <Raspberry Benuter>@<Raspberry IP> "sudo umount <Dateiserver IP>:/"
Code: Alles auswählen
45 23 * * 5,6 /sbin/shutdown -h now.
----------------
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
-
- Beiträge: 2951
- Registriert: 24.12.2010 16:50:59
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: Rheinland
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Funktioniert das?
Ich wuerde vermuten, dass es fehlschlaegt, weil er den private Key (id_rsa) nicht findet. Man muss ihn vermutlich mit angeben:
Code: Alles auswählen
@reboot /usr/bin/ssh <Raspberry Benutzer>@<Raspberry IP> "sudo mount -t nfs4 -o soft,timeo=180,intr <Dateiserver-IP>:/ <Zielverzeichnis auf dem Raspberry>"
Code: Alles auswählen
@reboot /usr/bin/ssh -i /pfadzumkey/.ssh/id_rsa <Raspberry Benutzer>@<Raspberry IP> "sudo mount -t nfs4 -o soft,timeo=180,intr <Dateiserver-IP>:/ <Zielverzeichnis auf dem Raspberry>"
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Alternativ im Home-Verzeichnis des Benutzers mit dem die SSH-Verbindung aufgebaut wird im Ordner ~/.ssh eine datei "config" anlegen mit folgendem Inhalt:
Den Key natürlich entsprechend ablegen bzw den Pfad ändern.
So kann man sich zukünftig auch einfach per "ssh user@raspberry" anmelden ohne Passworteingabe.
Wenns per cronjob als root ausgeführt wird gehts natürlich auch: /root/.ssh
Code: Alles auswählen
host <raspberry-hostname>
IdentityFile ~/.ssh/key_rsa
So kann man sich zukünftig auch einfach per "ssh user@raspberry" anmelden ohne Passworteingabe.
Wenns per cronjob als root ausgeführt wird gehts natürlich auch: /root/.ssh
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Den Gedanken kann ich nachvollziehen. Habe es jetzt auch 2x getestet ohne den private Key explizit anzugeben. Habe dann auch noch mal kurz in /var/log/syslog mit "cat syslog | grep ssh" nachgeschaut und da steht nursyssi hat geschrieben: Ich wuerde vermuten, dass es fehlschlaegt, weil er den private Key (id_rsa) nicht findet. Man muss ihn vermutlich mit angeben:
Code: Alles auswählen
Nov 3 06:36:35 <dateiserver> /USR/SBIN/CRON[2789]: (root) CMD (/usr/bin/ssh <User>i@<Rasp-IP> "sudo mount -t nfs4 -o soft,timeo=180,intr <Dateiserver-IP>:/ <Zielverzeichnis>")
Code: Alles auswählen
Nov 3 06:36:37 raspberrypi sshd[18361]: Accepted publickey for <Benutzer> from <IP Dateiserver> port <Portnummer> ssh2
----------------
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
Dateiserver: Eigenbau; Gigabit-Lan, Sata-600, AMD Athlon
Mail und Mediaserver: Raspberry Pi
Modem: ne' Kiste gestellt von UnityMedia (suche noch nach alternativen)
Router: TP-Link, mit dd-WRT geflasht
Arbeitscomputer: Eigenbau; Gigabit-Lan, Sata-600, AMD Phenom II
Re: File-Server Verzeichnisse mit Raspberry-Pi (24/7) mounte
Ich würde das mit autofs machen.
Der rpi würde den autofs daemon installiert bekommen.
Und zwar so konfiguriert das das nfs share bei einem Zugriff automatisch gemounted wird. Nach einer Zeitdauer von maximal 30 Sekunden würde ich dann den unmount durchführen lassen.
Das würde bedeuten, die Daten wären bei Zugriff verfügbar. Der Server könnte im Normalfall jederzeit heruntergefahren werden. Wenn der Zugriff erfolgt ohne das der Server online ist, dann funktionierts halt nicht. Wenn der Server wieder online wäre könnte das Verzeichnis jederzeit wieder (automatisch) gemounted werden.
Es besteht allerdings immer das Risiko das der Server runtergefahren wird während der rpi noch das Verzeichnis eingehängt hat.
Das lässt sich meines Wissens nach nur auf der Seite des Servers abfragen und ggf. verhindern. Das Problem ist aber bei der jetzigen Lösung auch nicht gelöst.
Der rpi würde den autofs daemon installiert bekommen.
Und zwar so konfiguriert das das nfs share bei einem Zugriff automatisch gemounted wird. Nach einer Zeitdauer von maximal 30 Sekunden würde ich dann den unmount durchführen lassen.
Das würde bedeuten, die Daten wären bei Zugriff verfügbar. Der Server könnte im Normalfall jederzeit heruntergefahren werden. Wenn der Zugriff erfolgt ohne das der Server online ist, dann funktionierts halt nicht. Wenn der Server wieder online wäre könnte das Verzeichnis jederzeit wieder (automatisch) gemounted werden.
Es besteht allerdings immer das Risiko das der Server runtergefahren wird während der rpi noch das Verzeichnis eingehängt hat.
Das lässt sich meines Wissens nach nur auf der Seite des Servers abfragen und ggf. verhindern. Das Problem ist aber bei der jetzigen Lösung auch nicht gelöst.