orm@doc-tcpip.org

Erstellt: August 1998 - Letzte Modifikation: Juli 2004

[ Main | Local ]


Befehle rund um den NFS-Mount

showmount, nfsstat, mount, exportfs

Das showmount-Kommando

Dieses Kommando fragt über RPC Calls lokal oder über das Netz die gewünschten Information ab. Das Kommando kennt folgende Flags (spezifiziert man keinen Server im Aufruf, so wird der Localhost angesprochen):

Sinvollerweise nutzt man den Schalter -e auf dem Client gegen einen Server, und die Schalter -a und -d auf einem Server, um zu sehen wer welches Verzeichnis aktuell gemountet hat bzw. einen Überblick über die aktuell exportierten Verzeichnisse zu erhalten.

Die Client-Seite: nfsstat und mount

Hier die Ausgabe von nfsstat -m. Dieses Kommando ist sehr nützlich bei Mount- und Performance-Problemen, da es alle aktuellen Parameter angibt.

 
%nfsstat -m
/mnt from /mnt:nimmaster
 Flags:   vers=3,proto=tcp,auth=unix,hard,intr,link,symlink,rsize=32768,wsize=32768,retrans=5
 All:     srtt=0 (0ms), dev=0 (0ms), cur=0 (0ms)

In der ersten Zeile wird der Mountpunkt und der Server, von dem man mountet, angeführt. Die Ausgabe ist etwas verwirrend, da beide Male der lokale Mountpunkt erscheint. Das erklärt sich, wenn man von diesem Client aus die Sache betrachtet: Auf dem Mountpunkt /mnt liegt der Server Nimmaster bzw. das von ihm exportierte Verzeichnis.

Dann folgen die Flags: Die Version ist NFSv3, das benutzte Übertragungsprotokoll ist TCP (Standard bei Version 3), der Mechanismus der Authentifizierung ist Standard-Unix (Keywörter vers, proto und auth). Der Mount ist ein Hard-Mount, ein Zugriffs-Fehler wird also nicht an die Applikation weitergegeben. Stattdessen wird es solange probiert, bis es geht (Verhalten eines Systems bei einer kaputten Platte, Keywort hard).

Mit intr ist es möglich, den Mount mit CTRL C zu unterbrechen - was bei einem Hart-Mount normalerweise nicht möglich ist. Die Keywörter link und symlink zeigen anr, das der Server symbolische Links und harte Links unterstützt.

Mit rsize und wsize kann man die Größe der Segmente bezüglich Schreiben und Lesen einstellen. Zum Schluß gibt retrans die Anzahl der NFS-Retransmissions an, also wie oft es der Client versucht.

Ob der Mount geklappt hat, sieht man sofort mittels des mount-Kommandos. Ohne Schalter oder Argumente gibt das Kommando die aktuellen Mounts aus, jeweils unter Angabe der Maschine, von der gemounted wurde (leer, wenn es der Localhost ist), das gemountete Verzeichnis, der Mountpunkt, Type des Filesystems, Datum und die Optionen des Mounts. Hier ein Beispiel:

 
%mount
  node       mounted        mounted over    vfs       date        options      
-------- ---------------  ---------------  ------ ------------ --------------- 
         /dev/hd4         /                jfs    Mar 07 15:31 rw,log=/dev/hd8 
         /dev/hd2         /usr             jfs    Mar 07 15:31 rw,log=/dev/hd8 
         /dev/hd9var      /var             jfs    Mar 07 15:31 rw,log=/dev/hd8 
         /dev/hd3         /tmp             jfs    Mar 07 15:31 rw,log=/dev/hd8 
         /dev/hd1         /home            jfs    Mar 07 15:32 rw,log=/dev/hd8 
         /dev/dce_var_lv  /var/dce         jfs    Mar 07 15:32 rw,log=/dev/hd8 
         /dev/dfs_var_lv  /var/dce/adm/dfs/cache jfs    Mar 07 15:32 rw,log=/dev/hd8 
         DFS              /...             dfs    Mar 07 15:34 rw              
         /etc/auto.direct /autofs/tmp_nim  autofs Mar 07 15:34 ignore          
         /etc/auto.direct /autofs/intern   autofs Mar 07 15:34 ignore          
         /etc/auto.direct /autofs/cdrom    autofs Mar 07 15:34 ignore          
         /etc/auto.direct /autofs/testy    autofs Mar 07 15:34 ignore          
