Was ist NFS?
Network File System (NFS) ist eines der ältesten Computer-File-Sharing-Produkte, die es heute gibt. Es ist nach wie vor am beliebtesten für die gemeinsame Nutzung von Dateiverzeichnissen zwischen UNIX- und Linux-Systemen. NFS ermöglicht es Servern, bestimmte Verzeichnisse festzulegen, die sie bestimmten Hosts zur Verfügung stellen, und ermöglicht dann Client-Systemen, sich mit diesen Verzeichnissen zu verbinden, indem sie sie lokal einhängen.
NFS kann mithilfe von Firewall-Regeln (iptables), TCP-Wrappern (um den Hostzugriff zuzulassen und zu verweigern) und SELinux (um einzuschränken, wie File-Sharing-Protokolle NFS-Ressourcen gemeinsam nutzen können) gesichert werden. Obwohl NFS von Natur aus unsicher war, als es erstellt wurde (Daten werden unverschlüsselt geteilt und der Benutzerzugriff ist ziemlich offen), haben Funktionen in NFS Version 4 dazu beigetragen, die Gesamtsicherheit von NFS zu verbessern.
Was sind NFS-Server- und RPC-Prozesse
Durch Starten des nfs-server-Dienstes werden der NFS-Server und andere RPC-Prozesse gestartet, die zum Bearbeiten von Anforderungen für gemeinsam genutzte NFS-Dateisysteme erforderlich sind. Sie können den Kurznamen „nfs verwenden “ statt „nfs-server “ beim Starten des Dienstes. Beispiel:
# systemctl start nfs
Dies ist der NFS-Serverprozess, der den Teil des NFS-Dienstes auf Benutzerebene implementiert. Die Hauptfunktionalität wird vom Kernelmodul nfsd übernommen. Das User-Space-Programm gibt lediglich an, auf welchen Sockets der Kernel-Server lauscht, welche NFS-Versionen er unterstützt und wie viele nfsd-Kernel-Threads er verwendet. Verwenden Sie den Befehl ps –e, um die Anzahl der laufenden Threads anzuzeigen.
# ps -ef | grep nfs root 9093 2 0 11:21 ? 00:00:00 [nfsd4_callbacks] root 9099 2 0 11:21 ? 00:00:00 [nfsd] root 9100 2 0 11:21 ? 00:00:00 [nfsd] root 9101 2 0 11:21 ? 00:00:00 [nfsd] root 9102 2 0 11:21 ? 00:00:00 [nfsd] root 9103 2 0 11:21 ? 00:00:00 [nfsd] root 9104 2 0 11:21 ? 00:00:00 [nfsd] root 9105 2 0 11:21 ? 00:00:00 [nfsd] root 9106 2 0 11:21 ? 00:00:00 [nfsd]
Die Anzahl der auszuführenden nfsd-Threads wird in /proc/fs/nfsd/threads definiert Datei. In diesem Beispiel werden 8 nfsd-Threads angegeben:
# cat /proc/fs/nfsd/threads 8
Das Starten des nfs-server-Dienstes startet auch die RPC-Prozesse. Sie können den Befehl ps –e verwenden, um die Namen der RPC-Prozesse anzuzeigen.
# ps -e | grep -i rpc 177 ? 00:00:00 rpciod 9080 ? 00:00:00 rpc.statd 9081 ? 00:00:00 rpc.idmapd 9082 ? 00:00:00 rpcbind 9083 ? 00:00:00 rpc.mountd 9084 ? 00:00:00 rpc.rquotad
rpc.statd
Dieser Prozess implementiert das NSM-RPC-Protokoll (Network Status Monitor), das NFS-Clients benachrichtigt, wenn ein NFS-Server neu gestartet wird, ohne ordnungsgemäß heruntergefahren zu werden. Dies wird nicht mit NFSv4 verwendet.
rpc.mountd
Dies ist der NFS-Mount-Daemon, der die Serverseite der Mount-Anforderungen von NFSv3-Clients implementiert. Es überprüft, ob die angeforderte NFS-Freigabe derzeit vom NFS-Server exportiert wird und ob der Client darauf zugreifen darf. Für NFSv4 ist der rpc.mountd-Daemon nur auf dem NFS-Server erforderlich, um die Exporte einzurichten.
rpc.idmapd
Dadurch werden NFSv4-Client- und -Server-Upcalls bereitgestellt, die zwischen On-the-Wire-NFSv4-Namen (bei denen es sich um Zeichenfolgen in Form von Benutzer@Domäne handelt) und lokalen UIDs und GIDs zugeordnet werden. Damit idmapd mit NFSv4 funktioniert, muss /etc/idmapd.conf konfiguriert werden. Dieser Dienst ist für die Verwendung mit NFSv4 erforderlich, jedoch nicht, wenn alle Hosts denselben DNS-Domänennamen verwenden.
rpc.rquotad
Dieser Prozess stellt Benutzerkontingentinformationen für Remotebenutzer bereit. Es wird automatisch vom nfs-Dienst gestartet und erfordert keine Benutzerkonfiguration. Die Ergebnisse werden vom Befehl quota verwendet, um Benutzerquoten für entfernte Dateisysteme anzuzeigen, und vom Befehl edquota, um Quoten für entfernte Dateisysteme festzulegen.
gesperrt
Dies ist ein Kernel-Thread, der sowohl auf Clients als auch auf Servern ausgeführt wird. Es implementiert das Network Lock Manager (NLM)-Protokoll, das es NFSv3-Clients ermöglicht, Dateien auf dem Server zu sperren. Es wird automatisch gestartet, wenn der NFS-Server ausgeführt wird und wenn ein NFS-Dateisystem gemountet wird.
nfslock
Das Starten dieses Dienstes startet die RPC-Prozesse, die es NFS-Clients ermöglichen, Dateien auf dem Server zu sperren.
Wie konfiguriere ich NFS-Server und NFS-Client in CentOS/RHEL?
Bitte lesen Sie die folgenden Posts, um NFS-Server und -Client-Rechner zu konfigurieren.
Einsteigerleitfaden für NFS in CentOS / RHELCentOS / RHEL 7 :Konfigurieren eines NFS-Servers und NFS-Clients
Was sind die Konfigurationsdateien für den NFS-Server?
Die primäre Konfiguration für den NFS-Server ist die Datei /etc/exports. Dies ist die Datei, die Sie verwenden, um anzugeben, welche Verzeichnisse Sie für die NFS-Clients freigeben möchten. Die Syntax dieser Datei ist:
Directory hostname(options)
Der Wert von Directory sollte durch den Namen des Verzeichnisses ersetzt werden, das Sie freigeben möchten (z. B. /usr/share/doc). Der Wert Hostname sollte ein Client-Hostname sein, der in eine IP-Adresse aufgelöst werden kann. Der Optionswert wird verwendet, um anzugeben, wie die Ressource geteilt werden soll.
Beispielsweise würde der folgende Eintrag in der Datei /etc/exports das Verzeichnis /usr/share/doc mit dem NFS-Client client01 (mit den Optionen „Lesen/Schreiben“) und dem NFS-Client „client02“ (mit der Option „Nur Lesen“) teilen ):
# vi /etc/exports /usr/share/doc client01(rw) client02(ro)
Beachten Sie, dass zwischen den Namen/Optionen von client01 und client02 ein Leerzeichen steht, aber kein Leerzeichen zwischen dem Hostnamen und der entsprechenden Option.
Verstehen der /etc/exports-DateiWas sind die am häufigsten verwendeten NFS-Sharing-Optionen in /etc/exports
Es gibt viele verschiedene NFS-Sharing-Optionen, einschließlich dieser:
- w :Als Lese-/Schreibzugriff freigeben. Beachten Sie, dass die normalen Linux-Berechtigungen weiterhin gelten. (Beachten Sie, dass dies eine Standardoption ist.)
- ro :Als schreibgeschützt freigeben.
- synchronisieren :Dateidatenänderungen werden sofort auf der Festplatte vorgenommen, was sich auf die Leistung auswirkt, aber weniger wahrscheinlich zu Datenverlust führt. Bei einigen Distributionen ist dies die Voreinstellung.
- asynchron :Das Gegenteil von Sync; Dateidatenänderungen werden zunächst im Speicher vorgenommen. Dies beschleunigt die Leistung, führt aber eher zu Datenverlust. Bei einigen Distributionen ist dies die Voreinstellung.
- root_squash :Ordnen Sie den Root-Benutzer und das Gruppenkonto vom NFS-Client den anonymen Konten zu, normalerweise entweder dem Konto "nobody" oder dem Konto "nfsnobody". Weitere Einzelheiten finden Sie im nächsten Abschnitt „Benutzer-ID-Zuordnung“. (Beachten Sie, dass dies eine Standardoption ist.)
- no_root_squash :Ordnen Sie den Root-Benutzer und das Gruppenkonto vom NFS-Client den lokalen Root- und Gruppenkonten zu.
Wie erhalte ich Informationen über die Leistung von NFS-Freigaben?
Der Befehl nfsiostat funktioniert wie der Befehl iostat, außer nur für die NFS-Einhängepunkte. nfsiostat erhält Eingaben von /proc/self/mountstats und liefert Informationen über die Eingabe-/Ausgabeleistung von im System gemounteten NFS-Freigaben. Der Befehl nfsiostat wird von den nfs-utils bereitgestellt Paket.
Unten sehen Sie eine Beispielausgabe des Befehls nfsiostat.
Die folgende Tabelle zeigt eine kurze Beschreibung jeder Spalte in der About-Ausgabe.
Feld | Beschreibung |
---|---|
op/s | Dies ist die Anzahl der Operationen pro Sekunde. |
rpc bklog | Dies ist die Länge der Rückstandswarteschlange. |
kB/s | Dies ist die Anzahl der pro Sekunde geschriebenen/gelesenen kB. |
kB/op | Dies ist die Anzahl der pro Vorgang geschriebenen/gelesenen KB. |
Rückübertragung | Dies ist die Anzahl der Neuübertragungen. |
durchschnittliche RTT (ms) | Dies ist die Dauer von dem Zeitpunkt, an dem der Kernel des Clients die RPC-Anforderung sendet, bis zu dem Zeitpunkt, an dem er die Antwort erhält. |
avg exe (ms) | Dies ist die Dauer ab dem Zeitpunkt, an dem der NFS-Client die RPC-Anfrage an seinen Kernel durchführt, bis die RPC-Anfrage abgeschlossen ist, dies schließt die obige RTT-Zeit ein. |
Nachfolgend finden Sie eine Syntax zur Verwendung des Befehls nfsiostat.
# nfsiostat --help Usage: nfsiostat [interval] [count] [options] [mount point] Options: --version show program's version number and exit -h, --help show this help message and exit Statistics Options: File I/O is displayed unless one of the following is specified: -a, --attr displays statistics related to the attribute cache -d, --dir displays statistics related to directory operations -p, --page displays statistics related to the page cache Display Options: Options affecting display format: -s, --sort Sort NFS mount points by ops/second -l LIST, --list=LIST only print stats for first LIST mount points
Hier
Intervall – Zeit in Sekunden zwischen jedem Bericht.
Anzahl – Anzahl der Berichte, die im Abstand von [Intervall] Sekunden generiert werden sollen. Wenn Sie die Anzahl hier nicht angeben, wird der Bericht kontinuierlich im angegebenen Intervall generiert.
Optionen – Die verschiedenen Optionen werden in den folgenden Beispielen erklärt.
mount_point – Sie können einen bestimmten NFS-Mount-Punkt angeben, für den die Statistiken angezeigt werden sollen. In diesem Fall wird nur ein Bericht für den angegebenen Einhängepunkt generiert.
Wie kann ich aktuell freigegebene NFS-Freigaben anzeigen?
Der Befehl exportfs kann auf dem NFS-Server verwendet werden, um anzuzeigen, was derzeit freigegeben ist:
# exportfs /share [world]
Wie teilt man eine NFS-Ressource über die Befehlszeile?
Der Befehl exportfs kann auch verwendet werden, um eine Ressource vorübergehend gemeinsam zu nutzen, vorausgesetzt, die NFS-Dienste wurden bereits gestartet:
# exportfs -o ro 192.168.1.100:/usr/share/doc # exportfs /usr/share/doc 192.168.1.100 /share [world]
Das -o Option wird verwendet, um die Freigabeoptionen anzugeben. Das Argument enthält den Namen der Systeme, für die die Freigabe erfolgen soll, sowie das Verzeichnis, das freigegeben werden soll, getrennt durch einen Doppelpunkt (:).
Wenn Sie Änderungen an der Datei /etc/exports vornehmen, wird jede neu hinzugefügte Freigabe nach einem Neustart aktiviert. Wenn Sie diese Änderungen sofort aktivieren möchten, führen Sie den folgenden Befehl aus:
# exportfs –a
Wie wird die NFS-Freigabe auf den Client-Systemen bereitgestellt?
Nachdem die NFS-Freigabe vom NFS-Server exportiert wurde, kann sie mit der folgenden Befehlssyntax auf den berechtigten Clients gemountet werden:
# mount [NFS server IP or hostname]:/share/path /client/path
Wenn beispielsweise /exports/downloads vom NFS-Server 10.10.10.100 freigegeben wird, können wir es mit dem folgenden Befehl auf dem Client-Server als Verzeichnis /mnt/downloads mounten:
# mount 10.10.10.100:/exports/downloads /mnt/downloads
Wie demounte ich ein NFS-Dateisystem?
Nachdem ein NFS-Dateisystem gemountet wurde, ist das Unmounten einfach. Sie verwenden den Befehl umount entweder mit dem lokalen Einhängepunkt oder dem Namen des entfernten Dateisystems. Zum Beispiel:
# umount /mnt/nfs_mnt
oder:
# umount 10.10.10.100:/nfs_share
Wie erhalte ich eine Liste von Clients, die mit dem NFS-Server verbunden sind?
Um eine Liste der Clients zu erhalten, die mit dem NFS-Server verbunden sind, verwenden Sie den Befehl showmount an einer Terminal-Eingabeaufforderung. Um auch die Verzeichnisse anzuzeigen, mit denen die Clients verbunden sind, verwenden Sie:
# showmount -a
Was ist der Standardport, der vom NFS-Server verwendet wird?
Standardmäßig verwendet der NFS-Server den Port 2049.
Welche Ports müssen in der Firewall geöffnet sein, damit NFS funktioniert?
Die TCP- und UDP-Ports 2049 (nfs) und 111 (rpcbind) müssen geöffnet sein, damit ein NFS-Server ordnungsgemäß funktioniert. Der Server muss außerdem die TCP- und UDP-Ports 20048 für den showmount-Befehl öffnen, um verfügbare freigegebene NFS-Verzeichnisse von rpc.mountd auf dem Server abzufragen.
Wie kann ich NFS-Freigaben von Client-Systemen anzeigen?
Von einem Client-Linux-System aus können Sie den Befehl showmount verwenden, um zu sehen, welche freigegebenen Verzeichnisse auf einem ausgewählten Computer verfügbar sind, wie in diesem Beispiel:
$ showmount -e server.example.com /export/myshare client.example.com /mnt/public *
Die Ausgabe von showmount zeigt, dass das gemeinsam genutzte Verzeichnis mit dem Namen /export/myshare nur für den Host client.example.com verfügbar ist. Das freigegebene Verzeichnis /mnt/public steht jedoch jedem zur Verfügung.
Wie kann ich gemountete NFS-Mount-Punkte auf dem NFS-Client anzeigen?
Verwenden Sie den folgenden Befehl, um die gemounteten NFS-Mount-Punkte auf einem NFS-Client-Server anzuzeigen:
# mount -t nfs4
Beispielausgabe:
# mount -t nfs4 10.10.10.100:/mnt on /mnt/fed type nfs4 (rw,relatime,vers=4.2,rsize=262144,wsize=262144,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.10.20.200,local_lock=none,addr=10.10.20.200)
Die Ausgabe des Befehls mount -t nfs4 zeigt nur die Dateisysteme, die von NFS-Dateiservern gemountet wurden.
Wie werden NFS-Dateisysteme beim Booten gemountet?
Um ein NFS-Dateisystem so einzurichten, dass es bei jedem Start Ihres Linux-Systems automatisch an einem bestimmten Mount-Punkt gemountet wird, müssen Sie der Datei /etc/fstab einen Eintrag für dieses NFS-Dateisystem hinzufügen.
Hier ist das Format zum Hinzufügen eines NFS-Dateisystems zu Ihrem lokalen System:
host:directory mountpoint nfs options 0 0
Das erste Element (host:directory) identifiziert den NFS-Servercomputer und das freigegebene Verzeichnis. Einhängepunkt ist der lokale Einhängepunkt, an dem das NFS-Verzeichnis eingehängt wird. Darauf folgt der Dateisystemtyp (nfs). Alle Optionen, die sich auf das Mount beziehen, erscheinen als nächstes in einer durch Kommas getrennten Liste. (Die letzten beiden Nullen konfigurieren das System so, dass es den Inhalt des Dateisystems nicht ausgibt und fsck nicht auf dem Dateisystem ausführt.)
Das Folgende sind Beispiele für NFS-Einträge in /etc/fstab:
# vi /etc/fstab nfs_server01:/data /mnt/data nfs bg,rsize=8192,wsize=8192 0 0
Wie verwende ich autofs, um NFS-Dateisysteme bei Bedarf zu mounten?
Die autofs-Einrichtung hängt Netzwerkdateisysteme bei Bedarf ein, wenn jemand versucht, die Dateisysteme zu verwenden. Wenn die autofs-Funktion konfiguriert und aktiviert ist, können Sie alle verfügbaren freigegebenen NFS-Verzeichnisse veranlassen, bei Bedarf einzuhängen. Um die autofs-Funktion nutzen zu können, müssen Sie das autofs-Paket installiert haben.
Wenn Sie bei aktiviertem autofs den Hostnamen und das Verzeichnis kennen, die von einem anderen Hostcomputer gemeinsam genutzt werden, wechseln Sie einfach (cd) in das autofs-Mount-Verzeichnis (standardmäßig /net oder /var/autofs). Dadurch wird die gemeinsam genutzte Ressource automatisch gemountet und für Sie zugänglich gemacht. Die folgenden Schritte erklären, wie Sie die Autofs-Funktion in Fedora oder RHEL aktivieren:
1. Öffnen Sie als Root-Benutzer die /etc/auto.master Datei und suchen Sie nach der folgenden Zeile:
# vi /etc/auto.master /net -hosts
Dadurch fungiert das /net-Verzeichnis als Einhängepunkt für die freigegebenen NFS-Verzeichnisse, auf die Sie im Netzwerk zugreifen möchten.
2. Um den autofs-Dienst in CentOS/RHEL 7 oder höher zu starten, geben Sie Folgendes als Root-Benutzer ein:
# systemctl start autofs.service
3. Richten Sie auf Systemen mit CentOS/RHEL 7 oder höher den autofs-Dienst so ein, dass er bei jedem Systemstart neu gestartet wird:
# systemctl enable autofs
Wie konfiguriere ich firewalld auf einem NFS-Server?
Damit der NFS-Server funktioniert, aktivieren Sie die Dienste nfs, mountd und rpc-bind in der entsprechenden Zone in der Anwendung firewall-config oder verwenden Sie firewall-cmd :
# firewall-cmd --add-service=nfs --zone=internal --permanent # firewall-cmd --add-service=mountd --zone=internal --permanent # firewall-cmd --add-service=rpc-bind --zone=internal --permanent