Zum Inhalt springen

NFS

Aus Foxwiki

NFS - Network File System

Beschreibung

Installation

Syntax

Argumente

Optionen

Umgebung

Rückgabewert

Konfiguration

Dateien

Anwendung

Sicherheit

Dokumentation

RFC

Man-Page

Info-Pages

Siehe auch

Links

Projekt

Weblinks

Client

Das Network Filesystem ist die gebräuchlichste Methode unter Unix, um Verzeichnisse über Rechnergrenzen hinweg verfügbar zu machen. Einen kurzen Abriss zur Historie und Intention des NFS erhalten Sie im Abschnitt zum NFS-Server .

Voraussetzungen

Kernelunterstützung

Die Unterstützung des NFS-Dateisystems ist Aufgabe des Kernels. Vermutlich integriert der aktuelle Kernel bereits die erforderliche Eigenschaft; ein Blick in die Datei /proc/filesystems schafft Gewissheit:

user@sonne> cat /proc/filesystems
nodev   sockfs
nodev   tmpfs
nodev   pipefs
nodev   proc
        ext2
nodev   devpts
        reiserfs

nodev supermount

Im Beispiel fehlt offensichtlich ein entsprechender Eintrag für das NFS-Dateisystem. Bei aktuellen Kerneln, die heutigen Distributionen beiliegen, muss das noch nichts bedeuten... Eventuell ist die Unterstützung im Kernel nur als Modul kompiliert, und solange das Modul noch nicht geladen wurde, wird der Kernel das Dateisystem auch nicht kennen. Das Modul sollte nun von Hand geladen werden:

# modprobe nfs

Eine Ausschrift der Art modprobe: Can't locate module nfs resultiert entweder aus einer falschen Konfiguration der Modulabhängigkeiten (unwahrscheinlich) oder aber aus einer fehlenden Unterstützung durch den Kernel. Die Generierung eines neuen Kernels wird notwendig sein...

Bei erfolgreichem modprobe-Aufruf erscheint folgende Zeile am Ende der Datei /proc/filesystems:

user@sonne> tail -2 /proc/filesystems
nodev   supermount

nodev nfs

Portmapper

Für die Grundfunktionalität eines NFS-Clients ist die Aktivierung des Portmappers nicht notwendig. Erst wenn Programme mit Dateisperren auf importierten NFS-Verzeichnissen arbeiten, werden auf Clientseite zwei RPC-Dienste (rpc.lockd und rpc.statd) und damit der Portmapper erforderlich.

Das Vorgehen zum Start des Portmappers und der beiden Dienste erfolgt analog zur Beschreibung im NFS-Server-Abschnitt . Beachten Sie auch die dortigen Hinweise zu ggf. erforderlichen Sicherheitseinstellungen in den Dateien /etc/host.allow und /etc/hosts.deny. Ebenfalls in der Abhandlung zum Server finden Sie eine Diskussion zur Arbeitsweise von Network-Lock-Manager (rpc.lockd) und Network-Status-Monitor (rpc.statd).

Bei aktuelleren RedHat- und SuSE-Distributionen finden Sie oft ein Skript /etc/init.d/nfs, über das Sie komfortabel den Client starten und beenden können (genau genommen startet das Skript auch nur die beiden RPC-Dienste und mountet alle in der Datei /etc/fstab erwähnten NFS-Dateisysteme).

Mounten eines NFS-Dateisystems

Welcher Server bietet was?

Für gewöhnlich wird der Administrator eines NFS-Servers die Verzeichnisse nur für konkrete Rechner exportieren und den Verantwortlichen dieser Clients alle notwendigen Informationen zum Zugriff zukommen lassen. Dennoch kann von einem Client leicht verifziert werden, ob ein Rechner als NFS-Server fungiert und welche Verzeichnisse er welchen Rechnern zur Verfügung stellt.

Das Kommando showmount dient zur Abfrage eines Servers. Werden, abgesehen vom Servernamen, keine weiteren Optionen angegeben, so werden die aktuell zum Server verbundenen Clients aufgelistet:

user@venus> showmount sonne.galaxis.de
All mount points on sonne.galaxis.de:
erde.galaxis.de

venus.galaxis.de

Aus Sicht eines NFS-Clients ist die Option -e nützlich, die dem Server Auskunft über die exportierten Verzeichnisse entlockt:

user@venus> showmount -e sonne.galaxis.de
Export list for sonne.galaxis.de:
/home      *.galaxis.de

/usr/share *.galaxis.de

Eine umfassende Beschreibung von showmount finden Sie im Abschnitt zum NFS-Server.

Das Mount-Kommando

Auch zum Mounten von NFS-Verzeichnissen dient das Kommando mount . Es gelten dieselben Voraussetzungen wie zum Einhängen lokaler Dateisysteme: Die notwendigen Rechte müssen gegeben sein (auch auf Serverseite) und der Mountpunkt - also das Zielverzeichnis - muss existieren .

Der Aufruf von mount folgt nun diesem Schema:

mount -t nfs [ -o <Optionen> ] <Servername>:<Verzeichnis auf Server> <lokaler Mountpunkt>

Anstatt des Servernamens ist auch die Angabe einer IP-Adresse zulässig. Neben den allgemein gültigen Optionen für das Mountkommando steuern NFS-spezifische Optionen vor allem das Verhalten des Kommandos im Fehlerfall. Wir widmen uns ihnen im folgenden Abschnitt.

Als konkretes Beispiel soll vom NFS-Server sonne.galaxis.de das dort freigegebene Verzeichnis /home importiert werden. Als Mountpunkt wurde lokal ein Verzeichnis /mnt/home erzeugt. Der Aufruf sieht wie folgt aus:

