NFS

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.

Opmerking:

  • 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 anonuidanongid samen met all_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:

  1. De NFS root is /srv/nfs.
  2. 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
Opmerking: ZFS bestandssystemen vereisen een speciale behandeling van bindmounts, zie ZFS#Bind mount.

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

Tip:

  • De crossmnt optie maakt het mogelijk voor clients om toegang te krijgen tot alle bestandssystemen die zijn gemount op een bestandssysteem gemarkeerd met crossmnt 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 de nohide optie gebruiken op child exports zodat ze automatisch aangekoppeld kunnen worden wanneer een client de root export aankoppelt. Verschillend van crossmnt, respecteert nohide 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).

Tip: ip2cidr is een hulpmiddel om een IP bereik om te zetten naar een correct gestructureerde CIDR specificatie.
Opmerking: Als de doel-export een tmpfs bestandssysteem is, is de fsid=1 optie vereist.

Start de server

Start en activeer nfs-server.service.

Waarschuwing: Een harde afhankelijkheid van het serveren van NFS (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.
Opmerking: Als ZFS shares worden geëxporteerd, start/activeer dan ook 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 1112049, 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
Waarschuwing: Dit commando zal de huidige iptables start configuratie overschrijven met de huidige iptables configuratie!

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

Tango-view-fullscreen.pngDit artikel of deze sectie behoeft uitbreiding.Tango-view-fullscreen.png

Reden: Ontbrekende lookup-informatie, statische bindingsvoorbeelden, enz. (Bespreek in Talk:NFS#)

Opmerking:

  • 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:

Opmerking: De kernel modules 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
Opmerking: Servernaam moet een geldige hostnaam zijn (niet alleen IP adres). Anders zal het mounten van de remote share hangen.

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

Opmerking: Raadpleeg nfs(5) en mount(8) voor meer mount opties.

Een paar extra mount opties om te overwegen:

rsize en wsize Dersizewaarde is het aantal bytes dat wordt gebruikt bij het lezen van de server. Dewsizewaarde 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 dehardoptie is opgegeven), worden NFS verzoeken oneindig opnieuw geprobeerd. Als desoftoptie 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.

Waarschuwing: Een zogenaamde 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 Detimeowaarde 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 optieretransniet 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_netdevoptie vertelt het systeem om te wachten tot het netwerk opgestart is alvorens te proberen het aandeel te mounten – systemd gaat hiervan uit voor NFS.

Opmerking: Als u het zesde veld (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 .

Tip:

  • De noauto mount optie zal de NFS share pas mounten als deze wordt benaderd: gebruik auto om deze direct beschikbaar te hebben.
    Als u problemen ondervindt dat het mounten mislukt omdat het netwerk niet beschikbaar is, zet dan NetworkManager-wait-online.service aan. Het zal ervoor zorgen dat network.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 zoals noexec 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 de network-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.

Opmerking: Zorg ervoor dat de bestandsnaam overeenstemt met het mount-punt dat u wilt gebruiken.Bv. de unit naam 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

Opmerking:

  • Netwerk mount-units verkrijgen automatisch After afhankelijkheden van remote-fs-pre.targetnetwork.target en network-online.target, en krijgen een Before afhankelijkheid van remote-fs.target tenzij nofail mount optie is ingesteld. In het laatste geval wordt ook een Wants unit toegevoegd.
  • Voeg noauto toe aan Options 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 aan After. 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
Tip: In het geval van een onbereikbaar systeem, voeg 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.

Tip: Voeg 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
Opmerking:

  • 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
Opmerking: Test met een TCP probe in plaats van ICMP ping (standaard is tcp poort 2049 in NFS4) vervang dan de regel:

# 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
Opmerking: Dit script negeert mounts met de 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

Note: Test using a TCP probe instead of ICMP ping (default is tcp port 2049 in NFS4) then replace the line:

# 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
Note: This script ignores mounts with the 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

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *