Network File System/Client
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
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
- 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
|
| 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
|
| hard | Ein Programm wird während des Zugriffs auf ein NFS-Verzeichnis hängen bleiben, falls der Server zusammenbricht
|
| 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
|
| 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
|
| rsize=zahl | Setzt die Blockgröße beim Lesen über NFS auf Bytes byte
|
| timeo=zahl | Zeitspanne für Wiederholversuche, angegeben in Zehntelsekunden |
| proto=protokoll | ab Version 3: Angabe des Protokolls (UDP oder TCP) |