root@erde> mount -t nfs sonne.galaxis.de:/home/ /home

Etwas Komfort

Da Administratoren - allen voran Unix-ler - bekanntlich recht bequeme Menschen sind und nach Automatisierung streben, gibt es auch hier einen Weg, um den Mount-Aufruf zu vereinfachen. Die kürzere und elegantere Schreibweise wäre ein Eintrag in die Datei /etc/fstab , die statische Informationen über Dateisysteme, ihre Mountpunkte und Optionen enthält.

Eine typische fstab-Datei könnte wie folgt aussehen:

user@erde> cat /etc/fstab
/dev/hda3        /              ext3      defaults 1 2
/dev/hda1        /boot          ext3      defaults 1 2
/dev/cdrom       /media/cdrom   auto      ro,noauto,user,exec 0 0
/dev/fd0         /media/floppy  auto      noauto,user,sync 0 0
devpts           /dev/pts       devpts    defaults 0 0
proc             /proc          proc      defaults 0 0
usbdevfs         /proc/bus/usb  usbdevfs  noauto 0 0
/dev/hda2        swap           swap      pri=42 0 0
# NFS-Einträge
sonne:/home      /home          nfs       bg,soft,intr,retry=5 0 0

sonne:/usr/share /usr/share nfs defaults 0 0

Zur Bedeutung der einzelnen Felder finden Sie Erläuterungen im Abschnitt Dateisysteme, /etc/fstab des Kapitels Systemadministration. Wichtig für unser Beispiel sind die beiden letzten Einträge. Anstelle der Gerätedatei bei lokalen Dateinamen tritt nun das zu importierende Verzeichnis in der Form Server:/Pfad. Als Typ des Dateisystems muss nfs in die dritte Spalte eingetragen werden. Die beiden letzten Spalten sollten bei importierten Verzeichnissen stets 0 sein, da sowohl ein Backup als auch eine Überprüfung des Dateisystems Aufgabe des Servers (der Rechner, auf dem diese Dateisysteme lokal liegen) ist.

Und der Zweck solcher Einträge?

Zum einen genügt nun ein einziger Aufruf, um alle in der Datei benannten NFS-Verzeichnisse gleichzeitig zu importieren:

root@erde> mount -a -t nfs

Zum anderen sinkt selbst bei Import einzelner Einträge der Tippaufwand, da als Argument für das Kommando mount entweder die Angabe der Server-Pfad-Kombination oder auch nur die Angabe des lokalen Mountpunkts genügt. Mit jedem der beiden folgenden Aufrufe könnte das Verzeichnis /home vom Server sonne gemountet werden:

# Angabe des Servers+Pfads
root@erde> mount sonne:/home
# Angabe des lokalen Mountpunkts

root@erde> mount /home

Mount-Optionen

Durch gezielten Einsatz einiger Optionen des mount -Kommandos lassen sich die Zugriffe auf Daten eines NFS-Verzeichnisses mitunter erheblich beschleunigen. Auch kann das Verhalten im Fehlerfall über Argumente gesteuert werden. Selbstverständlich lassen sich solche Angaben auch in der /etc/fstab dauerhaft nieder schreiben.

Die das NFS betreffenden Optionen sind:

rw, ro Schreib- und Lesezugriff bzw. Nur-Lese-Zugriff. Beachten Sie, dass die Rechte höchstens weiter eingeschränkt werden können, d.h. ein vom Server nur-lesend-exportiertes Verzeichnis kann lokal nicht zum Schreiben freigegeben werden, umgekehrt kann die Schreibberechtigung lokal verboten werden, selbst wenn der Server diese zuließe
fg Jeder gescheiterte Mountvorgang wird eine Fehlermeldung erzeugen; der Vorgang läuft im Vordergrund (foreground).
bg Scheitert der Mountvorgang im ersten Versuch, wird er im Hintergrund (background) solange wiederholt, bis er erfolgreich war oder retry erreicht wurde.
retrans=zahl Anzahl der Wiederholungsversuche, um einen Mount durchzuführen. Der Default-Wert liegt bei 5
hard Ein Programm wird während des Zugriffs auf ein NFS-Verzeichnis hängen bleiben, falls der Server zusammenbricht. Nach Wiederanlaufen des Servers fährt das Programm mit seiner Arbeit fort. ein hängendes Programm, kann nur unterbrochen werden, wenn die Option intr angegeben wurde.
soft Der Kernel wird, falls der Server eine bestimmte Zeit lang (retrans*timeo) nicht antwortet, einen Fehler generieren und die auf den Server wartenden Prozesse informieren. Die Zeitdauer zwischen den Versuchen kann mit timeo=Sekunden eingestellt werden.
intr, nointr Möglichkeit des Abbruchs durch eine Tastenkombination (interrupt) bzw, das Verhindern derselben
remount Aushängen eines Verzeichnisses, um es sofort wieder (beispielsweise mit neuen Optionen) einzuhängen
suid, nosuid Möglichkeit zur Benutzung des SUID-Bit auf dem eingehängten Dateisystem
retry=zahl Anzahl der erfolglosen Mount-Versuche (Voreinstellung ist 10000), bis endgültig abgebrochen wird
wsize=zahl Setzt die Blockgröße beim Schreiben über NFS auf Bytes byte. Voreinstellung ist 1024, sollte aber auf 8192 gesetzt werden.
rsize=zahl Setzt die Blockgröße beim Lesen über NFS auf Bytes byte. Voreinstellung ist 1024, sollte aber auf 8192 gesetzt werden.
timeo=zahl Zeitspanne für Wiederholversuche, angegeben in Zehntelsekunden
proto=protokoll ab Version 3: Angabe des Protokolls (UDP oder TCP)