Aus Linux-Magazin 01/2005

Grundlagen des Network File System

Unter den Netzwerk-Dateisystemen ist NFS das bekannteste und verbreitetste. Verzeichnisse entfernter Rechner vermag es so einzubinden, dass sie aus Benutzerperspektive wie lokale Ressourcen erscheinen.

Ein entferntes Dateisystem ist immer zugleich ein zentralisiertes – das macht zum großen Teil seinen Nutzen aus: Von vielen Anwendern benötigte Daten werden an einem Ort, auf dem Server, gepflegt und gesichert. Nutznießer sind die Clients, die weder Kopien noch Plattenkapazität dafür brauchen, keine verschiedenen Versionen synchronisieren müssen und sich nicht mit Backups oder Ausfallsicherheit belasten.

Dennoch arbeiten sie mit den entfernten Files so wie mit lokalen. Hat ein Benutzer sein Homeverzeichnis auf dem Fileserver, darf er von Arbeitsstation zu Arbeitsstation laufen und hat dennoch stets seine Daten und die eigenen Programmeinstellungen zur Hand.

Ein Benutzer sieht einem Verzeichnis auch nicht ohne weiteres an, ob es sich auf einem lokalen oder entfernten Dateisystem befindet. Für ihn macht das beim Lesen, Schreiben, Löschen, Verschieben oder Kopieren keinen Unterschied. Hinter den Kulissen spielen sich in beiden Fällen allerdings grundverschiedene Dinge ab.

Lokal gespeicherte Dateien, die in untereinander verketteten Datenblöcken eines Filesystems residieren, sind über den Wurzelblock der Kette, den so genannten Inode erreichbar. Er speichert neben der Adresse des ersten Datenblocks eine Reihe weiterer Informationen: Eine unverwechselbare Nummer, die Größe des File, die Zugriffsrechte oder verschiedene Zeitstempel. Diese Angaben gibt das Kommando »stat« aus, zum Beispiel »stat /etc/hosts«:

