How To DreamOS: NFS Freigaben einbinden

    • How To DreamOS: NFS Freigaben einbinden

      Weil es immer wieder zu MIssverständnissen und falscher Bedienung rund um den Mount Manager im DreamOS gibt, habe ich mir überlegt, was man alles beachten soll bzw. muss und versuche das hier zusammenzufassen.
      Das Thema ist recht umfangreich und beginnt schon bei den Freigabeeinstellungen des entfernten NFS-Servers. Diese How To beschränkt sich erstmal darauf, freigegebene NFS Shares auf DreamOS Boxen einzubinden und was man dabei beachten soll/muss.


      Ich beschreibe hier die How To's in der Console, weil das 1. einfacher zu dokumentieren ist und 2. auch funktioniert wenn die GUI Probleme macht. Zudem geht das alles viel schneller als über die GUI ;)



      Das How To ist noch nicht vollständig und wird in den nächsten Tagen und Wochen noch erweitert und vervollständigt und wenn nötig korrigiert. Falls es jemanden interessiert muss er u.U. öfters hier reinschauen ob es ein Update gibt ;)




      Annahme:
      ein NAS, ein Raspberry Pi, eine Dreambox egal mit welchem OS etc. als NFS Server, ein NFS share ist freigegeben und diesen möchen wir auf einer DreamOS Box einbinden.

      Wir gehen davon aus, dass am entfernten NFS Server der/die share(s) korrekt freigegeben ist/sind, das sprengt sonst hier den Rahmen.



      Im Grunde sind erstmal 3 Schritte empfohlen, bevor man überhaupt versucht einen NFS Share wie auch immer zu mounten - das erspart einem so manchen Ärger :)



      1. Pakete auf der Client Box mit DreamOS prüfen:

      Damit der NFS share überhaupt eingebunden werden kann, muss das Paket nfs-utils-mount auf der Clientbox mit DreamOS installiert sein. Das sollte im Newnigma2 DreamOS Image bereits installiert sein, aber das lässt sich einfach überprüfen:
      nfs-utils-mount Installationsstatus überprüfen


      Quellcode

      1. root@dm900:~# dpkg -l|grep nfs-utils-mount
      2. ii nfs-utils-mount 1.3.3-r0.1 armhf userspace utilities for kernel nfs
      3. root@dm900:~#





      Falls das Paket nicht installiert ist, nachinstallieren.

      nfs-utils-mount installieren

      Quellcode

      1. apt-get update
      2. apt-get install nfs-utils-mount



      Um auf der DreamOS Box den Server Status remote überprüfen zu können, ist es auch ratsam folgende Pakete installiert zu haben. Falls nicht bereits installiert bitte nachinstallieren, entweder wie oben beschrieben in der Konsole oder über die GUI im Paketmanager.

      nfs-utils
      nfs-utils-client
      rpcbind





      Jetzt sollte die DreamOS Box fit für den NFS mount sein, jetzt überprüfen wir als nächstes den NFS Server Status: läuft der entfernte NFS Server? Was ist wie freigegeben etc.

      2. entfernten NFS Server Status prüfen:

      Ich gehe mal davon aus, dass alle genannten Pakete in Punkt 1 installiert sind. Wenn nicht, wird der eine oder andere ausgeführte Befehl im Terminal nicht funktonieren (... - command not found) - dann wieder zurück zu Punkt 1 ;)

      Ich möchte in diesem Beispiel einen NFS Share einbinden, der auf meinem Rasperry Pi mit der IP-Adresse 192.168.1.7 freigeben ist.

      Als erstes prüft man, ob der NFS Server überhaupt läuft und was freigeben ist. Das lässt sich einfach mit dem Befehl showmount -e IP-remote-NFS-Server überprüfen. Wenn der Befehl nichts oder ein Fehler ausgibt, läuft der entfernte NFS-Server nicht oder ist falsch konfiguriert. D.h. zuerst den NFS-Server überprüfen bzw. richtig konfigurieren, aber das ist nicht Teil dieses How To's.

      Hier erhalte ich eine Ausgabe:
      showmount -e 192.168.1.7

      Quellcode

      1. root@dm900:~# showmount -e 192.168.1.7
      2. Export list for 192.168.1.7:
      3. /media/hdd 192.168.1.0/24
      4. root@dm900:~#



      Was bedeutet die Ausgabe?
      Am Device mit der IP 192.168.1.7 läuft der NFS Server
      Es ist der Ordner "/media/hdd" für alle Clients im Subnet 192.168.1.0/255.255.255.0 freigegeben, d.h. es können nur Devices mit einer IP von 192.168.1.1-192.168.1.254 den Ordner /media/hdd über NFS mounten.

      Wir wissen aber nicht, wie der Ordner freigegeben ist: ro oder rw, sync oder async, tcp oder udp usw. Das würde uns folgender Befehl am NFS Server ausgeführt zeigen
      exportfs -v am NFS Server

      Quellcode

      1. piadmin@RPi:~$ sudo exportfs -v
      2. /media/hdd 192.168.1.0/24(rw,async,wdelay,insecure,root_squash,all_squash,no_subtree_check,anonuid=0,anongid=0)
      3. piadmin@RPi:~$



      Das bedeutet im wesentlichen das die freigegebenen Clients auf dem Share mit root Rechten schreiben dürfen, das mit async (weniger troubles) freigegeben wird.
      Aber das nur am Rande - ich gehe davon aus, dass jeder weiß, wie die NFS Freigabe auf seinem NFS Server aussieht





      Im DreamOS wird standardmäßig versucht mit NFS Version 4 NFS-Freigaben zu mounten. Aber nicht alle bzw vorwiegend. ältere NAS bzw. Linux Distributionen unterstützen NFS Version 4 nicht, sondern nur bis NFS Version 3
      Dann funktioniert der mount auf der DreamOS Box nicht und muss die NFS Version 3 explizit in den Mount Optionen angeben - aber dazu später.


      Man kann auf einer DreamOS Box remote die unterstützen NFS Versionen am Server überprüfen:

      3. Unterstütze NFS Versionen am Server herausfinden



      Man kann mit dem Befehl rpcinfo auf der DreamOS Box remote überprüfen, welche NFS Versionen vom Server unterstützt werden (das Paket rpcbind muss hiefür installiert sein).


      rpcinfo -p 192.168.1.7|grep "nfs"|sort

      Quellcode

      1. root@dm900:~# rpcinfo -p 192.168.1.7|grep "nfs"|sort
      2. 100003 2 tcp 2049 nfs
      3. 100003 2 udp 2049 nfs
      4. 100003 3 tcp 2049 nfs
      5. 100003 3 udp 2049 nfs
      6. 100003 4 tcp 2049 nfs
      7. 100003 4 udp 2049 nfs
      8. root@dm900:~#


      Was bedeuted diese Ausgabe?
      Der NFS Server auf meinem Rasperry Pi unterstützt die NFS Versionen 2, 3 und 4 jeweils mit dem Protokollen udp und tcp
      D.h. ich sollte den share ohne spezielle Optionen auf einer meiner DreamOS Boxen mounten können.

      Fehlen die Zeilen mit der Zahl 4 in der 2. Spalte unterstützt der entfernte NFS Server die NFS Version 4 nicht, d.h. mann muss die unterstützte NFS Version in den Mountoptionen auf der DreamOS Box explizit angeben. Aber dazu später







      Jetzt sind mal alle Vorbereitungen getroffen, jetzt geht es daran den NFS Share zu mounten. Dafür gibt es mehrere Möglichkeiten mit Vor- und Nachteilen. Aber dazu mehr in den nächsten Posts ...
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Im Grunde gibt es drei Möglichkeiten NFS Freigaben zu mounten:


      1. Manuell in der Konsole - das ist aber nicht dauerhaft. D.h. nach jedem reboot muss man jedes Mal erneut mount. Der manuelle mount ist aber bestens dazu geeignet erstmal zu testen und um die optimalen Optionen für einen dauerhaften NFS Network Mount herauszufinden
      2. Dauerhafter Mount über den Netzwerkbrowser bzw. Mountmanger. Wenn man das anstrebt ist es gut wenn man schon viele, in Punkt 1, gesammelte Optionen kennt. Das hilft ungemein und erspart den einen oder anderen Fehlversuch. Der Mountmanager ist (derzeit) leider nicht auch ganz fehlerfrei und macht den einen oder anderen Strich durch die Rechnung ....
      3. Ausschließlich durch systemd mount Einträge in der fstab (ohne Mountmanger), das ist einfach und übersichtlicher und schneller konfiguriert. Allerdings sollte man wissen was man macht. Die Konfiguration ist ähnlich wie bis OE2.0 in der auto.network aber unterscheidet sich doch wesentlich in einigen Punkten. Diese Option ist eher erfahrenen Usern vorbehalten - oder die sich dafür halten ;)


      Weil das How To in einem Post zu unübersichtlich wäre, werden ich (in den nächsten Tagen) die drei Varianten in den folgenden Beträgen versuchen näherzubringen
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Fred Bogus Trumper ()

    • Jetzt testet man, ob sie die Freigbabe überhaupt mounten lässt.

      Dazu erstellt man am besten einen Ordner in /tmp (wird bei einem reboot gelöscht) oder in /media (dauerhaft) oder verwendent dazu den für temporäre mounts gedachten Ordner /mnt auf der Box

      Was benötigt man für den mount? Ich verwende weiterhin die Werte des NFS Servers auf meinem Rasperry PI.
      Die IP des NFS Serves: 192.168.1.7
      den Namen bzw. den absoluten Pfad der NFS Freigabe: /media/hdd


      Also versucht man erstmal die Freigbe ohne spezielle Optionen zu über die Konsole auf einer DreamOS Box zu mounten, die IP und Freigabeordner an eure NFS Freigabe anpassen nicht vergessen!

      Quellcode

      1. root@dm900:~# mount -t nfs 192.168.1.7:/media/hdd /mnt
      2. root@dm900:~#




      Wenn der Befehl ohne Fehler wie oben ausgeführt wird hat der Mount geklappt. Ob gemountet wurde, kann man wie folgt prüfen:

      Mit dem Befehlt ls -l /Einhängepunkt prüfen, ob in /mnt jetzt die Daten der Freigabe sichtbar sind:
      ls -al /mnt

      Quellcode

      1. root@dm900:~# ls -l /mnt
      2. total 4
      3. drwxr-xr-x 2 root root 4096 Nov 10 2019 Filme
      4. -rw-r--r-- 1 root root 0 Nov 10 2019 test
      5. root@dm900:~#


      Der mount hat geklappt, ich sehe den Ordner "Filme" und die Datei "test" die in /media/hdd auf meinem Raspberry Pi liegen





      mit dem Befehl mount|grep IP-Adresse-NFS-Server sieht man alle Optionen mit denen gemountet wurde - sofern der mount geklappt hat
      also rw oder ro, Welches NFS Protokol, tcp oder udp usw.
      Ohne angegebene Mount Optionen werden die DreamOS default Optonen verwendet


      mount|grep 192.168.1.7

      Quellcode

      1. root@dm900:~# mount|grep 192.168.1.7
      2. 192.168.1.7:/media/hdd on /mnt type nfs4 (rw,relatime,vers=4.2,rsize=65536,wsize=65536,namlen=255,hard,proto=tcp,port=0,timeo=600,retrans=2,sec=sys,clientaddr=192.168.1.90,local_lock=none,addr=192.168.1.7)
      3. root@dm900:~#


      Diese Ausgabe ist etwas umfangreicher, dafür umso aufschlussreicher:

      Es wird mit NFS Version 4 (vers=4.2) gemountet
      das Protokoll ist tcp - ich möchte aber udp weil ich nur streame (udp ist performanter)
      es wird mit der Option "hard" gemountet, ich bevorzugabe hier "soft"
      auch meine bevorzugte Option "nolock" fehlt

      (die wichtigesten Optionen sind am Ende des Beitrages erklärt)



      Man möchte jetzt die default Mountoptionen nach seinen Wünschen ändern, dazu muss man erstmal die Freigabe wieder aushängen.

      Quellcode

      1. cd
      2. umount /mnt


      Der Befehl sollte ohne Fehler und ohne Ausgabe ausgeführt werden

      Jetzt möchte man die Freigabe mit speziellen bzw. bevorzugten Optionen mounte, das geschieht mit dem zusätzlichen Schalter -o - die Optionen werden nachgestellt

      in diesem Beispiel möchte ich udp statt default tcp, soft statt hard, nolock statt lock (ich gebe auch rw mit, obwohl das in dem Fall gar nicht nötig ist)

      Quellcode

      1. root@dm900:~# mount -t nfs -o rw,soft,nolock,udp 192.168.1.7:/media/hdd /mnt
      2. root@dm900:~#


      jetzt prüft man wieder ob gemountet wurde - und mit welchen Optionen
      mount|grep 192.168.1.7

      Quellcode

      1. root@dm900:~# mount|grep 192.168.1.7
      2. 192.168.1.7:/media/hdd on /mnt type nfs (rw,relatime,vers=3,rsize=32768,wsize=32768,namlen=255,soft,nolock,proto=udp,timeo=11,retrans=3,sec=sys,mountaddr=192.168.1.7,mountvers=3,mountport=59863,mountproto=udp,local_lockll,addr=192.168.1.7)
      3. root@dm900:~#


      Man sieht das jetzt wie gewünscht udp statt tcp verwendet wird, soft statt hard, nolock statt lock und rsize und wsize auf die Blockgröße 32768 automatisch reduziert wurde (durch die Änderung des Protokolles von tcp auf udp)


      Jetzt prüft man noch ob alles wunschgemäß funktionert. D.h. ob z.B. Aufnahmen ruckelfrei abgespielt werden können, ob man Schreibrechte hat usw. Wenn das funktioniert kann man über den mountmanager oder die fstab die NFS Freigabe dauerhaft einbinden.

      vorher nicht vergessen den temporären mount wieder auszuhängen - das war ja nur für den Test

      Quellcode

      1. cd
      2. umount /mnt



      Hier die gängisten NFS Mount Optionen hin, was sie bedeuten und welche Auswirkung sie haben



      Das ist nur ein unvollständiger Ausschnitt zum Teil hier entnommen (wiki.ubuntuusers.de/NFS/) und beschreibt die Optionen, welche im DreamOS default beim mounten über den Mountmanager bzw. mit systemd über die fstab verwendet werden.

      Eine vollständige deutschsprachige Auflistung und Erklärung aller möglichen Optionen findet man z.B hier: linux-praxis.de/lpic2/lpi201/manpages/nfs.html
      In der folgenden Übersicht wurden einige Teile von dieser Seite übernommen bzw. daraus zitiert.



      rw oder ro
      rw: Lese- und Schreibrechte (schreiben funktioniert nicht, wenn am NFS Server nur ro freigegeben wird!)
      ro: Nur Leserechte. Schreiben am NFS Share auch dann nicht möglich, wenn dieser mit rw freigegeben wurde


      hard oder soft
      hard: Bei Unterbrechungen ohne Timeout warten, bis der Server wieder normal erreichbar ist
      soft: Bei Unterbrechungen sofort einen Timeout machen (verhindert ein Einfrieren von Enigma2)


      lock oder nolock
      nolock: Deaktiviert das Sperren von Dateien. Wird gelegentlich für die Verbindung zu alten NFS-Servern benötigt


      vers=n bzw. nfsvers=n
      default: nfsvers=4

      Eine alternative RPC-Versions-Nummer wird benutzt, um den NFS-Daemon des Servers zu erreichen. Diese Option ist nützlich für Rechner, auf denen mehrere NFS-Server laufen.
      Im DreamOS wird NFS Version 4 default verwendet. Die Option macht als alos Sinn, wenn der zu erreichende NFS Server eine NFS Version < 4 verwendet und es beim mounten Probleme gibt
      Unterstützt der Server also nur die NFS Version 3, kann diese alternativ gesetzt werden

      nfsvers=3
      oder
      vers=3



      rsize=n und wsize=n
      wsize: Blockgröße der übertragenen Daten beim Schreiben festlegen
      rsize: Blockgröße der übertragenen Daten beim Lesen festlegen

      Mit diesen beiden Optionen kann man die Blockgröße der übertragenen Daten festlegen. In den meisten Fällen ist es nicht empfehlenswert, diese Optionen zu setzen. Server und Client handeln diese Werte selbst aus und erreichen so ein Maximum an Durchsatz. Falsche Werte können die Geschwindigkeit von NFS bis 50% reduzieren.


      Man sollte also diese Werte nur dann per Option ändern, wenn man Probleme beim Durchsatz hat, also z.b. Artefakte, Aussetzer beim Streamen usw.

      erlaubte, gängige r/wsize Werte
      4096
      8192
      16384
      32768
      65536


      tcp oder udp
      tcp: ist ein Verbindungsorientiertes Protokoll, d.h. ein Paket wird solange gesendet bis eine Empfangsbestätigung vom Empfänger gesendet wird
      udp: ist ein Verbindungslosess Protokoll, d.h. die Pakete werden einfach vom Server gesendet, es wird nicht geprüft ob es beim Client ankommt oder nicht


      udp ist performanter als tcp. Wenn es beim streamen über den NFS share zu Performance Problemen kommt, zuerst mal auf udp umstellen, anstatt an den rsize/wsize Werten rumzuschrauben

      Wenn man also über die Freigabe nur Aufnahmen, mkv's etc. streamt reicht udp, sollen auch Daten über die Freigabe kopiert werden, empfielt sich tcp

      Achtung!
      beim nfs mount in der Konsole wird default mit tcp gemountet
      beim nfs mount über den Mountmanger wird default mit udp gemountet

      timeo=n
      Der Wert in Zehntelsekunden bevor die erste Retransmission nach einemRPC-Timeout gesendet werden soll
      mountmanager default: timeo=5


      retrans=n
      Die Anzahl von Minor Timeouts und Retransmissionen, die vergehen müssen,bis ein Major Timeout angenommen wird

      mountmanager default: retrans=4



      retry=n
      Die Anzahl der Minuten, währen der eine NFS Operation im Vorder- oder Hintergrund erneut versucht werden soll, bevor aufgegeben wird
      mountmanager default: retry=0



      auto, noauto, nofail, x-systemd.automount, x-systemd.idle-timeout und x-systemd.device-timeout sind zusätzliche systemd mount Optionen, die im DreamOS in der fstab automatisch zusätzlich generiert werden, wenn man die Freigabe über den Mountmanger einbindet.
      Gruß Fred

      Die Dreambox ist tot, es lebe die Dreambox

      ¯\_(ツ)_/¯

      Quellcode

      1. root@dm920:~$ mount | grep "/ "
      2. /dev/mmcblk1p1 on / type ext4 (rw,relatime,data=ordered)
      3. root@dm920:~$

      Dieser Beitrag wurde bereits 12 mal editiert, zuletzt von Fred Bogus Trumper ()