Zum Inhalt springen

Network File System/Client

Aus Foxwiki

Beschreibung

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
 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
sudo 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

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)

NFS-Dateisystems mounten

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 verifiziert werden, ob ein Rechner als NFS-Server fungiert und welche Verzeichnisse er welchen Rechnern zur Verfügung stellt
showmount

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

Siehe auch showmount

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 allgemeingültigen Optionen für das Mount-Kommando steuern NFS-spezifische Optionen vorwiegend das Verhalten des Kommandos im Fehlerfall
Beispiel

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

Automatisierung

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

/etc/fstab
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
Zweck der 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 eintragen
Option Beschreibung
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, auch 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)