Aus Wikipedia:
Network File System (NFS) ist ein verteiltes Dateisystemprotokoll, das ursprünglich 1984 von Sun Microsystems entwickelt wurde und es einem Benutzer auf einem Client-Computer ermöglicht, über ein Netzwerk auf Dateien zuzugreifen, ähnlich wie auf einen lokalen Speicher.
- NFS ist nicht verschlüsselt. Tunneln Sie NFS durch ein verschlüsseltes Protokoll wie Kerberos oder (sicheres) VPN, wenn Sie mit sensiblen Daten arbeiten.
- Im Gegensatz zu Samba hat NFS standardmäßig keine Benutzerauthentifizierung, der Zugriff der Clients wird durch ihre IP-Adresse/Hostname eingeschränkt.
- NFS erwartet, dass die Benutzer- und/oder Benutzergruppen-IDs auf dem Client und dem Server gleich sind. Aktivieren Sie NFSv4 idmapping oder setzen Sie die UID/GID manuell außer Kraft, indem Sie
anonuid
anongid
zusammen mitall_squash
in/etc/exports
verwenden.
Installation
Beide, Client und Server, benötigen nur die Installation des nfs-utils-Pakets.
Es wird dringend empfohlen, einen Zeitsynchronisations-Daemon zu verwenden, um die Uhren von Client und Server synchron zu halten. Ohne genaue Uhren auf allen Knoten kann NFS unerwünschte Verzögerungen verursachen.
Konfiguration
Server
Globale Konfigurationsoptionen werden in /etc/nfs.conf
eingestellt. Benutzer von einfachen Konfigurationen sollten diese Datei nicht bearbeiten müssen.
Der NFS-Server benötigt eine Liste von Freigaben (siehe exports(5) für Details), die in /etc/exports
oder /etc/exports.d/*.exports
definiert sind. Diese Freigaben sind relativ zur sogenannten NFS-Wurzel. Eine gute Sicherheitspraxis ist es, eine NFS-Wurzel in einem diskreten Verzeichnisbaum zu definieren, wodurch die Benutzer auf diesen Einhängepunkt beschränkt bleiben. Bind-Mounts werden verwendet, um den Freigabe-Einhängepunkt mit dem tatsächlichen Verzeichnis an anderer Stelle im Dateisystem zu verknüpfen.
Betrachten Sie das folgende Beispiel, in dem:
- Die NFS-Root ist
/srv/nfs
. - Der Export erfolgt
/srv/nfs/music
über ein Bind-Mount auf das eigentliche Ziel/mnt/music
.
# mkdir -p /srv/nfs/music /mnt/music# mount --bind /mnt/music /srv/nfs/music
Um das Bind-Mount über Neustarts hinweg beständig zu machen, fügen Sie es zur fstab hinzu:
/etc/fstab
/mnt/music /srv/nfs/music none bind 0 0
Fügen Sie gemeinsam zu nutzende Verzeichnisse hinzu und beschränken Sie sie über einen CIDR oder Hostnamen auf einen Adressbereich von Client-Rechnern, die sie in /etc/exports
einhängen dürfen, e.z.:
/etc/exports
/srv/nfs 192.168.1.0/24(rw,sync,crossmnt,fsid=0)/srv/nfs/music 192.168.1.0/24(rw,sync)/srv/nfs/home 192.168.1.0/24(rw,sync,nohide)/srv/nfs/public 192.168.1.0/24(ro,all_squash,insecure) desktop(rw,sync,all_squash,anonuid=99,anongid=99) # map to user/group - in diesem Fall nobody
- Mit der Option
crossmnt
können Clients auf alle Dateisysteme zugreifen, die auf einem mitcrossmnt
markierten Dateisystem eingehängt sind, und müssen nicht jeden Child-Export einzeln einhängen. Beachten Sie, dass dies möglicherweise nicht wünschenswert ist, wenn ein Kindexport mit einem anderen Adressbereich geteilt wird. - Anstatt
crossmnt
kann man auch die Optionnohide
für Kindexporte verwenden, so dass sie automatisch eingehängt werden können, wenn ein Client den Root-Export einhängt. Anders alscrossmnt
respektiertnohide
immer noch Adressbereiche von Child-Exporten. - Verwenden Sie ein Sternchen (*), um den Zugriff von jeder Schnittstelle zu erlauben.
Es ist zu beachten, dass eine Änderung von /etc/exports
bei laufendem Server einen Re-Export erfordert, damit die Änderungen wirksam werden:
# exportfs -arv
Um den aktuell geladenen Zustand der Exporte genauer zu betrachten, verwenden Sie:
# exportfs -v
Für weitere Informationen über alle verfügbaren Optionen siehe exports(5).
fsid=1
benötigt.Starten des Servers
Starten und aktivieren Sie nfs-server.service
.
rpc-gssd.service
) wartet, bis der Zufallszahlengenerator-Pool ausreichend initialisiert ist, was den Startvorgang möglicherweise verzögert. Dies ist besonders auf Headless-Servern häufig der Fall. Es wird dringend empfohlen, den Entropie-Pool mit einem Dienstprogramm wie Rng-tools (wenn TPM unterstützt wird) oder Haveged in diesen Szenarien aufzufüllen.zfs-share.service
. Ohne dies werden ZFS-Freigaben nach einem Neustart nicht mehr exportiert. Siehe ZFS#NFS.Einschränken von NFS auf Schnittstellen/IPs
Standardmäßig wird das Starten von nfs-server.service
auf allen Netzwerkschnittstellen auf Verbindungen lauschen, unabhängig von /etc/exports
. Dies kann geändert werden, indem definiert wird, auf welchen IPs und/oder Hostnamen gelauscht werden soll.
/etc/nfs.conf
host=192.168.1.123# Alternativ verwenden Sie host=myhostname
Neustart nfs-server.service
, um die Änderungen sofort anzuwenden.
Firewall-Konfiguration
Um den Zugriff durch eine Firewall zu ermöglichen, müssen bei Verwendung der Standardkonfiguration möglicherweise die TCP- und UDP-Ports 111
2049
und 20048
geöffnet werden; Verwenden Sie rpcinfo -p
, um die genauen Ports zu untersuchen, die auf dem Server verwendet werden:
$ rpcinfo -p | grep nfs
100003 3 tcp 2049 nfs100003 4 tcp 2049 nfs100227 3 tcp 2049 nfs_acl
Wenn Sie NFSv4 verwenden, stellen Sie sicher, dass der TCP-Port 2049
geöffnet ist. Es sollte keine weitere Portöffnung erforderlich sein:
/etc/iptables/iptables.rules
-A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
Wenn Sie eine ältere NFS-Version verwenden, stellen Sie sicher, dass andere Ports geöffnet sind:
# iptables -A INPUT -p tcp -m tcp --dport 111 -j ACCEPT# iptables -A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT# iptables -A INPUT -p tcp -m tcp --dport 20048 -j ACCEPT# iptables -A INPUT -p udp -m udp --dport 111 -j ACCEPT# iptables -A INPUT -p udp -m udp --dport 2049 -j ACCEPT# iptables -A INPUT -p udp -m udp --dport 20048 -j ACCEPT
Damit diese Konfiguration bei jedem Systemstart geladen wird, editieren Sie /etc/iptables/iptables.rules
und fügen Sie die folgenden Zeilen ein:
/etc/iptables/iptables.rules
-A INPUT -p tcp -m tcp --dport 111 -j ACCEPT-A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT-A INPUT -p tcp -m tcp --dport 20048 -j ACCEPT-A INPUT -p udp -m udp --dport 111 -j ACCEPT-A INPUT -p udp -m udp --dport 2049 -j ACCEPT-A INPUT -p udp -m udp --dport 20048 -j ACCEPT
Die vorherigen Befehle können durch Ausführen gespeichert werden:
# iptables-save > /etc/iptables/iptables.rules
Bei Verwendung von NFSv3 und den oben aufgelisteten statischen Ports für rpc.statd
und lockd
müssen ggf. noch folgende Ports zur Konfiguration hinzugefügt werden:
/etc/iptables/iptables.rules
-A INPUT -p tcp -m tcp --dport 32765 -j ACCEPT-A INPUT -p tcp -m tcp --dport 32803 -j ACCEPT-A INPUT -p udp -m udp --dport 32765 -j ACCEPT-A INPUT -p udp -m udp --dport 32803 -j ACCEPT
Um die Änderungen anzuwenden, Starten Sie iptables.service
neu.
NFSv4 idmapping aktivieren
Dieser Artikel oder Abschnitt muss erweitert werden.
- NFSv4 idmapping funktioniert nicht mit der standardmäßigen
sec=sys
Einhängeoption. - NFSv4 idmapping muss sowohl auf dem Client als auch auf dem Server aktiviert sein.
- Eine weitere Möglichkeit ist, sicherzustellen, dass die Benutzer- und Gruppen-IDs (UID und GID) sowohl auf dem Client als auch auf dem Server übereinstimmen.
- Das Aktivieren/Starten von
nfs-idmapd.service
sollte nicht erforderlich sein, da es durch einen neuen id-Mapper ersetzt wurde:
# dmesg | grep id_resolver
NFS: Registrierung des Schlüsseltyps id_resolver Schlüsseltyp id_resolver registriert
Das NFSv4-Protokoll stellt die UID- und GID-Werte des lokalen Systems auf der Leitung als Zeichenketten der Form user@domain
dar. Der Prozess der Übersetzung von UID zu String und String zu UID wird als ID-Mapping bezeichnet. Siehe nfsidmap(8) für Details.
Auch wenn idmapd läuft, ist er möglicherweise nicht vollständig aktiviert. Wenn /sys/module/nfs/parameters/nfs4_disable_idmapping
oder /sys/module/nfsd/parameters/nfs4_disable_idmapping
auf einem Client/Server Y
zurückgibt, aktivieren Sie es durch:
nfs4
und nfsd
müssen jeweils geladen sein, damit die folgenden Pfade zur Verfügung stehen.Auf dem Client:
# echo "N" | tee /sys/module/nfs/parameters/nfs4_disable_idmapping
Auf dem Server:
# echo "N" | tee /sys/module/nfsd/parameters/nfs4_disable_idmapping
Setzen Sie als Moduloption, um diese Änderung dauerhaft zu machen, d. h.d. h.:
/etc/modprobe.d/nfsd.conf
options nfs nfs4_disable_idmapping=0options nfsd nfs4_disable_idmapping=0
Um idmapping vollständig zu nutzen, stellen Sie sicher, dass die Domäne in /etc/idmapd.conf
sowohl auf dem Server als auch auf dem Client konfiguriert ist:
/etc/idmapd.conf
# Folgendes sollte auf den lokalen NFSv4-Domänennamen gesetzt werden# Die Vorgabe ist der DNS-Domänenname des Hosts.Domain = domain.tld
Siehe Details.
Client
Benutzer, die NFS4 mit Kerberos verwenden wollen, müssen nfs-client.target
starten und aktivieren.
Manuelles Einhängen
Für NFSv3 verwenden Sie diesen Befehl, um die exportierten Dateisysteme des Servers anzuzeigen:
$ showmount -e servername
Für NFSv4 mounten Sie das NFS-Wurzelverzeichnis und schauen sich nach verfügbaren Mounts um:
# mount server:/ /mountpoint/on/client
Dann mounten Sie unter Auslassung des NFS-Exportstammes des Servers:
# mount -t nfs -o vers=4 servername:/music /mountpoint/on/client
Wenn das Mounten fehlschlägt, versuchen Sie, die Export-Root des Servers einzubinden (für Debian/RHEL/SLES erforderlich, einige Distributionen benötigen -t nfs4
statt -t nfs
):
# mount -t nfs -o vers=4 servername:/srv/nfs/music /mountpoint/on/client
Einhängen mit /etc/fstab
Die Verwendung von fstab ist nützlich für einen Server, der immer eingeschaltet ist, und die NFS-Freigaben sind verfügbar, wenn der Client hochfährt. Bearbeiten Sie die Datei /etc/fstab
und fügen Sie eine entsprechende Zeile hinzu, die diese Einstellung widerspiegelt. Auch hier wird das NFS-Export-Root des Servers weggelassen.
/etc/fstab
Servername:/music /mountpoint/on/client nfs defaults,timeo=900,retrans=5,_netdev0 0
Ein paar zusätzliche Einhängeoptionen, die Sie beachten sollten:
rsize und wsize Derrsize
Wert ist die Anzahl der Bytes, die beim Lesen vom Server verwendet werden. Derwsize
Wert ist die Anzahl der Bytes, die beim Schreiben auf den Server verwendet werden. Wenn diese Optionen nicht angegeben sind, handeln Client und Server standardmäßig die größten Werte aus, die sie beide unterstützen können (siehe nfs(5) für Details). Nach dem Ändern dieser Werte wird empfohlen, die Leistung zu testen (siehe #Leistungsoptimierung). soft oder hard Bestimmt das Wiederherstellungsverhalten des NFS-Clients nach einer Zeitüberschreitung einer NFS-Anfrage. Wenn keine der beiden Optionen angegeben ist (oder wenn die Optionhard
angegeben ist), werden NFS-Anfragen unbegrenzt oft wiederholt. Wenn die Optionsoft
angegeben ist, schlägt der NFS-Client eine NFS-Anfrage nach erneuten Übertragungen fehl, was dazu führt, dass der NFS-Client einen Fehler an die aufrufende Anwendung zurückgibt.
soft
-Timeout kann in bestimmten Fällen eine stille Datenkorruption verursachen. Verwenden Sie daher die Option soft
nur, wenn die Reaktionsfähigkeit des Clients wichtiger ist als die Datenintegrität. Die Verwendung von NFS over TCP oder das Erhöhen des Wertes der Option retrans
kann einige der Risiken der Option soft
abmildern.timeo Dertimeo
-Wert ist die Zeit in Zehntelsekunden, die gewartet wird, bevor eine Übertragung nach einer RPC-Zeitüberschreitung erneut gesendet wird. Der Standardwert für NFS über TCP ist 600 (60 Sekunden). Nach der ersten Zeitüberschreitung wird der Zeitüberschreitungswert bei jedem erneuten Versuch für maximal 60 Sekunden oder bis zum Auftreten einer größeren Zeitüberschreitung verdoppelt. Wenn eine Verbindung zu einem langsamen Server oder über ein stark ausgelastetes Netzwerk hergestellt wird, kann durch Erhöhen dieses Timeout-Werts eine bessere Stabilität erreicht werden. retrans Die Anzahl, wie oft der NFS-Client eine Anfrage wiederholt, bevor er weitere Wiederherstellungsmaßnahmen versucht. Wenn die Optionretrans
nicht angegeben wird, versucht der NFS-Client jede Anfrage dreimal. Der NFS-Client generiert nach den Wiederholungsversuchen eine Meldung „Server antwortet nicht“ und versucht dann weitere Wiederherstellungsmaßnahmen (je nachdem, ob die Option „Hard Mount“ aktiviert ist). _netdev Die Option
_netdev
sagt dem System, dass es warten soll, bis das Netzwerk steht, bevor es versucht, die Freigabe einzuhängen – systemd setzt dies für NFS voraus.
fs_passno
) auf einen Wert ungleich Null kann zu unerwartetem Verhalten führen, z.B. zu Hängern, wenn die systemd-Automobilisierung auf eine Prüfung wartet, die nie stattfinden wird.Mounten über /etc/fstab mit systemd
Eine andere Methode ist die Verwendung der x-systemd.automount-Option, die das Dateisystem beim Zugriff einhängt:
/etc/fstab
Servername:/home /mountpoint/on/client nfs _netdev,noauto,x-systemd.automount,x-systemd.mount-timeout=10,timeo=14,x-systemd.idle-timeout=1min 0 0
Um systemd auf die Änderungen an der fstab aufmerksam zu machen, laden Sie systemd neu und starten Sie remote-fs.target
.
- Die
noauto
-Mount-Option hängt die NFS-Freigabe erst ein, wenn auf sie zugegriffen wird: verwenden Sieauto
, damit sie sofort verfügbar ist.
Wenn Sie Probleme mit dem Einhängen haben, weil das Netzwerk nicht funktioniert/verfügbar ist, aktivieren SieNetworkManager-wait-online.service
. Es stellt sicher, dassnetwork.target
alle Links zur Verfügung hat, bevor es aktiv wird. - Die
users
-Mount-Option würde Benutzer-Mounts erlauben, aber seien Sie sich bewusst, dass es weitere Optionen wie zum Beispielnoexec
impliziert. - Die
x-systemd.idle-timeout=1min
-Option wird die NFS-Freigabe automatisch nach 1 Minute Nichtbenutzung aushängen. Gut für Laptops, die plötzlich vom Netzwerk getrennt werden könnten. - Wenn das Herunterfahren/Rebooten wegen NFS zu lange dauert, aktivieren Sie
NetworkManager-wait-online.service
, um sicherzustellen, dass NetworkManager nicht beendet wird, bevor die NFS-Volumes ausgehängt werden. - Fügen Sie nicht die
x-systemd.requires=network-online.target
-Mount-Option hinzu, da dies zu Bestellzyklen innerhalb von systemd führen kann. systemd fügt dienetwork-online.target
-Abhängigkeit für_netdev
mount automatisch hinzu. - Die Verwendung der
nocto
-Option kann die Leistung für Nur-Lese-Mounts verbessern, sollte aber nur verwendet werden, wenn sich die Daten auf dem Server nur gelegentlich ändern.
Als systemd-Einheit
Erstellen Sie eine neue .mount
-Datei innerhalb von /etc/systemd/system
, z. B. mnt-myshare.mount
. Siehe systemd.mount(5) für Details.
mnt-myshare.mount
nur verwendet werden, wenn Sie die Freigabe unter /mnt/myshare
einhängen möchten. Andernfalls kann der folgende Fehler auftreten: systemd: mnt-myshare.mount: Where= setting does not match unit name. Refusing.
.What=
Pfad zur Freigabe
Where=
Pfad zum Einhängen der Freigabe
Options=
Optionen zum Einhängen der Freigabe
- Netzwerk-Einhängeeinheiten erwerben automatisch
After
Abhängigkeiten vonremote-fs-pre.target
network.target
undnetwork-online.target
, und erhalten eineBefore
-Abhängigkeit vonremote-fs.target
, sofern nicht dienofail
-Mount-Option gesetzt ist. Zu letzterem wird einWants
hinzugefügt. - Hängen Sie
noauto
anOptions
an, um ein automatisches Einhängen während des Bootens zu verhindern (es sei denn, es wird von einem anderen Gerät eingezogen). - Wenn Sie einen Hostnamen für den freizugebenden Server verwenden wollen (statt einer IP-Adresse), fügen Sie
nss-lookup.target
zuAfter
hinzu. Dies könnte Mount-Fehler beim Booten vermeiden, die beim Testen nicht auftreten.
/etc/systemd/system/mnt-myshare.mount
Description=Mount Share at bootWhat=172.16.24.192:/mnt/myshareWhere=/mnt/myshareOptions=Type=nfsTimeoutSec=30WantedBy=multi-user.target
ForceUnmount=true
an
an, damit die Freigabe (zwangsweise) ausgehängt werden kann.Um mnt-myshare.mount
zu verwenden, starten Sie die Unit und aktivieren Sie, dass sie beim Systemstart ausgeführt wird.
automount
Um eine Freigabe automatisch einzuhängen, kann man die folgende Automount-Unit verwenden:
/etc/systemd/system/mnt-myshare.automount
Description=Automount myshareWhere=/mnt/myshareWantedBy=multi-user.target
Deaktivieren/stoppen Sie die mnt-myshare.mount
Einheit und aktivieren/starten Sie mnt-myshare.automount
, um die Freigabe automatisch zu aktivieren, wenn auf den Mount-Pfad zugegriffen wird.
TimeoutIdleSec
an, um das automatische Aushängen zu aktivieren. Siehe systemd.automount(5) für Details.Montieren mit autofs
Die Verwendung von autofs ist nützlich, wenn sich mehrere Maschinen über NFS verbinden wollen; sie könnten sowohl Clients als auch Server sein. Der Grund, warum diese Methode der früheren vorzuziehen ist, ist, dass der Client keine Fehlermeldung ausgibt, dass er keine NFS-Freigaben finden kann, wenn der Server ausgeschaltet ist. Siehe autofs#NFS-Netzwerkeinhängungen für Details.
Tipps und Tricks
Leistungsoptimierung
Bei der Verwendung von NFS in einem Netzwerk mit einer beträchtlichen Anzahl von Klienten kann man die Standard-NFS-Threads von 8 auf 16 oder sogar auf einen höheren Wert erhöhen, abhängig von den Anforderungen des Servers/Netzwerks:
/etc/nfs.conf
threads=16
Es kann notwendig sein, die rsize
und wsize
Einhängeoptionen auf die Anforderungen der Netzwerkkonfiguration abzustimmen.
In neueren Linux-Kerneln (>2.6.18) variiert die Größe der vom NFS-Server erlaubten I/O-Operationen (standardmäßige maximale Blockgröße) in Abhängigkeit von der Größe des Arbeitsspeichers, mit einem Maximum von 1M (1048576 Bytes), die maximale Blockgröße des Servers wird auch dann verwendet, wenn NFS-Clients größere rsize
und wsize
benötigen. Siehe https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/5.8_Technical_Notes/Known_Issues-kernel.htmlIt Es ist möglich, die standardmäßig vom Server erlaubte maximale Blockgröße zu ändern, indem Sie vor dem Start von nfsd in das /proc/fs/nfsd/max_block_size
schreiben. Zum Beispiel stellt der folgende Befehl die vorherige Standard-iosize von 32k wieder her:
# echo 32768 > /proc/fs/nfsd/max_block_size
Um die Änderung dauerhaft zu machen, erstellen Sie eine systemd-tmpfile:
/etc/tmpfiles.d/nfsd-block-size.conf
w /proc/fs/nfsd/max_block_size - - - - 32768
Zum Einhängen mit den erhöhten rsize
und wsize
Einhängeoptionen:
# mount -t nfs -o rsize=32768,wsize=32768,vers=4 servername:/srv/nfs/music /mountpoint/on/client
Außerdem kann trotz der Verletzung des NFS-Protokolls das Setzen von async
anstelle von sync
oder sync,no_wdelay
vor allem auf drehenden Festplatten einen deutlichen Leistungsgewinn bringen. Konfigurieren Sie die Exporte mit dieser Option und führen Sie dann exportfs -arv
zur Anwendung aus.
/etc/exports
/srv/nfs 192.168.1.0/24(rw,async,crossmnt,fsid=0)/srv/nfs/music 192.168.1.0/24(rw,async)
Automatische Einhängebehandlung
Dieser Trick ist nützlich für NFS-Freigaben in einem drahtlosen Netzwerk und/oder in einem Netzwerk, das möglicherweise unzuverlässig ist. Wenn der NFS-Host unerreichbar wird, wird die NFS-Freigabe ausgehängt, um hoffentlich Systemhänger zu verhindern, wenn Sie die hard
Einhängeoption verwenden.
Stellen Sie sicher, dass die NFS-Einhängepunkte in der fstab korrekt angegeben sind:
/etc/fstab
lithium:/mnt/data /mnt/data nfs noauto 0 0lithium:/var/cache/pacman /var/cache/pacmannfs noauto 0 0
- Verwenden Sie Hostnamen in der fstab, damit dies funktioniert, keine IP-Adressen.
- Um NFS-Freigaben mit Nicht-Root-Benutzern einhängen zu können, muss die Option
users
hinzugefügt werden. - Die
noauto
mount-Option weist systemd an, die Freigaben beim Booten nicht automatisch einzuhängen, da dies sonst zum Abwürgen des Boot-Prozesses führen kann.
Erstellen Sie das auto_share
-Skript, das von cron oder systemd/Timers verwendet wird, um mit ICMP-Ping zu prüfen, ob der NFS-Host erreichbar ist:
/usr/local/bin/auto_share
#!/bin/bashfunction net_umount { umount -l -f $1 &>/dev/null}function net_mount { mountpoint -q $1 || mount $1}NET_MOUNTS=$(sed -e '/^.*#/d' -e '/^.*:/!d' -e 's/\t/ /g' /etc/fstab | tr -s " ") | while IFS= read -r linedo SERVER=$(echo $line | cut -f1 -d":") MOUNT_POINT=$(echo $line | cut -f2 -d" ") # Prüfen, ob Server bereits getestet if }" =~ "${SERVER}" ]]; then # Der Server ist hochgefahren, stellen Sie sicher, dass die Freigabe eingehängt ist net_mount $MOUNT_POINT elif }" =~ "${SERVER}" ]]; then # Der Server konnte nicht erreicht werden, hänge die Freigabe aus net_umount $MOUNT_POINT else # Prüfe, ob der Server erreichbar ist ping -c 1 "${SERVER}" &>/dev/null if ; then server_notok}]=$SERVER # Der Server konnte nicht erreicht werden, hänge die Freigabe aus net_umount $MOUNT_POINT else server_ok}]=$SERVER # Der Server läuft, stelle sicher, dass die Freigabe eingehängt ist net_mount $MOUNT_POINT fi fidone
# Check if the server is reachableping -c 1 "${SERVER}" &>/dev/null
mit:
# Check if the server is reachabletimeout 1 bash -c ": < /dev/tcp/${SERVER}/2049"
im obigen Skript auto_share
.
Stellen Sie sicher, dass das Skript ausführbar ist:
# chmod +x /usr/local/bin/auto_share
Als Nächstes konfigurieren Sie das Skript so, dass es jedes X ausgeführt wird, in den Beispielen unten ist das jede Minute.
Cron
# crontab -e
* * * * * /usr/local/bin/auto_share
systemd/Timers
/etc/systemd/system/auto_share.timer
Description=NFS-Freigaben automatisch jede Minute einschaltenOnCalendar=*-*-* *:*:00WantedBy=timers.target
/etc/systemd/system/auto_share.service
Description=NFS-Freigaben automatisch aktivierenAfter=syslog.target network.targetType=oneshotExecStart=/usr/local/bin/auto_shareWantedBy=multi-user.target
Schließlich aktivieren und starten Sie auto_share.timer
.
Verwendung eines NetworkManager-Dispatchers
NetworkManager kann auch so konfiguriert werden, dass ein Skript bei einer Änderung des Netzwerkstatus ausgeführt wird.
Die einfachste Methode für das Einhängen von Freigaben bei einer Änderung des Netzwerkstatus ist es, das auto_share
-Skript per Symlink zu verbinden:
# ln -s /usr/local/bin/auto_share /etc/NetworkManager/dispatcher.d/30-nfs.sh
Doch in diesem speziellen Fall wird das Aushängen erst erfolgen, nachdem die Netzwerkverbindung bereits deaktiviert wurde, was unsauber ist und zu Effekten wie dem Einfrieren von KDE Plasma-Applets führen kann.
Das folgende Skript hängt die NFS-Freigaben sicher aus, bevor die betreffende Netzwerkverbindung deaktiviert wird, indem es auf die Ereignisse pre-down
und vpn-pre-down
wartet und das Skript ausführbar macht:
/etc/NetworkManager/dispatcher.d/30-nfs.sh
#!/bin/bash# Finden Sie die Verbindungs-UUID mit "nmcli con show" im Terminal.# Alle NetworkManager-Verbindungstypen werden unterstützt: drahtlos, VPN, verkabelt...WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9 "if ]; then # Skriptparameter $1: NetworkManager-Verbindungsname, nicht verwendet # Skriptparameter $2: Dispatched Event case "$2" in "up") mount -a -t nfs4,nfs ;; "pre-down");& "vpn-pre-down") umount -l -a -t nfs4,nfs -f >/dev/null ;; esacfi
noauto
, entfernen Sie diese Mount-Option oder verwenden Sie auto
, damit der Dispatcher diese Mounts verwalten kann.Erstellen Sie einen Symlink innerhalb von /etc/NetworkManager/dispatcher.d/pre-down
, um die pre-down
-Ereignisse abzufangen:
# ln -s /etc/NetworkManager/dispatcher.d/30-nfs.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-nfs.sh
Fehlersuche
Es gibt einen eigenen Artikel NFS/Fehlersuche.
Siehe auch
- Siehe auch Avahi, eine Zeroconf-Implementierung, die eine automatische Erkennung von NFS-Freigaben ermöglicht.
- HOWTO: Diskless network boot NFS root
- Microsoft Services for Unix NFS Client info
- NFS auf Snow Leopard
- http://chschneider.eu/linux/server/nfs.shtml
- Wie man die NFS-Leistung von Linux abstimmt und optimiert
- Linux: NFS-Leistung abstimmen
\n’bprintf %s „$NET_MOUNTS“ | while IFS= read -r linedo SERVER=$(echo $line | cut -f1 -d“:“) MOUNT_POINT=$(echo $line | cut -f2 -d“ „) # Check if server already tested if }“ =~ „${SERVER}“ ]]; then # The server is up, make sure the share are mounted net_mount $MOUNT_POINT elif }“ =~ „${SERVER}“ ]]; then # The server could not be reached, unmount the share net_umount $MOUNT_POINT else # Check if the server is reachable ping -c 1 „${SERVER}“ &>/dev/null if ; then server_notok}]=$SERVER # The server could not be reached, unmount the share net_umount $MOUNT_POINT else server_ok}]=$SERVER # The server is up, make sure the share are mounted net_mount $MOUNT_POINT fi fidone
# Check if the server is reachableping -c 1 "${SERVER}" &>/dev/null
with:
# Check if the server is reachabletimeout 1 bash -c ": < /dev/tcp/${SERVER}/2049"
in the auto_share
script above.
Make sure the script is executable:
# chmod +x /usr/local/bin/auto_share
Next check configure the script to run every X, in the examples below this is every minute.
Cron
# crontab -e
* * * * * /usr/local/bin/auto_share
systemd/Timers
/etc/systemd/system/auto_share.timer
Description=Automount NFS shares every minuteOnCalendar=*-*-* *:*:00WantedBy=timers.target
/etc/systemd/system/auto_share.service
Description=Automount NFS sharesAfter=syslog.target network.targetType=oneshotExecStart=/usr/local/bin/auto_shareWantedBy=multi-user.target
Finally, enable and start auto_share.timer
.
Using a NetworkManager dispatcher
NetworkManager can also be configured to run a script on network status change.
The easiest method for mount shares on network status change is to symlink the auto_share
script:
# ln -s /usr/local/bin/auto_share /etc/NetworkManager/dispatcher.d/30-nfs.sh
However, in that particular case unmounting will happen only after the network connection has already been disabled, which is unclean and may result in effects like freezing of KDE Plasma applets.
The following script safely unmounts the NFS shares before the relevant network connection is disabled by listening for the pre-down
and vpn-pre-down
events, make the script is executable:
/etc/NetworkManager/dispatcher.d/30-nfs.sh
#!/bin/bash# Find the connection UUID with "nmcli con show" in terminal.# All NetworkManager connection types are supported: wireless, VPN, wired...WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9"if ]; then # Script parameter $1: NetworkManager connection name, not used # Script parameter $2: dispatched event case "$2" in "up") mount -a -t nfs4,nfs ;; "pre-down");& "vpn-pre-down") umount -l -a -t nfs4,nfs -f >/dev/null ;; esacfi
noauto
option, remove this mount option or use auto
to allow the dispatcher to manage these mounts.Create a symlink inside /etc/NetworkManager/dispatcher.d/pre-down
to catch the pre-down
events:
# ln -s /etc/NetworkManager/dispatcher.d/30-nfs.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-nfs.sh
Troubleshooting
There is a dedicated article NFS/Troubleshooting.
See also
- See also Avahi, a Zeroconf implementation which allows automatic discovery of NFS shares.
- HOWTO: Diskless network boot NFS root
- Microsoft Services for Unix NFS Client info
- NFS on Snow Leopard
- http://chschneider.eu/linux/server/nfs.shtml
- How to do Linux NFS Performance Tuning and Optimization
- Linux: Tune NFS Performance