File: `/etc/hosts'
Size: 193          Blocks: 8 
IO Block: 4096     reguläre Datei
Device: 306h/774d  Inode: 99758  Links: 1
Access: (0644/-rw-r--r--) 
Uid: (    0/    root) 
Gid: (    0/    root)
Access: 2004-10-21 15:39:32.170288696
Modify: 2004-10-21 14:49:24.964453472
Change: 2004-10-21 14:49:24.985450280

Dateioperationen auf einem entfernten NFS-Dateisystem erledigt dagegen der Server stellvertretend für den Client. Der entfernte Rechner adressiert das gewünschte File über ein Handle, das er vom Server auf Nachfrage erhält. Zusammen mit dem Handle kann er danach eine von 18 Aktionen in Auftrag geben, die zum Leistungsangebot des NFS-Servers gehören.

Protokoll-Suite

Als Sun im Jahr 1984 NFS auf den Markt brachte, erschien zeitgleich eine ganze Sammlung verwandter Protokolle unter dem Namen ONC (Open Network Computing). Abbildung 1 zeigt die ONC-Architektur im Vergleich zu anderen Modellen, von denen sich letztlich nur TCP/IP durchgesetzt hat. NFS liegt im ONC-Modell mit anderen Protokollen in der Anwendungsschicht. Dazu gehören das Protokoll für das File-Locking NLM (Network-Lock-Manager) sowie NSM (Network-Status-Monitor).

Aufgabe des XDR-Protokolls (External Data Representation) eine Schicht darunter ist es, die zu übertragenden Daten in ein einheitliches Format zu konvertieren. So lassen sich Dateien unabhängig von der eingesetzten Hardware und vom Betriebssystem verarbeiteten. Wieder eine Schicht tiefer befindet sich das RPC-Protokoll (Remote Procedure Call,[2]). Mittels RPC können Programme Funktionen anderer Programme auf einem entfernten Rechner nutzen.

Jedes Programm, das Funktionen via RPC anbieten will, muss sich bei einem besonderen Service registrieren, dem Portmapper. Als Kontaktvermittler sammelt er die Dienstangebote inklusive der Informationen zu Protokoll und dynamisch vergebener Portnummer für die Kontaktaufnahme in einer Datenbank und gibt sie auf Anfrage an die Clients weiter. Der Ablauf ist in Abbildung 2 dargestellt.

Abbildung 1: Im ONC-Modell ist NFS auf der Anwendungsschicht angesiedelt (OSI-Schicht 7), XDR auf Schicht 6 des OSI-Modells. Das klassische TCP/IP-Modell fasst die Schichten 5 bis 7 zusammen.

Abbildung 1: Im ONC-Modell ist NFS auf der Anwendungsschicht angesiedelt (OSI-Schicht 7), XDR auf Schicht 6 des OSI-Modells. Das klassische TCP/IP-Modell fasst die Schichten 5 bis 7 zusammen.

Vermittlerdienste

Besonders ältere Versionen des Portmappers können leicht Sicherheitsprobleme heraufbeschwören. Neuere lassen sich zumindest darauf verpflichteten, nur Anfragen aus dem lokalen Netz zu beantworten. Diese Einstellung ist auf jeden Fall angeraten. Eingerichtet wird sie mit Einträgen im Format »portmap: Hosts« in einer der beiden Dateien »/etc/hosts.deny« oder »/etc/hosts.allow«. Welche Programme der Portmapper kennt und vermittelt, zeigt »rpcinfo -p«. Das Beispiel eines NFS-Servers zeigt das Listing 1.

Die Arbeit eines NFS-Servers teilen sich üblicherweise die beiden Daemons »mountd« und »nfsd« im Duett. Ersterer prüft die Mount-Requests der Clients auf Machbarkeit und Zulässigkeit, Letzterer startet eine konfigurierbare Anzahl Kernel-Threads, die dann die eigentlichen NFS-Operationen übernehmen.

Abbildung 2: Der Portmapper fungiert als Kontaktvermittler zwischen RPC-Server und -Client. Der Client erfragt den Port, über den er sich direkt mit dem Server verbinden kann.

Abbildung 2: Der Portmapper fungiert als Kontaktvermittler zwischen RPC-Server und -Client. Der Client erfragt den Port, über den er sich direkt mit dem Server verbinden kann.

Daemons im Duett

Manchmal gibt es noch einen speziellen Daemon »rquotad«, der Höchstgrenzen für den belegbaren Plattenplatz pro User überwacht. Ein Linux-System startet diese Dienste gewöhnlich durch ein Init-Skript »nfs« oder »nfsserver«. Abhängig von Distribution, NFS- und Kernelversion müssen unter Umständen die beiden Daemons für das Locking – »lockd« und »statd« – separat gestartet werden. Ob alle Dienste ordnungsgemäß laufen, kann man mit »ps -A | grep rpc« und »ps -A | grep nfs« kontrollieren.

Da aktuelle Distributionen mit einem Nfsd arbeiten, der hauptsächlich im Kernel integriert ist, muss sichergestellt sein, dass die entsprechenden Kernelmodule geladen sind. Das lässt sich sehr leicht mit einem Aufruf von »lsmod | grep nfs« feststellen:

nfsd             172769  9
exportfs           6593  1 nfsd
lockd             53256  2 nfsd
sunrpc           140325  19 nfsd,lockd

Neben dem »nfsd« in Form eines Kernelmoduls gibt es auch eine Version, die komplett im Userspace läuft. Sie ist jedoch mit Nachteilen behaftet: Ihre Performance ist wesentlich schlechter als die des Kernelmoduls und sie unterstützt die Protokolle des Network-Status-Managers (NSM) und des Network-Lock- Managers (NLM) ebenso wenig wie Dateien, die größer als 2 GByte sind.

Listing 1:
Rpcinfo-Ausgabe

01    Program Vers Proto   Port
02     100000    2   tcp    111  portmapper
03     100000    2   udp    111  portmapper
04     100024    1   udp  32768  status
05     100024    1   tcp  32769  status
06     100011    1   udp    958  rquotad
07     100011    2   udp    958  rquotad
08     100011    1   tcp    961  rquotad
09     100011    2   tcp    961  rquotad
10     100003    2   udp   2049  nfs
11     100003    3   udp   2049  nfs
12     100003    4   udp   2049  nfs
13     100003    2   tcp   2049  nfs
14     100003    3   tcp   2049  nfs
15     100003    4   tcp   2049  nfs
16     100021    1   udp  32816  nlockmgr
17     100021    3   udp  32816  nlockmgr
18     100021    4   udp  32816  nlockmgr
19     100021    1   tcp  33142  nlockmgr
20     100021    3   tcp  33142  nlockmgr
21     100021    4   tcp  33142  nlockmgr
22     100005    1   udp    980  mountd
23     100005    1   tcp    983  mountd
24     100005    2   udp    980  mountd
25     100005    2   tcp    983  mountd
26     100005    3   udp    980  mountd
27     100005    3   tcp    983  mountd

Alt und neu

Das Network-File-System (NFS) wurde 1984 von der Firma Sun Microsystems Inc. entwickelt und 1989 in der Version 2 im RFC 1094[1] standardisiert. Im Linux/Unix-Bereich ist NFS das Remote-Dateisystem mit der größten Marktverbreitung. Lange Zeit waren die Versionen 2 und 3 dominierend. Mittlerweile gewinnt Version 4 an Boden. Sie ist im RFC 3550[4] standardisiert und bietet einige interessante neue Features:

Security: NFS in der Version 3 nutzt als Authentifizierungsverfahren AUTH-SYS, das auf UIDs und GIDs basiert. Version 4 benutzt mit RPCSEC-GSS[5] einen neuen Algorithmus, der sich auf Kerberos 5, LIPKEY und SPKM-3 gründet. Damit hält starke Kryptographie endlich auch in NFS Einzug.

Protokolle: Die Protokolle, die bisher vom Network-Status-Monitor und Network-Lock-Manager benutzt wurden, sind nun in das NFS-Protokoll integriert. Das macht die Handhabung in Firewall-Umgebungen vergleichsweise wesentlich einfacher.

Pseudo-Filesystem: Der NFS-Server kann nun alle exportierten Verzeichniszweige in einem Pseudo-Filesystem zusammenführen, das von den Clients gemountet wird. Innerhalb dieses Oberverzeichnisses können sie sich dann ihren Berechtigungen entsprechend bewegen – Änderungen an der »/etc/fstab« sind dadurch kaum noch erforderlich.

Cachefs: Die aktuelle NFS-Version nutzt zur Performanceverbesserung intensiv Caching. Bei jedem Datenzugriff prüft eine Logik zuerst, ob die angeforderte Datei nicht bereits im lokalen Cache vorhanden ist.

Compound Procedures: Zusammengesetzte Statements bündeln Operationen. Filehandles lassen sich zwischen ihnen weitergeben.

Ein Verzeichnis, das ein Client in seinen lokalen Dateibaum einbinden möchte, muss der Server zuvor exportieren. Die Einstellungen dafür liegen in der Datei »/etc/exports«, die Mountd und Nfsd lesen. Es ist auch möglich, Verzeichnisse temporär mit dem Kommando »exportfs« freizugeben:

exportfs -o ro,sync 
server1.example.com:/var/ftp/pub

Das Kommando würde beispielsweise das komplette Verzeichnis »/var/ftp/pub« lesend für den Rechner »server1.example.com« freigeben. Möchte der Administrator das Verzeichnis wieder von der Freigabe ausschließen, muss er »exportfs« mit der Option »-u« aufrufen:

exportfs -u 
server1.example.com:/var/ftp/pub

Sind Freigaben aktiv, egal ob mit dem Kommando »exportfs« oder durch einen Eintrag in der Datei »/etc/exports«, zeigt der Befehl Showmount sie anschließend an. Für den Rechner Tiffy produziert »showmount -e tiffy« zum Beispiel:

Export list for tiffy:
/var/ftp/pub/rhel3-es 
192.168.0.0/255.255.255.0

Exportkonditionen

Die Datei »/etc/exports« ist nicht kompliziert aufgebaut. Auf den Namen des exportierten Verzeichnisses am Zeilenanfang folgt die Spezifikation des oder der zugelassenen Clients und der Mount-Optionen in runden Klammern. Im Beispiel

/var/ftp/pub/rhel3-es/  
192.168.0.0/255.255.255.0(ro,sync) 
192.168.1.0/255.255.255.0(rw,sync)

exportiert das Verzeichnis »/var/ftp/pub/ rhel3-es/«, allerdings darf lediglich das 192.168.0.0-Netzwerk lesend beziehungsweise das 192.168.1.0-Netzwerk schreibend darauf zugreifen. Anfragen von anderen IP-Adressen sind hier nicht zulässig.

Die erlaubten Rechner werden wahlweise entweder mit dem Domainnamen (»*.example. com«), dem FQDN (Fully Qualified Domain Name, »host.example.com.«) oder der IP-Adresse und Netzmaske (192.168.0.254/24 oder 192.168.0.0/255.255.255.0) bezeichnet. Netzgruppen sind über ihren Namen und ein vorangestelltes @ spezifiziert, Beispiel: »@ Netgroup«.

Für jeden Client können Export-Optionen definiert werden, die Randbedingungen und Restriktionen für Zugriffe festlegen. Ändert sich der Inhalt der Exports-Datei, müssen sie »nfsd« und »mountd« neu einlesen. Das erreicht man am einfachsten mit »exportfs -r«. Viele Distributionen bieten auch grafische Oberflächen für die NFS-Konfiguration. Am Beispiel Fedora demonstriert dies Abbildung 3. Die möglichen Schalter für den Export von Dateisystemen sind:

secure, insecure: Client-Anfragen werden nur von vertrauenswürdigen Ports (Portnummern unterhalb 1024) akzeptiert (»secure«, Voreinstellung); mit »insecure« werden auch Anfragen an höhere Ports akzeptiert.

ro, rw: Das Verzeichnis wird schreibgeschützt (read only, Voreinstellung) beziehungsweise mit vollen Lese- und Schreibrechten für den Client (read/write) exportiert.

sync, async: Bei »ync« darf der Server den Vollzug eines Schreibvorgangs erst an den Client melden, wenn er die Daten tatsächlich auf die Platte geschrieben hat (Ausschalten des Cache). Die Voreinstellung ist »async«.

wdelay, no_wdelay: Die Option wird nur im Zusammenhang mit »sync« beachtet und erlaubt es dem Server, die Bestätigung eines Schreibvorgangs zu verzögern, falls mehrere Schreibvorgänge von einem Client zur gleichen Zeit ablaufen. Anstatt jede einzelne Operation zu bestätigen, sendet der Server nur eine Antwort nach Vollzug aller Schreiboperationen (Voreinstellung).

hide, nohide: Exportiert der Server ein Verzeichnis, in dem wiederum ein anderes Dateisystem gemountet ist, wird dieses nicht an den Client exportiert (»hide«, Voreinstellung); die »nohide«-Option (also der implizite Export) funktioniert jedoch nur, wenn es sich bei der Clientangabe um einen Rechnernamen (keine Wildcards, IP-Netzwerke und Netzgruppen) handelt.

subtree_check, no_subtree_check: Werden nur Teile eines Dateisystems vom Server exportiert, muss der Server prüfen, ob Zugriffe nur auf Dateien erfolgen, die innerhalb dieses Teilbaums liegen (»subtree_check«, Voreinstellung). Das erhöht zwar die Sicherheit, allerdings auf Kosten der Geschwindigkeit, sodass die Prüfung mit »no_subtree_check« abgeschaltet werden kann.

root_squash, no_root_squash: Root erhält die User-ID des Pseudobenutzers »nfsnobody«, womit der Root-Benutzer des Clientrechners keine Root-Rechte für das vom Server importierte Verzeichnis erhält (Voreinstellung); mit »no_root_squash« bleiben die Root-Rechte auf Client-Seite für das Verzeichnis erhalten.

all_squash, no_all_squash: Alle Zugreifenden erhalten die UID von »nfsnobody«; Voreinstellung ist »no_all_squash«, womit die Nutzerkennungen erhalten bleiben.

anongid= GID: Squashing der Gruppe; die Gruppen-ID wird auf GID gesetzt. Mit dieser Option kann festgelegt werden, mit welcher Server-GID die Clientbenutzer arbeiten sollen, sobald sie Zugriff auf den Server haben.

anonuid= UID: Squashing des Benutzers. Die zugreifenden Benutzer bekommen die angegebene UID.

Showmount listet zwar die exportierten Verzeichnisse und die zugelassenen Clients, es fehlt allerdings eine genaue Übersicht der gesetzten Export-Optionen. Diese Information steht auf dem Server in der Datei »/var/lib/nfs/etab«:

/var/ftp/pub/rhel3-es
192.168.0.0/255.255.255.0(ro,sync,wdelay,
hide,nocrossmnt,secure,root_squash,
no_all_squash,subtree_check,
secure_locks,anonuid=-2,anongid=-2)
Abbildung 3: Wer seinen Server gerne grafisch konfigurieren möchte, kann bei Fedora auf »system-config-nfs« zurückgreifen.

Abbildung 3: Wer seinen Server gerne grafisch konfigurieren möchte, kann bei Fedora auf »system-config-nfs« zurückgreifen.

Ein Linux-System verwaltet User intern nicht anhand der User- und Gruppennamen, sondern anhand der numerischen User- und Gruppen-IDs. Gehört eine Datei auf dem NFS-Server beispielsweise dem User »tscherf« mit der UID 500 und hat dieser User Lese- und Scheibrechte für diese Datei, dann erhielte nach dem Importieren der Datei via NFS ein Benutzer auf dem Client, der dort lokal unter der UID 500 geführt wird, dieselben Rechte an der Datei. Sind Server- und Client-Benutzer trotz gleicher UID verschiedene Leute, wäre dies sicher nicht wünschenswert.

Einen Ausweg bietet das so genannte Squashing, das schon im Zusammenhang mit den Export-Einstellungen erwähnt wurde. Die Option »root_ squash« bewirkt, dass jeder Zugriff von dem Benutzer Root auf ein mit diesem Flag exportiertes Filesystem tatsächlich unter der UID des Benutzers »nobody« oder »nfsnobody« erfolgt. All-squash ist dagegen dafür zuständig, dass NFS alle Zugriffe von beliebigen Usern auf »nobody» oder »nfsnobody« umsetzt.

Abbildung 4: Auch für NFS-Clients gibt es grafische Tools, hier ein Beispiel aus der Suse-Distribution. Neben dem Namen des Servers, des exportierten Verzeich-nisses und des lokalen Mountpoints können auch Optionen angegeben werden .

Abbildung 4: Auch für NFS-Clients gibt es grafische Tools, hier ein Beispiel aus der Suse-Distribution. Neben dem Namen des Servers, des exportierten Verzeich-nisses und des lokalen Mountpoints können auch Optionen angegeben werden .

Squashing hilft nicht immer

Squashing ist allerdings nicht in jedem Fall ein gangbarer Weg, beispielsweise wenn NFS Homeverzeichnisse exportiert. Würde man die Zugriffe auf sie immer auf die User-ID eines einzigen Users umleiten, der in diesen Verzeichnissen dann Lese- und Schreibberechtigung haben müsste, dann gäbe es keine Privatsphäre im Heimatverzeichnis mehr: Jeder könnte bei jedem alles ändern und keiner nachvollziehen, wer welchen Eingriff zu verantworten hat.

Diese Fälle zwingen daher zu identischen User- und Gruppen-IDs auf Server und Clients. Da das manuell schwer realisierbar und fehlerträchtig wäre, haben sich verschiedene Systeme entwickelt, die Benutzerinformationen zentral verwalten. Sun komplettierte ihr NFS schon in der Anfangszeit mit NIS (Network Information System) und später NIS+, eine andere Option wäre LDAP.

Prozesskette

Greift der Client auf eine freigegebene Datei zu, läuft im Hintergrund eine ganze Kette aufeinander aufbauender Aktionen ab. Zunächst muss er beim ersten Zugriff auf den NFS-Server ermitteln, unter welchen Ports er »mountd« und »nfsd« erreichen kann. Diese Informationen erfragt er beim Portmapper. Möchte der Client die Datei exklusiv bearbeiten, benötigt er ebenfalls die Adressen von »lockd« und »statd«.

Im nächsten Schritt benutzt der Client die eben erfragte Portnummer, um sich nun direkt an den Mountd auf dem Server zu wenden. Dieser durchsucht die Datei »/var/lib/nfs/etab« danach, ob das angefragte Verzeichnis überhaupt exportiert wird und ob der Client berechtigt ist darauf zuzugreifen. Gehen beide Prüfungen positiv aus, besorgt »mountd« von seinem Kompagnon »nfsd« ein Dateihandle, das die vom Client gewünschte Datei eindeutig referenziert.

Mountd schickt das Handle zurück an den anfragenden Client. Der Client kann nun direkt Handle und Arbeitsanweisung an den »nfsd« auf Server-Seite senden und damit die fragliche Datei zum Beispiel lesen, schreiben oder auch löschen. Der gesamte Vorgang ist in Abbildung 5 dargestellt.

Eine Liste der Verzeichnisse, die der Server exportiert, kann sich der Client mit Hilfe des Kommandos »showmount -e« besorgen. Das Mount-Kommando dient anschließend dazu, die gewünschte Freigabe einzubinden. Ein Beispiel dafür wäre:

mount -t nfs -o ro 
tiffy:/var/ftp/pub/rhel3-es/ /mnt/daten/

Zu beachten ist, dass der lokale Mountpoint existiert, bevor das Mount-Kommando ausgeführt wird. Die möglichen Parameter sind im Kasten “Mount-Optionen” zusammengestellt.

Verschieden eingebunden

Das Einbinden externer Dateisysteme mittels »mount« auf der Kommandozeile hat allerdings den entscheidenden Nachteil, dass die Informationen über die Verknüpfung zwischen externem Dateisystem und lokalem Mountpoint nur bis zum nächsten Neustart erhalten bleibt. Deshalb ermöglicht die Datei »/etc/fstab«, die während des Bootens gelesen wird, dauerhafte Verknüpfungen. Sie wird auch konsultiert, wenn ein Anwender auf der Client-Seite »mount -a« eingibt. Doch Vorsicht: Hat sich lediglich eine Mount-Option geändert, ist »mount -o remount /Mountpoint« nötig. Dagegen bindet ein einfaches »mount -a« nur neue Dateisysteme ein, ändert aber nicht die Optionen von bereits eingehängten Filesystemen.

Eine weitere Möglichkeit für das automatische Einbinden bietet der Automounter. Er initiiert den Mountvorgang, sobald ein beliebiger Prozess auf den Mountpoint zugreift. Die Konfiguration findet sich in den Dateien »/etc/auto.master« und »/etc/auto.misc«. Damit diese Automatik auch funktioniert, muss der entsprechende Automount-Daemon laufen.

Exklusivrechte

In einem verteilten Dateisystem können mehrere Clients gleichzeitig auf dieselbe Datei zugreifen. In der Regel möchte man diese problematischen Aktionen verhindern und reserviert die Datei oder Teile von ihr für einen Client. Unter Linux löst der Kernel diese Aufgabe. Implementiert wird diese Funktion innerhalb einer Anwendung durch den Systemaufruf »fcntl()« (File Control).

Möchte ein Client exklusiven Zugriff auf eine Datei haben, sendet er diese Anforderung an der Kernel. Wenn sich die zu sperrende Datei innerhalb einer NFS-Freigabe befindet, leitet der Kernel die Anforderung an den lokalen Network- Lock-Manager (NLM, »rpc.lockd«) weiter. Von dort geht die Anfrage an den »lockd« auf dem NFS-Server. Der bearbeitet sie und schickt das Ergebnis an den NLM des Clients zurück. Der Kernel kann die Sperre schließlich ausführen. Voraussetzung ist, dass der NLM sowohl auf dem Client als auch auf dem Server gestartet ist.

Mount-Optionen

Das Mounten von NFS-Verzeichnissen kann durch eine ganze Reihe von Optionen gesteuert werden:

rw, ro: Schreib- und Lesezugriff beziehungsweise Nur-Lese-Zugriff. Wichtig dabei ist, dass der Admin die Rechte höchstens weiter einschränken kann, das heißt, er kann ein vom Server als nur-lesend exportiertes Verzeichnis lokal nicht zum Schreiben freigeben. Umgekehrt kann er aber die Schreibberechtigung lokal verbieten, selbst wenn der Server diese zulässt.

fg: Jeder gescheiterte Mountvorgang soll eine Fehlermeldung erzeugen; der Vorgang läuft im Vordergrund (Foreground).

bg: Scheitert der Mountvorgang beim ersten Versuch, wiederholt ihn der Client im Hintergrund (Background) so lange, bis er erfolgreich war oder ein Limit erreicht hat.

retrans= zahl: Anzahl der Mountversuche. Der Default-Wert liegt bei fünf.

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 lässt sich nur unterbrechen, wenn die Option »intr« angegeben wurde.

soft: Der Kernel wird, falls der Server eine bestimmte Zeit lang (Retrans mal Timeo) nicht antwortet, einen Fehler generieren und die auf den Server wartenden Prozesse darüber informieren. Die Zeitdauer zwischen den Versuchen entspricht der mit »timeo« eingestellte Anzahl Sekunden.

intr, nointr: Schafft oder verhindert die Möglichkeit, eine hängende Clientaktion über eine Tastenkombination abzubrechen.

remount: Ein Verzeichnis aushängen und sofort wieder (mit neuen Optionen) einhängen.

suid, nosuid: Der Client respektiert oder ignoriert die im eingehängten Filesystem gesetzten SUID-Bits.

retry= Zahl: Anzahl der erfolglosen Mount-Versuche (Voreinstellung ist 10000) bis zum endgültigen Abbruch.

wsize= Zahl: Setzt die Blockgröße beim Schreiben über NFS. Voreinstellung ist 1024, aber 8192 verspricht bessere Performance.

rsize= Zahl: Setzt die Blockgröße beim Lesen über NFS auf die angegebene Anzahl Bytes. Voreinstellung ist 1024, sollte aber auf 8192 gesetzt werden.

timeo= Zahl: Intervall für Wiederholungen, angegeben in Zehntelsekunden.

proto= Protokoll: Angabe des Protokolls, auf dem NFS aufsetzt (UDP oder TCP).

Abbildung 5: Auf seine Mount-Anforderung erhält der Client ein Dateihandle, das er zusammen mit Arbeitsanweisungen (etwa Lesen oder Schreiben) an den NFS-Daemon schickt.

Abbildung 5: Auf seine Mount-Anforderung erhält der Client ein Dateihandle, das er zusammen mit Arbeitsanweisungen (etwa Lesen oder Schreiben) an den NFS-Daemon schickt.

Nachricht bei Neustart

Wenn Client oder Server rebooten, kommt der Network-Status-Manager (NSM, »rpc.statd«) ins Spiel. Hat der »lockd« des Servers eine Datei gesperrt, dann gibt er diese Information an den NSM weiter und vermerkt im Verzeichnis »/var/lib/nfs/sm« den Name des Clients. Der Client behält seinerseits den Namen des Servers, der die Sperre durchgeführt hat. Verantwortlich dafür ist erneut der NSM.

Rebootet der Client, liest er den Namen des oder der NFS-Server, von denen er Verzeichnisse gemountet hatte, aus dieser Datei und kontaktiert deren Network-Status-Monitore. Die leiten die Information an den jeweiligen NLM weiter. Dieser hebt die Sperre auf. Fällt der Server aus, läuft das Spiel anders herum ab. Die Clients werden beim Reboot informiert und erhalten so die Möglichkeit, ihre Sperren erneut anzufordern und zu aktualisieren. Findet keine Aktualisierungsanfrage statt, hebt der Server die Locks auf.

Ein Problem ist der Einsatz von Datei-sperren immer noch in Cluster-Umgebungen. Da die Locking-Informationen in lokalen Dateien liegen und ein Cluster sie im Falle eines Failovers nicht auf einen anderen Knoten überträgt, stehen sie danach nicht mehr zur Verfügung.

Filesharing für alle Fälle

NFS ist für das Filesharing in kleineren und mittleren Netzen eine erprobte, weit verbreitete und Systemgrenzen übergreifende Lösung. Im Unterschied zu verteilten Filesystemen für sehr große Netze (siehe dazu den anschließenden AFS-Artikel) ist das Network File System auch ohne große Spezialkenntnisse zu administrieren. (jcb)

Infos

[1] RFC zu NFSv2: [http://www.faqs.org/rfcs/rfc1094.html]

[2] RFC 1050: [http://www.faqs.org/rfcs/rfc1050.html]

[3] NFSv4-Mailingliste: [http://linux-nfs.org/cgi-bin/mailman/listinfo/nfsv4]

[4] RFC zu NFSv4: [http://www.faqs.org/rfcs/rfc3550.html]

[5] RFC zu RPCSEC_GSS: [http://www.faqs.org/rfcs/rfc2204.html]

[6] RFC zu NFSv3: [http://www.faqs.org/rfcs/rfc1813.html]

Der Autor


Thorsten Scherf arbeitet für die Firma Red Hat und führt dabei Trainings und Projekte im Bereich Netzwerksicherheit durch.

LINUX-MAGAZIN KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Readly Logo
E-Mail Benachrichtigung
Benachrichtige mich zu:
0 Kommentare
Älteste
Neuste Beste Bewertung
Inline Feedbacks
Alle Kommentare anzeigen
Nach oben