Good to Know Database

Raspbian Wheezy: NFSv4 Server einrichten


Das Network File System (kurz NFS) ist ein Protokoll für Unix und Linux, welches den Zugriff auf Dateien über ein Netzwerk ermöglicht.

In der folgenden Anleitung soll Ihnen gezeigt werden, wie Sie auf Ihrem Raspberry Pi mit Raspbian als Betriebssystem einen NFSv4 Server einrichten können.

NFS-Daemon und NFS-Tools installieren

Zuerst sollten Sie die lokale Paketdatenbank aktualisieren und anschließend die benötigten Pakete installieren. Standardmäßig sollten bei Raspbian die Pakete nfs-common und rpcbind bereits installiert sein.

pi@raspberrypi ~ $ sudo apt-get update
pi@raspberrypi ~ $ sudo apt-get install nfs-kernel-server nfs-common rpcbind

Hinweis: Nach der Installation des Paketes nfs-kernel-server versucht die Installationsroutine den Service zu starten. Dies schlägt allerdings mit der folgenden Warnung fehl. Grund hierfür ist, dass noch keine Verzeichnisse in der NFS-Konfigurationsdatei /etc/exports angegeben sind. Dazu aber später mehr.

[warn] Not starting NFS kernel daemon: no exports. ... (warning).

NFS-Verzeichnisstruktur anlegen

Im nächsten Schritt sollten Sie eine Verzeichnisstruktur anlegen, welche später per NFS in Ihrem Netzwerk freigegeben wird. In diesem Beispiel soll das Verzeichnis /data/nfs erstellt und und für alle im Netzwerk freigegeben werden. Erstellen Sie dazu das Verzeichnis und ändern die Zugriffsrechte entsprechend ab.

pi@raspberrypi ~ $ sudo mkdir -p /data/nfs
pi@raspberrypi ~ $ sudo chmod 0777 /data/nfs/

NFS-Verzeichnisse freigeben

Damit der NFS-Service die Verzeichnisse im Netzwerk anbieten kann, müssen Sie diesem die Verzeichnisse mitteilen und auch die jeweiligen Zugriffsrechte festlegen. Dies erfolgt in der Konfigurationsdatei /etc/exports welche Sie mit einem Editor bearbeiten können.

pi@raspberrypi ~ $ sudo vi /etc/exports

Um das Verzeichnis /data/nfs für das Subnetzwerk 192.168.10.0/24 freizugeben und damit Benutzer auf dieser Freigabe auch Schreiben und nicht nur Lesen können, fügen Sie am Ende der Datei die folgende Zeile ein. Sollten Sie ein anderes Subnetzwerk verwenden, ändern Sie die Konfiguration entsprechend ab. Beachten Sie dabei aber, dass sich zwischen der Netzwerkadresse und den Optionen kein Leerzeichen befindet.

/data/nfs                       192.168.10.0/24(rw,sync,no_subtree_check,fsid=0)

NFS-Server starten

Wenn Sie jetzt überprüfen ob die Services rpcbind, nfs-common und nfs-kernel-server laufen, sollten Sie feststellen, dass alle drei Services aktuell nicht ausgeführt werden.

pi@raspberrypi ~ $ sudo service rpcbind status
[FAIL] rpcbind is not running ... failed!
pi@raspberrypi ~ $ sudo service nfs-common status
rpc.statd not running
pi@raspberrypi ~ $ sudo service nfs-kernel-server status
nfsd not running

Starten Sie jetzt nacheinander die drei Services.

pi@raspberrypi ~ $ sudo service rpcbind start
[ ok ] Starting rpcbind daemon....
pi@raspberrypi ~ $ sudo service nfs-common start
[ ok ] Starting NFS common utilities: statd idmapd.
pi@raspberrypi ~ $ sudo service nfs-kernel-server start
[ ok ] Exporting directories for NFS kernel daemon....
[....] Starting NFS kernel daemon: nfsdrpc.nfsd: address family inet6 not supported by protocol TCP
 mountdrpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
. ok

Wie Sie sehen, liefert der nfs-kernel-server beim Starten noch ein paar Fehlermeldungen. Dies liegt daran, dass Raspbian standardmäßig keine aktivierte IPv6-Unterstützung mitbringt. Damit diese Meldungen im reinen IPv4-Betrieb nicht mehr auftreten, müssen Sie eine kleine Änderung an der Konfigurationsdatei /etc/netconfig vornehmen.

pi@raspberrypi ~ $ sudo vi /etc/netconfig