nimmaster /tmp             /mnt             nfs3   Mar 29 17:11 ro  

Natürlich werden alle Mounts aufgeführt, also auch die Systemeigenen - für das System ist es egal, ob es ein NFS-Mount oder sonst etwas ist. Die ersten Zeilen (/dev/hdxxx) sind die systemeigenen Mounts. So ist /dev/hd4 am Mountpoint / eingehängt. Der FS-Typ ist JFS, also ein AIX-Journaled Filesystem. Das Datum ist das Datum dieses Mounts, also der letzte Reboot. Danach kommen die Permissions (hier rw, Lesen und Schreiben) sowie das Device, auf dem das JFS-Log sitzt: Standard AIX, also /dev/hd8.

Die Mounts nach /var/dce und /... kommen daher, weil diese Maschine in einer DCE-Zelle integriert ist und das $HOME der User unter DFS (Distributet File System) verwaltet wird (Typ ist dfs...).

Dann kommen 4 Zeilen, die anzeigen, das auf dieser Maschine ein Automounter seinen Dienst tut (eigentlich AutoFS..). Wenn ich in das Verzeichnis /autofs/tmp_nim gehe, springt der Automounter-Deamon an und sieht, das er den Anweisungen in der Datei /etc/auto.direct folgen soll. Dort steht dann, welches Verzeichnis wie und von wem an diesen Mount-Point (/autofs/tmp_nim) gemountet werden soll. Das Filesystem ist autofs, und Optionen sind momentan keine gesetzt, weil ja nichts gemounted ist. Wechselt man in so ein Verzeichnis und macht ein Listing, dann mountet der Automounter sofort das entsprechende, remote Verzeichnis, und in der Ausgabe des mount-Befehles sieht man einen neuen Eintrag für einen normalen Mount, der dann einen FS-Typ und Optionen hat. Hier mehr zum Automounter.

Die letzte Zeile ist der einzige, "normale" NFS-Mount. Zuerst wird der NFS-Server angegeben, von dem wir mounten. Dann das Verzeichnis auf dieser Maschine, was wir mounten, der Mountpoint, Typ, Zeit und Permissions. In diesem Fall haben wir am 29. März um 17:11 Uhr von dieser Maschine aus vom Server "nimmaster" das /tmp-Verzeichnis in unseren lokalen Dateibaum unter /mnt eingehängt. Das Filesystem ist für uns nfs3, wir dürfen nur lesen (read only). Der benutzte Befehl sah wahrscheinlich so aus:
mount nimmaster:/tmp /mnt
(Die Settings sind Standard...)

Files, in denen der Server die Information speichert

Das NFS-Protokoll ist stateless, zumindest vom Design her. Trotzdem müssen Vorkehrungen getroffen werden, wenn einmal eine Maschine crashed und neu gebootet werden muß.

Diese Information hält der Server in zwei Files vor: /etc/rmtab und /etc/xtab. Im File rmtab (ReMote table) finden sich die aktuell von verschiedenen Clients gemounteten Verzeichnisse. Führt ein Client einen umount aus, so wird der erste Buchstabe durch ein Kommentar-Zeichen ersetzt. Hier ein Beispiel:

 
# cat /etc/rmtab
#fsclient:/download
nfsclient:/download
nfsclient2:/export/home2

Im File xtab (eXport table) trägt der Server alle von ihm exportierten (also zum Mounten freigegebenen Verzeichnisse) ein. Zusätzlich sind die Zugriffrechte verzeichnet, also welche Maschinen in welchem Modus (lesen, schreiben) auf diesen Export zugreifen können.

Exports einrichten und modifizieren

Dazu dienen die Befehle exportfs und die Datei /etc/exports. Man kann ein Verzeichnis mit entsprechenden Optionen auf der Kommandozeile exportieren - die Einstellungen gehen über einen Boot natürlich verloren. Trägt man den gewünschten Export in die /etc/exports ein, so werden die Exports beim Starten des nfsd automatisch eingerichtet. Mit dem Befehl exportfs -a kann die /etc/exports jederzeit eingelesen werden.

