Van Wikipedia:
Network File System (NFS) is een gedistribueerd bestandssysteemprotocol dat oorspronkelijk in 1984 door Sun Microsystems is ontwikkeld en waarmee een gebruiker op een clientcomputer via een netwerk toegang kan krijgen tot bestanden op een manier die vergelijkbaar is met de manier waarop lokale opslag wordt benaderd.
- NFS is niet versleuteld. Tunnel NFS via een versleuteld protocol zoals Kerberos of (beveiligde) VPN als je te maken hebt met gevoelige gegevens.
- In tegenstelling tot Samba, heeft NFS standaard geen gebruikers authenticatie, client toegang wordt beperkt door hun IP-adres/hostnaam.
- NFS verwacht dat de gebruiker en/of gebruikersgroep ID’s hetzelfde zijn op zowel de client als de server. Schakel NFSv4 idmapping in of hef de UID/GID handmatig op door
anonuid
anongid
samen metall_squash
in/etc/exports
te gebruiken.
Installatie
Voor zowel client als server is alleen de installatie van het nfs-utils pakket nodig.
Het wordt sterk aangeraden om een tijdsynchronisatie daemon te gebruiken om de klokken van client/server synchroon te houden. Zonder nauwkeurige klokken op alle nodes, kan NFS ongewenste vertragingen introduceren.
Configuratie
Server
Globale configuratie opties worden ingesteld in /etc/nfs.conf
. Gebruikers van eenvoudige configuraties zouden dit bestand niet hoeven te bewerken.
De NFS server heeft een lijst van exports nodig (zie exports(5) voor details) die zijn gedefinieerd in /etc/exports
of /etc/exports.d/*.exports
. Deze shares zijn relatief ten opzichte van de zogenaamde NFS root. Een goede beveiligingspraktijk is om een NFS root in een discrete mappenstructuur te definiëren, waardoor gebruikers beperkt blijven tot dat koppelpunt. Bind mounts worden gebruikt om het share mount punt te koppelen aan de werkelijke directory elders op het bestandssysteem.
Overweeg het volgende voorbeeld waarin:
- De NFS root is
/srv/nfs
. - De export is
/srv/nfs/music
via een bind mount naar het eigenlijke doel/mnt/music
.
# mkdir -p /srv/nfs/music /mnt/music# mount --bind /mnt/music /srv/nfs/music
Om de bind mount persistent te maken tijdens reboots, voeg deze toe aan fstab:
/etc/fstab
/mnt/music /srv/nfs/music none bind 0 0
Voeg directories toe die gedeeld moeten worden en beperk ze tot een reeks adressen via een CIDR of hostname(s) van client machines die ze zullen mogen mounten in /etc/exports
, e.b.v.:
/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 dit geval nobody
- De
crossmnt
optie maakt het mogelijk voor clients om toegang te krijgen tot alle bestandssystemen die zijn gemount op een bestandssysteem gemarkeerd metcrossmnt
en clients hoeven niet elke kind-export apart te mounten. Merk op dat dit niet wenselijk kan zijn als een child gedeeld wordt met een verschillende reeks adressen. - In plaats van
crossmnt
, kan men ook denohide
optie gebruiken op child exports zodat ze automatisch aangekoppeld kunnen worden wanneer een client de root export aankoppelt. Verschillend vancrossmnt
, respecteertnohide
nog steeds adresbereiken van kind-exports. - Gebruik een sterretje (*) om toegang vanaf elke interface toe te staan.
Opgemerkt moet worden dat het wijzigen van /etc/exports
terwijl de server draait, een herexport vereist om de wijzigingen van kracht te laten worden:
# exportfs -arv
Om de huidige geladen exportstatus in meer detail te bekijken, gebruikt u:
# exportfs -v
Voor meer informatie over alle beschikbare opties, zie exports(5).
fsid=1
optie vereist.Start de server
Start en activeer nfs-server.service
.
rpc-gssd.service
) zal wachten tot de random number generator pool voldoende geïnitialiseerd is, waardoor het boot proces mogelijk vertraagd wordt. Dit komt vooral voor op headless servers. Het wordt sterk aangeraden om de entropie pool te vullen met een hulpprogramma zoals Rng-tools (als TPM wordt ondersteund) of Haveged in deze scenario’s.zfs-share.service
. Zonder dit zullen ZFS shares niet langer geëxporteerd worden na een reboot. Zie ZFS#NFS.NFS beperken tot interfaces/IPs
Standaard zal het starten van nfs-server.service
luisteren naar verbindingen op alle netwerk interfaces, ongeacht /etc/exports
. Dit kan veranderd worden door te definiëren op welke IP’s en/of hostnamen er geluisterd moet worden.
/etc/nfs.conf
host=192.168.1.123# Of gebruik de hostname.# host=myhostname
Herstart nfs-server.service
om de wijzigingen direct toe te passen.
Firewall configuratie
Om toegang via een firewall mogelijk te maken, moeten TCP en UDP poorten 111
2049
, en 20048
mogelijk worden geopend bij gebruik van de standaardconfiguratie; gebruik rpcinfo -p
om de exacte poorten te onderzoeken die op de server in gebruik zijn:
$ rpcinfo -p | grep nfs
100003 3 tcp 2049 nfs100003 4 tcp 2049 nfs100227 3 tcp 2049 nfs_acl
Wanneer u NFSv4 gebruikt, moet u ervoor zorgen dat TCP-poort 2049
open is. Er zouden geen andere poorten geopend moeten worden:
/etc/iptables/iptables.rules
-A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
Wanneer je een oudere NFS versie gebruikt, zorg er dan voor dat andere poorten open staan:
# 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
Om deze configuratie bij elke systeemstart te laten laden, bewerkt u /etc/iptables/iptables.rules
om de volgende regels op te nemen:
/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
De voorgaande commando’s kunnen worden opgeslagen door uit te voeren:
# iptables-save > /etc/iptables/iptables.rules
Als u NFSv3 gebruikt en de hierboven vermelde statische poorten voor rpc.statd
en lockd
moet u mogelijk ook de volgende poorten toevoegen aan de configuratie:
/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 tcp -m tcp --dport 32803j ACCEPT-A INPUT -p udp -m udp --dport 32765 -j ACCEPT-A INPUT -p udp -m udp --dport 32803 -j ACCEPT
Om de veranderingen toe te passen, Start iptables.service
opnieuw op.
Inschakelen van NFSv4 idmapping
Dit artikel of deze sectie behoeft uitbreiding.
- NFSv4 idmapping werkt niet met de standaard
sec=sys
mount-optie. - NFSv4 idmapping moet zowel op de client als op de server worden ingeschakeld.
- Een andere optie is om ervoor te zorgen dat de user en group IDs (UID en GID) overeenkomen op zowel de client als de server.
- Inschakelen/starten van
nfs-idmapd.service
zou niet nodig moeten zijn aangezien deze vervangen is door een nieuwe id mapper:
# dmesg | grep id_resolver
NFS: Registreren van het id_resolver sleuteltype Sleuteltype id_resolver geregistreerd
Het NFSv4 protocol geeft de UID en GID waarden van het lokale systeem op de draad weer als strings van de vorm user@domain
. Het proces van vertalen van UID naar string en string naar UID wordt ID mapping genoemd. Zie nfsidmap(8) voor details.
Ook al draait idmapd, het kan zijn dat het niet volledig is ingeschakeld. Als /sys/module/nfs/parameters/nfs4_disable_idmapping
of /sys/module/nfsd/parameters/nfs4_disable_idmapping
op een client/server Y
teruggeeft, schakelt u het in door:
nfs4
en nfsd
moeten (respectievelijk) geladen zijn om de volgende paden beschikbaar te maken.Op de client:
# echo "N" | tee /sys/module/nfs/parameters/nfs4_disable_idmapping
Op de server:
# echo "N" | tee /sys/module/nfsd/parameters/nfs4_disable_idmapping
Instellen als module-optie om deze wijziging permanent te maken, d. w. z.d.w.z.:
/etc/modprobe.d/nfsd.conf
options nfs nfs4_disable_idmapping=0options nfsd nfs4_disable_idmapping=0
Om idmapping volledig te gebruiken, moet u ervoor zorgen dat het domein is geconfigureerd in /etc/idmapd.conf
zowel op de server als op de client:
/etc/idmapd.conf
# Het volgende moet worden ingesteld op de lokale NFSv4-domeinnaam# De standaard is de DNS-domeinnaam van de host.Domain = domain.tld
Zie voor details.
Client
Gebruikers die NFS4 met Kerberos willen gebruiken, moeten nfs-client.target
starten en inschakelen.
Handmatig mounten
Voor NFSv3 gebruik je dit commando om de geëxporteerde bestandssystemen van de server te tonen:
$ showmount -e servername
Voor NFSv4 mount de root NFS directory en kijk rond voor beschikbare mounts:
# mount server:/ /mountpoint/on/client
Mount vervolgens met weglating van de NFS export root van de server:
# mount -t nfs -o vers=4 servername:/music /mountpoint/on/client
Als het mounten niet lukt, probeer dan de export root van de server mee te mounten (vereist voor Debian/RHEL/SLES, sommige distributies hebben -t nfs4
nodig in plaats van -t nfs
):
# mount -t nfs -o vers=4 servername:/srv/nfs/music /mountpoint/on/client
Mount met /etc/fstab
Het gebruik van fstab is handig voor een server die altijd aan staat, en de NFS shares zijn beschikbaar telkens als de client opstart. Bewerk het /etc/fstab
bestand, en voeg de juiste regel toe die de setup weergeeft. Nogmaals, de NFS export root van de server is weggelaten.
/etc/fstab
servername:/music /mountpoint/on/client nfs defaults,timeo=900,retrans=5,_netdev0 0
Een paar extra mount opties om te overwegen:
rsize en wsize Dersize
waarde is het aantal bytes dat wordt gebruikt bij het lezen van de server. Dewsize
waarde is het aantal bytes dat gebruikt wordt bij het schrijven naar de server. Als deze opties niet worden opgegeven, onderhandelen de client en de server standaard over de grootste waarden die ze beide kunnen ondersteunen (zie nfs(5) voor details). Na het veranderen van deze waarden is het aangeraden om de prestaties te testen (zie #Performance tuning). soft or hard Bepaalt het herstelgedrag van de NFS client nadat een NFS request time out is gegaan. Als geen van beide opties is opgegeven (of als dehard
optie is opgegeven), worden NFS verzoeken oneindig opnieuw geprobeerd. Als desoft
optie is gespecificeerd, dan faalt de NFS client een NFS verzoek nadat er retransmissies zijn verzonden, waardoor de NFS client een fout terugstuurt naar de aanroepende toepassing.
soft
timeout kan in bepaalde gevallen stille datacorruptie veroorzaken. Gebruik daarom de soft
optie alleen wanneer de reactiesnelheid van de client belangrijker is dan de integriteit van de gegevens. Het gebruik van NFS over TCP of het verhogen van de waarde van de retrans
optie kan sommige risico’s van het gebruik van de soft
optie verminderen.timeo Detimeo
waarde is de hoeveelheid tijd, in tienden van een seconde, om te wachten alvorens een transmissie opnieuw te versturen na een RPC timeout. De standaardwaarde voor NFS over TCP is 600 (60 seconden). Na de eerste timeout wordt de timeoutwaarde verdubbeld voor elke nieuwe poging voor een maximum van 60 seconden of tot een grote timeout optreedt. Als een verbinding wordt gemaakt met een trage server of over een druk netwerk, kan een betere stabiliteit worden bereikt door deze timeout-waarde te verhogen. retrans Het aantal keren dat de NFS-cliënt een verzoek opnieuw probeert voordat hij verdere herstelacties uitvoert. Als de optieretrans
niet is opgegeven, probeert de NFS-client elk verzoek drie keer. De NFS client genereert een “server not responding” bericht na het opnieuw proberen, en probeert dan verder te herstellen (afhankelijk van of de hard mount optie van kracht is). _netdev De_netdev
optie vertelt het systeem om te wachten tot het netwerk opgestart is alvorens te proberen het aandeel te mounten – systemd gaat hiervan uit voor NFS.
fs_passno
) op een waarde anders dan nul instelt, kan dit tot onverwacht gedrag leiden, bijvoorbeeld wanneer de systemd automount wacht op een controle die nooit zal plaatsvinden.Mount via /etc/fstab met systemd
Een andere methode is het gebruik van de optie x-systemd.automount optie die het bestandssysteem mount bij toegang:
/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
Om systemd bewust te maken van de wijzigingen in fstab, herlaad systemd en herstart remote-fs.target
.
- De
noauto
mount optie zal de NFS share pas mounten als deze wordt benaderd: gebruikauto
om deze direct beschikbaar te hebben.
Als u problemen ondervindt dat het mounten mislukt omdat het netwerk niet beschikbaar is, zet danNetworkManager-wait-online.service
aan. Het zal ervoor zorgen datnetwork.target
alle links beschikbaar heeft voordat het actief is. - De
users
mount optie zou gebruikers mounts toestaan, maar wees ervan bewust dat het verdere opties impliceert zoalsnoexec
bijvoorbeeld. - De
x-systemd.idle-timeout=1min
optie zal de NFS share automatisch unmounten na 1 minuut van niet-gebruik. Goed voor laptops die plotseling de verbinding met het netwerk kunnen verbreken. - Als afsluiten/opstarten te lang duurt vanwege NFS, schakel dan
NetworkManager-wait-online.service
in om ervoor te zorgen dat NetworkManager niet wordt afgesloten voordat de NFS volumes zijn ontkoppeld. - Voeg de
x-systemd.requires=network-online.target
mount optie niet toe, omdat dit kan leiden tot het bestellen van cycli binnen systemd . systemd voegt denetwork-online.target
afhankelijkheid automatisch toe aan de unit voor_netdev
mount. - Het gebruik van de
nocto
optie kan de prestaties voor read-only mounts verbeteren, maar moet alleen worden gebruikt als de gegevens op de server slechts af en toe veranderen.
Als systemd eenheid
Maak een nieuw .mount
bestand aan binnen /etc/systemd/system
, bijvoorbeeld mnt-myshare.mount
. Zie systemd.mount(5) voor details.
mnt-myshare.mount
kan alleen gebruikt worden als u de share gaat mounten onder /mnt/myshare
. Anders kan de volgende fout optreden: systemd: mnt-myshare.mount: Where= setting does not match unit name. Refusing.
.What=
pad naar share
Where=
pad om de share te mounten
Options=
opties voor het mounten van de share
- Netwerk mount-units verkrijgen automatisch
After
afhankelijkheden vanremote-fs-pre.target
network.target
ennetwork-online.target
, en krijgen eenBefore
afhankelijkheid vanremote-fs.target
tenzijnofail
mount optie is ingesteld. In het laatste geval wordt ook eenWants
unit toegevoegd. - Voeg
noauto
toe aanOptions
om automatisch mounten tijdens het opstarten te voorkomen (tenzij het door een andere unit wordt binnengehaald). - Als u een hostnaam wilt gebruiken voor de server die u wilt delen (in plaats van een IP-adres), voeg dan
nss-lookup.target
toe aanAfter
. Dit kan mount-fouten bij het opstarten voorkomen die niet optreden bij het testen.
/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
toe aan
, zodat de share (geforceerd) kan worden ontkoppeld.Om mnt-myshare.mount
te gebruiken, start u de unit en stelt u deze in staat om te draaien bij het opstarten van het systeem.
automount
Om een share automatisch te mounten, kan men de volgende automount unit gebruiken:
/etc/systemd/system/mnt-myshare.automount
Description=Automount myshareWhere=/mnt/myshareWantedBy=multi-user.target
Disable/stop the mnt-myshare.mount
unit, and enable/start mnt-myshare.automount
to automount the share when the mount path is being accessed.
TimeoutIdleSec
toe om auto unmount in te schakelen. Zie systemd.automount(5) voor details.Mount met autofs
Het gebruik van autofs is handig wanneer meerdere machines via NFS willen verbinden; ze kunnen zowel client als server zijn. De reden dat deze methode de voorkeur verdient boven de vorige is dat als de server wordt uitgeschakeld, de client geen fouten zal geven over het niet kunnen vinden van NFS shares. Zie autofs#NFS network mounts voor details.
Tips en trucs
Prestatie tuning
Bij gebruik van NFS op een netwerk met een aanzienlijk aantal clients kan men de standaard NFS threads verhogen van 8 naar 16 of zelfs een hoger, afhankelijk van de server/netwerk eisen:
/etc/nfs.conf
threads=16
Het kan nodig zijn om de rsize
en wsize
mount opties af te stellen om aan de eisen van de netwerk configuratie te voldoen.
In recente Linux kernels (>2.6.18) varieert de grootte van I/O operaties toegestaan door de NFS server (standaard max block size) afhankelijk van de RAM grootte, met een maximum van 1M (1048576 bytes), de max block size van de server zal worden gebruikt, zelfs als nfs clients grotere rsize
en wsize
vereisen. Zie https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/5.8_Technical_Notes/Known_Issues-kernel.htmlIt is het mogelijk om de standaard max blokgrootte toegestaan door de server te veranderen door te schrijven naar de /proc/fs/nfsd/max_block_size
alvorens nfsd te starten. Het volgende commando herstelt bijvoorbeeld de vorige standaard iosize van 32k:
# echo 32768 > /proc/fs/nfsd/max_block_size
Om de wijziging permanent te maken, maakt u een systemd-tmpfile:
/etc/tmpfiles.d/nfsd-block-size.conf
w /proc/fs/nfsd/max_block_size - - - 32768
Om te mounten met de verhoogde rsize
en wsize
mount opties:
# mount -t nfs -o rsize=32768,wsize=32768,vers=4 servername:/srv/nfs/music /mountpoint/on/client
Daarnaast kan, ondanks de schending van het NFS protocol, het instellen van async
in plaats van sync
of sync,no_wdelay
mogelijk een aanzienlijke prestatiewinst opleveren, vooral op draaiende schijven. Configureer exports met deze optie en voer dan exportfs -arv
uit om toe te passen.
/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 mount afhandeling
Deze truc is nuttig voor NFS-shares op een draadloos netwerk en/of op een netwerk dat onbetrouwbaar kan zijn. Als de NFS host onbereikbaar wordt, wordt het NFS-share ontkoppeld om hopelijk te voorkomen dat het systeem vastloopt als de hard
mount-optie wordt gebruikt.
Zorg ervoor dat de NFS mount punten correct zijn aangegeven in fstab:
/etc/fstab
lithium:/mnt/data /mnt/data nfs noauto 0 0lithium:/var/cache/pacman /var/cache/pacmannfs noauto 0 0
- Gebruik hostnamen in fstab om dit te laten werken, geen IP-adressen.
- Om NFS shares te mounten met niet-root gebruikers moet de
users
optie worden toegevoegd. - De
noauto
mount optie vertelt systemd om de shares niet automatisch te mounten bij het opstarten, anders kan dit het opstartproces vertragen.
Maak het auto_share
script dat gebruikt zal worden door cron of systemd/Timers om ICMP ping te gebruiken om te controleren of de NFS host bereikbaar is:
/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" ") # 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 ; dan server_notok}]=$SERVER # De server kon niet worden bereikt, unmount de share net_umount $MOUNT_POINT anders server_ok}]=$SERVER # De server is up, zorg ervoor dat de share zijn gemount net_mount $MOUNT_POINT fi fidone
# Check if the server is reachableping -c 1 "${SERVER}" &>/dev/null
met:
# Check if the server is reachabletimeout 1 bash -c ": < /dev/tcp/${SERVER}/2049"
in het auto_share
script hierboven.
Zorg ervoor dat het script uitvoerbaar is:
# chmod +x /usr/local/bin/auto_share
Volgende controle configureer het script om elke X uit te voeren, in de voorbeelden hieronder is dit elke minuut.
Cron
# crontab -e
* * * * /usr/local/bin/auto_share
systemd/Timers
/etc/systemd/system/auto_share.timer
Description=Automount NFS shares elke minuutOnCalendar=*-*-* *:*: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
Finitief, schakel in en start auto_share.timer
.
Een NetworkManager dispatcher gebruiken
NetworkManager kan ook worden geconfigureerd om een script uit te voeren bij verandering van netwerkstatus.
De eenvoudigste methode om shares te mounten bij verandering van netwerkstatus is om het auto_share
script te symlinken:
# ln -s /usr/local/bin/auto_share /etc/NetworkManager/dispatcher.d/30-nfs.sh
Hoewel, in dat specifieke geval zal het unmounten pas gebeuren nadat de netwerkverbinding al is uitgeschakeld, wat onzuiver is en kan resulteren in effecten zoals het bevriezen van KDE Plasma applets.
Het volgende script ontkoppelt veilig de NFS shares voordat de betreffende netwerk verbinding is uitgeschakeld door te luisteren naar de pre-down
en vpn-pre-down
events, maak het script uitvoerbaar:
/etc/NetworkManager/dispatcher.d/30-nfs.sh
#!/bin/bash# Vind de UUID van de verbinding met "nmcli con show" in terminal.# Alle NetworkManager verbindingstypes worden ondersteund: draadloos, VPN, bekabeld...WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9 "if ]; then # Script parameter $1: NetworkManager verbindingsnaam, niet gebruikt # 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
optie, verwijder deze mount optie of gebruik auto
om de dispatcher toe te staan deze mounts te beheren.Maak een symlink binnen /etc/NetworkManager/dispatcher.d/pre-down
om de pre-down
events op te vangen:
# ln -s /etc/NetworkManager/dispatcher.d/30-nfs.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-nfs.sh
Troubleshooting
Er is een speciaal artikel NFS/Troubleshooting.
Zie ook
- Zie ook Avahi, een Zeroconf implementatie die automatische ontdekking van NFS shares mogelijk maakt.
- HOWTO: Diskless network boot NFS root
- Microsoft Services for Unix NFS Client info
- NFS op Snow Leopard
- http://chschneider.eu/linux/server/nfs.shtml
- Hoe Linux NFS Performance Tuning and Optimization te doen
- Linux: NFS-prestaties afstellen
\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