Suchen Sie in dieser Konfigurationsdatei die folgenden Zeilen.

udp6       tpi_clts      v     inet6    udp     -       -
tcp6       tpi_cots_ord  v     inet6    tcp     -       -

Fügen Sie am Anfang der Zeilen ein Kommentarzeichen(#) ein und speichern die Datei ab.

#udp6       tpi_clts      v     inet6    udp     -       -
#tcp6       tpi_cots_ord  v     inet6    tcp     -       -

Wenn Sie den nfs-kernel-server jetzt neu starten, sollten die Fehlermeldungen nicht mehr erscheinen.

pi@raspberrypi ~ $ sudo service nfs-kernel-server restart
[ ok ] Stopping NFS kernel daemon: mountd nfsd.
[ ok ] Unexporting directories for NFS kernel daemon....
[ ok ] Exporting directories for NFS kernel daemon....
[ ok ] Starting NFS kernel daemon: nfsd mountd.

Funktionstest

Nachdem Sie jetzt alle Dienste konfiguriert und auch gestartet haben, sollten Sie einen Funktionstest durchführen. Dazu melden Sie sich an einem zweiten Linux-System in Ihrem Netzwerk an (in diesem Beispiel ein CentOS 6 System). Zuerst können Sie durch den Befehl showmount überprüfen ob der NFS-Server die freigegeben Verzeichnisse auch anbietet.

[root@centos6 ~]# showmount -e 192.168.10.52
Export list for 192.168.10.52:
/data/nfs        192.168.10.0/24

Anschließend können Sie das NFS-Verzeichnis mit mount zum Beispiel unter /mnt einhängen

[root@centos6 ~]# mount -t nfs4 192.168.10.52:/ /mnt

Ob Sie auch den gewünschten Schreibzugriff haben, können Sie feststellen indem Sie eine Datei anlegen.

[root@centos6 ~]# touch /mnt/testfile
[root@centos6 ~]# ls -la /mnt/
insgesamt 8
drwxrwxrwx   2 nobody nobody 4096 18. Nov 10:46 .
dr-xr-xr-x. 26 root   root   4096  9. Nov 16:00 ..
-rw-r--r--   1 nobody nobody    0 18. Nov 10:46 testfile

Nachdem Sie den Test erfolgreich durchgeführt haben, sollten Sie das NFS-Verzeichnis wieder aushängen.

[root@centos6 ~]# umount mount /mnt

Autostart des NFS-Servers einrichten

Sollten Sie Ihren Raspberry Pi neu starten, wird aktuell der NFS-Server (nfs-kernel-server) sowie die Dienste rpcbind und nfs-common nicht automatisch gestartet. Dies werden wir in diesem Abschnitt ändern.

Wenn Sie mit den folgenden Befehlen die Sym-Links auf die Init-Skripte überprüfen, sollten Sie für die drei Services die folgenden Sym-Links vorfinden.

pi@raspberrypi ~ $ sudo find /etc/rc* -name *rpcbind
/etc/rc0.d/K05rpcbind
/etc/rc1.d/K05rpcbind
/etc/rc2.d/K05rpcbind
/etc/rc3.d/K05rpcbind
/etc/rc4.d/K05rpcbind
/etc/rc5.d/K05rpcbind
/etc/rc6.d/K05rpcbind
/etc/rcS.d/K11rpcbind
pi@raspberrypi ~ $ sudo find /etc/rc* -name *nfs-common
/etc/rc0.d/K05nfs-common
/etc/rc1.d/K05nfs-common
/etc/rc2.d/K05nfs-common
/etc/rc3.d/K05nfs-common
/etc/rc4.d/K05nfs-common
/etc/rc5.d/K05nfs-common
/etc/rc6.d/K05nfs-common
/etc/rcS.d/K12nfs-common
pi@raspberrypi ~ $ sudo find /etc/rc* -name *nfs-kernel-server
/etc/rc0.d/K01nfs-kernel-server
/etc/rc1.d/K01nfs-kernel-server
/etc/rc2.d/S01nfs-kernel-server
/etc/rc3.d/S01nfs-kernel-server
/etc/rc4.d/S01nfs-kernel-server
/etc/rc5.d/S01nfs-kernel-server
/etc/rc6.d/K01nfs-kernel-server

Wie Sie den Ausgaben entnehmen können, gibt es standardmäßig für rpcbind und nfs-common nur Stop-Skripte (auch Kill-Skripte genannt). Diese erkennen Sie an dem K am Anfang des Dateinamens. Das bedeutet, dass auch der Service nfs-kernel-server nicht automatisch starten wird, weil dieser den Service rpcbind benötigt.

Deshalb sollten Sie jetzt die Init-Skripte für die drei Dienste der Reihe nach entfernen. Starten Sie mit dem nfs-kernel-server und überprüfen anschließend erneut ob noch ein Sym-Link auf das Init-Skript existiert.

pi@raspberrypi ~ $ sudo insserv -r nfs-kernel-server
pi@raspberrypi ~ $ sudo find /etc/rc* -name *nfs-kernel-server

Als zweiten Schritt nehmen Sie sich den Dienst nfs-common vor.

pi@raspberrypi ~ $ sudo insserv -r nfs-common
pi@raspberrypi ~ $ sudo find /etc/rc* -name *nfs-common
/etc/rcS.d/K12nfs-common

Wie Sie sehen, ist hier ein Sym-Link nicht entfernt worden. Dies sorgt dafür, dass Sie den Service rpcbind nicht aus dem Init-System entfernen können. Löschen Sie den verbleibenden Sym-Link einfach manuell mit dem folgenden Befehl.

pi@raspberrypi ~ $ sudo rm -f /etc/rcS.d/K12nfs-common

Im letzten Schritt können Sie jetzt den Service rpcbind aus dem Init-System entfernen.

pi@raspberrypi ~ $ sudo insserv -r rpcbind
pi@raspberrypi ~ $ sudo find /etc/rc* -name *rpcbind
/etc/rcS.d/K11rpcbind

Auch hier ist ein Sym-Link übersehen worden, welchen Sie löschen sollten.

pi@raspberrypi ~ $ sudo rm -f /etc/rcS.d/K11rpcbind

Nachdem jetzt alle Sym-Links auf die Init-Skripte gelöscht wurden, können Sie diese mit den Standardeinstellungen der Dienste erneut erstellen. Rufen Sie dazu die folgenden Befehle auf.

pi@raspberrypi ~ $ sudo insserv rpcbind
pi@raspberrypi ~ $ sudo insserv nfs-common
pi@raspberrypi ~ $ sudo insserv nfs-kernel-server

Zur Sicherheit überprüfen Sie die erstellten Sym-Links erneut mit den folgenden Befehlen. Es sollte jetzt für jeden Service ein Start-Skript in den Runleveln 2, 3, 4 und 5 sowie jeweils ein Kill-Skript in den Runleveln 0, 1 und 6 existieren.

pi@raspberrypi ~ $ sudo find /etc/rc* -name *rpcbind
/etc/rc0.d/K05rpcbind
/etc/rc1.d/K05rpcbind
/etc/rc2.d/S11rpcbind
/etc/rc3.d/S11rpcbind
/etc/rc4.d/S11rpcbind
/etc/rc5.d/S11rpcbind
/etc/rc6.d/K05rpcbind
/etc/rcS.d/S11rpcbind
pi@raspberrypi ~ $ sudo find /etc/rc* -name *nfs-common
/etc/rc0.d/K05nfs-common
/etc/rc1.d/K05nfs-common
/etc/rc2.d/S12nfs-common
/etc/rc3.d/S12nfs-common
/etc/rc4.d/S12nfs-common
/etc/rc5.d/S12nfs-common
/etc/rc6.d/K05nfs-common
/etc/rcS.d/S12nfs-common
pi@raspberrypi ~ $ sudo find /etc/rc* -name *nfs-kernel-server
/etc/rc0.d/K01nfs-kernel-server
/etc/rc1.d/K01nfs-kernel-server
/etc/rc2.d/S14nfs-kernel-server
/etc/rc3.d/S14nfs-kernel-server
/etc/rc4.d/S14nfs-kernel-server
/etc/rc5.d/S14nfs-kernel-server
/etc/rc6.d/K01nfs-kernel-server

Ob der NFS-Server bei einem Neustart automatisch gestartet wird, können Sie einfach durch einen Neustart überprüfen.

pi@raspberrypi ~ $ sudo shutdown -r now

Gegebenenfalls sollten Sie im Anschluss einen erneuten Funktionstest durchführen.


Dieser Eintrag wurde am 18.11.2012 erstellt und zuletzt am 25.09.2016 bearbeitet.

Direkter Link zu dieser Seite: http://www.gtkdb.de/index_36_1976.html

[ Zur Startseite ]   [ Zur Kategorie ]


Valid XHTML 1.0 Transitional Valid CSS Valid Atom 1.0

© 2004-2018 by Georg Kainzbauer