Auf dem Server wird die Datei /etc/exports entsprechend eingerichtet. Jeder Export/Mount kann mit Optionen (lesen, schreiben ..) und Zugriffsgruppen (nach Maschinen und Netzgruppen) versehen werden:

 
# cat /etc/exports
/download -ro,root=nfsclient
/tmp -rw=nfsclient:nfsclient1
/tftpboot -access=einclient
/bin -anon=100
# 

Folgende Optionen stehen zur Verfügung:

Die Optionen können miteinander kombiniert werden, sie werden dann durch Komma getrennt.

Das oben gezeigte File exports wird mit dem Kommando exportfs -av eingelesen und führt zu folgender Ausgabe von showmount -e:

 
export list for nfsserver:
/download (everyone)
/tmp      (everyone)
/tftpboot einclient
/bin      (everyone)

Mounten aus der Sicht des

Der Client erhält per showmount-Befehl diesselbe Sicht der vorhandenen Exports wie der Server:

 
root@nfsclient:/> showmount -e nfsserver
export list for nfsserver:
/download (everyone)
/tmp      (everyone)
/tftpboot einclient
/bin      (everyone)

Das mounten eines vom Server exportierten Filesystemes geschieht durch den Aufruf des mount-Kommandos. Die Syntax wird durch den Namen des Servers, der das Verzeichnis exportiert hat, erweitert:

 
root@nfsclient:/> mount nfsserver:/tftpboot /mnt
mount: 1831-011 access denied for nfsserver:/tftpboot
mount: 1831-008 giving up on:
nfsserver:/tftpboot
The file access permissions do not allow the specified action.

In diesem Fall wird versucht, das Verzeichnis tftpboot zu mounten. Dieses Verzeichnis ist laut der Ausgabe des showmount-Kommandos nur für User auf der Maschine einclient exportiert. Der Server hat die Berechtigung des Client nfsclient geprüft und dabei festgestellt, das keine Berechtigung vorliegt. Der Client wird abgewiesen.

Jetzt mounten wir etwas, was wir dürfen: Das Verzeichnis /bin ist für Jederman (everybody) zugänglich. Der Mount erfolgt mit folgendem Kommando:
mount nfsserver:/bin /mnt

Dieser Mount wird auf Clientseite wie jeder andere Mount behandelt:

 
root@nfsclient:/> mount
  node       mounted        mounted over    vfs       date        options      
-------- ---------------  ---------------  ------ ------------ --------------- 
         /dev/hd4         /                jfs    Sep 03 21:05 rw,log=/dev/hd8 
         /dev/hd2         /usr             jfs    Sep 03 21:05 rw,log=/dev/hd8 
         /dev/hd9var      /var             jfs    Sep 03 21:05 rw,log=/dev/hd8 
         /dev/hd3         /tmp             jfs    Sep 03 21:05 rw,log=/dev/hd8 
         /dev/hd1         /home            jfs    Sep 03 21:06 rw,log=/dev/hd8 
         /proc            /proc            procfs Sep 03 21:06 rw              
         /dev/hd10opt     /opt             jfs    Sep 03 21:06 rw,log=/dev/hd8 
         /dev/tmplv       /download        jfs    Sep 03 21:06 rw,log=/dev/hd8 
nfsserver /bin             /mnt             nfs3   Sep 05 03:27                 

Es wird zusätzlich angegeben, von welchem Server gemountet wird. Das Dateisystem ist nfs3. Eigenartigerweise werden die Optionen des Mounts in der rechten Spalte nicht aufgeführt - ein Bug in AIX 5.1?

Der Client kann es nicht sehen, aber das Verzeichnis /bin ist zwar mit Lese- und Schreibrechten exportiert, mapped aber die UID des darin stehenden Users auf die UID 100, in diesem Fall der User guest mit wenig Rechten. Jetzt gehört das Verzeichnis /bin dem User desselben Namens, und eine UID wie 100 darf dort nichts schreiben.

 
root@nfsclient:/> cd /mnt
root@nfsclient:/mnt> touch ein.file
touch: 0652-046 Cannot create ein.file.

[ Main | Local ]

[ Allgemein | UNIX | AIX | TCP-IP | TCP | ROUTING | DNS | NTP | NFS | FreeBSD | Linux | RPi | SMTP | Tracing | GPS | LW ]

Copyright 2001-2021 by Orm Hager - Es gilt die GPL
Feedback bitte an: Orm Hager (orm@doc-tcpip.org )