De Wikipedia:
El Sistema de Archivos de Red (NFS) es un protocolo de sistema de archivos distribuido desarrollado originalmente por Sun Microsystems en 1984, que permite a un usuario en un ordenador cliente acceder a los archivos a través de una red de forma similar a como se accede al almacenamiento local.
- NFS no está cifrado. Haga un túnel con NFS a través de un protocolo encriptado como Kerberos o una VPN (segura) cuando se trate de datos sensibles.
- A diferencia de Samba, NFS no tiene ninguna autenticación de usuario por defecto, el acceso del cliente está restringido por su dirección IP/nombre de host.
- NFS espera que los ID de usuario y/o grupo de usuarios sean los mismos tanto en el cliente como en el servidor. Habilita el idmapping NFSv4 o anula el UID/GID manualmente usando
anonuid
anongid
junto conall_squash
en/etc/exports
.
Instalación
Tanto el cliente como el servidor sólo requieren la instalación del paquete nfs-utils.
Se recomienda encarecidamente utilizar un demonio de sincronización horaria para mantener sincronizados los relojes del cliente/servidor. Sin relojes precisos en todos los nodos, NFS puede introducir retrasos no deseados.
Configuración
Servidor
Las opciones de configuración global se establecen en /etc/nfs.conf
. Los usuarios de configuraciones sencillas no deberían necesitar editar este archivo.
El servidor NFS necesita una lista de exportaciones (ver exports(5) para más detalles) que se definen en /etc/exports
o /etc/exports.d/*.exports
. Estos recursos compartidos son relativos a la llamada raíz NFS. Una buena práctica de seguridad es definir una raíz NFS en un árbol de directorios discreto que mantendrá a los usuarios limitados a ese punto de montaje. Los montajes Bind se utilizan para enlazar el punto de montaje del recurso compartido con el directorio real en otra parte del sistema de archivos.
Considere este ejemplo siguiente en el que:
- La raíz NFS es
/srv/nfs
. - La exportación es
/srv/nfs/music
a través de un montaje bind al objetivo real/mnt/music
. - La opción
crossmnt
hace posible que los clientes accedan a todos los sistemas de archivos montados en un sistema de archivos marcado concrossmnt
y los clientes no tendrán que montar cada exportación hija por separado. Tenga en cuenta que esto puede no ser deseable si un hijo se comparte con un rango diferente de direcciones. - En lugar de
crossmnt
, también se puede utilizar la opciónnohide
en las exportaciones hijo para que puedan ser montadas automáticamente cuando un cliente monta la exportación raíz. Al ser diferente decrossmnt
nohide
sigue respetando los rangos de direcciones de las exportaciones hijas. - Usa un asterisco (*) para permitir el acceso desde cualquier interfaz.
- El idmapping de NFSv4 no funciona con la opción de montaje por defecto
sec=sys
. - El idmapping de NFSv4 tiene que estar habilitado tanto en el cliente como en el servidor.
- Otra opción es asegurarse de que los ID de usuario y grupo (UID y GID) coinciden tanto en el cliente como en el servidor.
- Habilitar/iniciar
nfs-idmapd.service
no debería ser necesario ya que ha sido sustituido por un nuevo mapeador de id: - La opción de montaje
noauto
no montará el recurso compartido NFS hasta que se acceda a él: utiliceauto
para que esté disponible inmediatamente.
Si experimenta algún problema con el montaje que falla debido a que la red no está levantada/disponible, habiliteNetworkManager-wait-online.service
. Se asegurará de quenetwork.target
tenga todos los enlaces disponibles antes de estar activo. - La opción de montaje
users
permitiría montajes de usuario, pero ten en cuenta que implica más opciones comonoexec
por ejemplo. - La opción
x-systemd.idle-timeout=1min
desmontará el recurso compartido NFS automáticamente después de 1 minuto sin uso. Es bueno para los portátiles que podrían desconectarse de la red de repente. - Si el apagado/reinicio se demora demasiado debido a NFS, habilite
NetworkManager-wait-online.service
para asegurarse de que NetworkManager no salga antes de que se desmonten los volúmenes NFS. - No añada la opción de montaje
x-systemd.requires=network-online.target
, ya que puede provocar ciclos de pedido dentro de systemd . systemd añade la dependencianetwork-online.target
a la unidad para_netdev
montar automáticamente. - Usar la opción
nocto
puede mejorar el rendimiento de los montajes de sólo lectura, pero debe usarse sólo si los datos del servidor cambian sólo ocasionalmente. - Las unidades de montaje en red adquieren automáticamente
After
dependencias deremote-fs-pre.target
network.target
ynetwork-online.target
, y ganan unaBefore
dependencia deremote-fs.target
a menos que se establezca la opción de montajenofail
. Hacia esto último se añade también una unidadWants
. - Agregar
noauto
aOptions
impidiendo que se monte automáticamente durante el arranque (a menos que sea arrastrado por alguna otra unidad). - Si quieres usar un nombre de host para el servidor que quieres compartir (en lugar de una dirección IP), añade
nss-lookup.target
aAfter
. Esto podría evitar errores de montaje en el arranque que no surgen al probar la unidad. - Usa nombres de host en fstab para que esto funcione, no direcciones IP.
- Para montar recursos compartidos NFS con usuarios no root hay que añadir la opción
users
. - La opción de montaje
noauto
le dice a systemd que no monte automáticamente los recursos compartidos en el arranque, de lo contrario esto puede hacer que el proceso de arranque se detenga. - Ver también Avahi, una implementación de Zeroconf que permite el descubrimiento automático de recursos compartidos NFS.
- HOWTO: Raíz NFS de arranque en red sin disco
- Información sobre el cliente NFS de Microsoft Services for Unix
- NFS en Snow Leopard
- http://chschneider.eu/linux/server/nfs.shtml
- Cómo hacer el ajuste y la optimización del rendimiento de NFS en Linux
- Linux: Afinar el rendimiento de NFS
- 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
# mkdir -p /srv/nfs/music /mnt/music# mount --bind /mnt/music /srv/nfs/music
Para que el montaje bind sea persistente a través de los reinicios, añádalo a fstab:
/etc/fstab
/mnt/music /srv/nfs/music none bind 0 0
Agrega los directorios que se van a compartir y limitarlos a un rango de direcciones a través de un CIDR o nombre(s) de host de los equipos cliente que podrán montarlos en /etc/exports
, e.g.:
/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 this case nobody
Hay que tener en cuenta que modificar /etc/exports
mientras el servidor está en marcha requerirá una reexportación para que los cambios surtan efecto:
# exportfs -arv
Para ver con más detalle el estado actual de las exportaciones cargadas, utilice:
# exportfs -v
Para más información sobre todas las opciones disponibles, consulte exports(5).
fsid=1
es necesaria.Iniciar el servidor
Iniciar y habilitar nfs-server.service
.
rpc-gssd.service
) esperará hasta que el pool de generadores de números aleatorios esté suficientemente inicializado posiblemente retrasando el proceso de arranque. Esto es particularmente frecuente en los servidores headless. Se recomienda encarecidamente poblar el pool de entropía utilizando una utilidad como Rng-tools (si TPM es compatible) o Haveged en estos escenarios.zfs-share.service
. Sin esto, los recursos compartidos ZFS ya no se exportarán después de un reinicio. Ver ZFS#NFS.Restringir NFS a interfaces/IPs
Por defecto, al iniciar nfs-server.service
escuchará conexiones en todas las interfaces de red, independientemente de /etc/exports
. Esto puede cambiarse definiendo qué IPs y/o nombres de host escuchar.
/etc/nfs.conf
host=192.168.1.123# Alternativamente, utilice el nombre de host.# host=mi nombre de host
Reinicie nfs-server.service
para aplicar los cambios inmediatamente.
Configuración del cortafuegos
Para permitir el acceso a través de un cortafuegos, puede ser necesario abrir los puertos TCP y UDP 111
2049
, y 20048
cuando se utiliza la configuración por defecto; utilice rpcinfo -p
para examinar los puertos exactos en uso en el servidor:
$ rpcinfo -p | grep nfs
100003 3 tcp 2049 nfs100003 4 tcp 2049 nfs100227 3 tcp 2049 nfs_acl
Cuando utilice NFSv4, asegúrese de que el puerto TCP 2049
esté abierto. No debería ser necesario abrir ningún otro puerto:
/etc/iptables/iptables.rules
-A INPUT -p tcp -m tcp --dport 2049 -j ACCEPT
Cuando utilice una versión de NFS más antigua, asegúrese de que otros puertos están abiertos:
# 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
Para que esta configuración se cargue en cada inicio del sistema, edite /etc/iptables/iptables.rules
para incluir las siguientes líneas:
/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
Los comandos anteriores se pueden guardar ejecutando:
# iptables-save > /etc/iptables/iptables.rules
Si se utiliza NFSv3 y los puertos estáticos listados anteriormente para rpc.statd
y lockd
puede ser necesario añadir también los siguientes puertos a la configuración:
/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
Para aplicar los cambios, Reinicie iptables.service
.
Habilitando NFSv4 idmapping
Este artículo o sección necesita ser ampliado.
# dmesg | grep id_resolver
NFS: Registrando el tipo de clave id_resolver Tipo de clave id_resolver registrada
El protocolo NFSv4 representa los valores UID y GID del sistema local en el cable como cadenas de la forma user@domain
. El proceso de traducción de UID a cadena y de cadena a UID se denomina mapeo de ID. Consulte nfsidmap(8) para obtener más detalles.
Aunque idmapd se esté ejecutando, es posible que no esté totalmente habilitado. Si /sys/module/nfs/parameters/nfs4_disable_idmapping
o /sys/module/nfsd/parameters/nfs4_disable_idmapping
devuelve Y
en un cliente/servidor, habilítelo mediante:
nfs4
y nfsd
deben estar cargados (respectivamente) para que las siguientes rutas estén disponibles.En el cliente:
# echo "N" | tee /sys/module/nfs/parameters/nfs4_disable_idmapping
En el servidor:
# echo "N" | tee /sys/module/nfsd/parameters/nfs4_disable_idmapping
Configurar como opción del módulo para que este cambio sea permanente, es decir.e.:
/etc/modprobe.d/nfsd.conf
options nfs nfs4_disable_idmapping=0options nfsd nfs4_disable_idmapping=0
Para utilizar completamente el idmapping, asegúrese de que el dominio está configurado en /etc/idmapd.conf
tanto en el servidor como en el cliente:
/etc/idmapd.conf
# Se debe configurar el nombre de dominio NFSv4 local# El valor predeterminado es el nombre de dominio DNS del host.Dominio = dominio.tld
Ver para más detalles.
Cliente
Los usuarios que pretendan utilizar NFS4 con Kerberos necesitan iniciar y habilitar nfs-client.target
.
Montaje manual
Para NFSv3 utilice este comando para mostrar los sistemas de archivos exportados del servidor:
$ showmount -e servername
Para NFSv4 monta el directorio NFS raíz y busca los montajes disponibles:
# mount server:/ /mountpoint/on/client
Entonces monta omitiendo la raíz de exportación NFS del servidor:
# mount -t nfs -o vers=4 servername:/music /mountpoint/on/client
Si el montaje falla prueba a incluir la raíz de exportación del servidor (necesario para Debian/RHEL/SLES, algunas distribuciones necesitan -t nfs4
en lugar de -t nfs
):
# mount -t nfs -o vers=4 servername:/srv/nfs/music /mountpoint/on/client
Montar usando /etc/fstab
Usar fstab es útil para un servidor que está siempre encendido, y los recursos compartidos NFS están disponibles siempre que el cliente arranca. Edita el archivo /etc/fstab
, y añade una línea apropiada que refleje la configuración. De nuevo, se omite la raíz de exportación NFS del servidor.
/etc/fstab
servername:/music /mountpoint/on/client nfs defaults,timeo=900,retrans=5,_netdev0 0
Algunas opciones de montaje adicionales a tener en cuenta:
rsize
El valor rsize
es el número de bytes utilizados cuando se lee del servidor. El valor wsize
es el número de bytes utilizados cuando se escribe en el servidor. Por defecto, si no se especifican estas opciones, el cliente y el servidor negocian los valores más grandes que ambos pueden soportar (ver nfs(5) para más detalles). Después de cambiar estos valores, se recomienda probar el rendimiento (ver #Ajuste del rendimiento). soft o hard Determina el comportamiento de recuperación del cliente NFS después de que una solicitud NFS se agote. Si no se especifica ninguna de las dos opciones (o si se especifica la opción hard
), las solicitudes NFS se reintentan indefinidamente. Si se especifica la opción soft
, el cliente NFS falla una solicitud NFS después de que se hayan enviado retransmisiones, haciendo que el cliente NFS devuelva un error a la aplicación que llama.
soft
de tiempo de espera puede causar la corrupción silenciosa de datos en ciertos casos. Por ello, utilice la opción soft
sólo cuando la capacidad de respuesta del cliente sea más importante que la integridad de los datos. Usar NFS sobre TCP o aumentar el valor de la opción retrans
puede mitigar algunos de los riesgos de usar la opción soft
. timeo El valor timeo
es la cantidad de tiempo, en décimas de segundo, que se debe esperar antes de reenviar una transmisión después de un tiempo de espera de RPC. El valor por defecto para NFS sobre TCP es 600 (60 segundos). Después del primer tiempo de espera, el valor del tiempo de espera se duplica para cada reintento durante un máximo de 60 segundos o hasta que se produzca un tiempo de espera mayor. Si se conecta a un servidor lento o a través de una red ocupada, se puede lograr una mejor estabilidad aumentando este valor de tiempo de espera. retrans El número de veces que el cliente NFS reintenta una solicitud antes de intentar una acción de recuperación adicional. Si no se especifica la opción retrans
, el cliente NFS intenta cada solicitud tres veces. El cliente NFS genera un mensaje «el servidor no responde» después de los reintentos, y luego intenta una recuperación adicional (dependiendo de si la opción de montaje duro está en efecto). _netdev La opción _netdev
le dice al sistema que espere hasta que la red esté lista antes de intentar montar el recurso compartido – systemd asume esto para NFS.
fs_passno
) a un valor distinto de cero puede llevar a un comportamiento inesperado, por ejemplo, cuelgues cuando el automount de systemd espera una comprobación que nunca ocurrirá.Montar usando /etc/fstab con systemd
Otro método es usar la opción x-systemd.automount que monta el sistema de archivos al acceder:
/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
Para que systemd conozca los cambios en fstab, recargue systemd y reinicie remote-fs.target
.
Como unidad systemd
Crea un nuevo archivo .mount
dentro de /etc/systemd/system
, por ejemplo mnt-myshare.mount
. Consulte systemd.mount(5) para obtener más detalles.
mnt-myshare.mount
sólo puede utilizarse si va a montar el recurso compartido bajo /mnt/myshare
. De lo contrario, podría producirse el siguiente error: systemd: mnt-myshare.mount: Where= setting does not match unit name. Refusing.
.What=
ruta de acceso al recurso compartido
Where=
ruta para montar el recurso compartido
Options=
opciones de montaje del recurso compartido
/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
a
, permitiendo desmontar (a la fuerza) el recurso compartido.Para utilizar mnt-myshare.mount
, inicie la unidad y habilítela para que se ejecute en el arranque del sistema.
automount
Para montar automáticamente un recurso compartido, se puede utilizar la siguiente unidad automount:
/etc/systemd/system/mnt-myshare.automount
Description=Automount myshareWhere=/mnt/myshareWantedBy=multi-user.target
Desactivar/detener la unidad mnt-myshare.mount
, y activar/iniciar mnt-myshare.automount
para montar automáticamente el recurso compartido cuando se accede a la ruta de montaje.
TimeoutIdleSec
para habilitar el desmontaje automático. Ver systemd.automount(5) para más detalles.Montar usando autofs
Usar autofs es útil cuando varias máquinas quieren conectarse a través de NFS; podrían ser tanto clientes como servidores. La razón por la que este método es preferible sobre el anterior es que si el servidor está apagado, el cliente no arrojará errores sobre la imposibilidad de encontrar recursos compartidos NFS. Ver autofs#NFS network mounts para más detalles.
Consejos y trucos
Ajuste del rendimiento
Cuando se utiliza NFS en una red con un número significativo de clientes se puede aumentar los hilos NFS por defecto de 8 a 16 o incluso uno mayor, dependiendo de los requisitos del servidor/red:
/etc/nfs.conf
threads=16
Puede ser necesario ajustar las opciones de montaje rsize
y wsize
para cumplir con los requisitos de la configuración de red.
En los kernels linux más recientes (>2.6.18) el tamaño de las operaciones de E/S permitidas por el servidor NFS (tamaño máximo de bloque por defecto) varía en función del tamaño de la RAM, con un máximo de 1M (1048576 bytes), se utilizará el tamaño máximo de bloque del servidor aunque los clientes nfs requieran mayores rsize
y wsize
. Ver https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/5.8_Technical_Notes/Known_Issues-kernel.htmlIt es posible cambiar el tamaño máximo de bloque por defecto permitido por el servidor escribiendo en el /proc/fs/nfsd/max_block_size
antes de iniciar nfsd. Por ejemplo, el siguiente comando restaura el iosize por defecto anterior de 32k:
# echo 32768 > /proc/fs/nfsd/max_block_size
Para hacer el cambio permanente, cree un archivo systemd-tmpfile:
/etc/tmpfiles.d/nfsd-block-size.conf
w /proc/fs/nfsd/max_block_size - - - 32768
Para montar con las opciones de montaje aumentadas rsize
y wsize
:
# mount -t nfs -o rsize=32768,wsize=32768,vers=4 servername:/srv/nfs/music /mountpoint/on/client
Además, a pesar de la violación del protocolo NFS, establecer async
en lugar de sync
o sync,no_wdelay
puede conseguir potencialmente una importante ganancia de rendimiento especialmente en discos giratorios. Configure las exportaciones con esta opción y luego ejecute exportfs -arv
para aplicarlas.
/etc/exports
/srv/nfs 192.168.1.0/24(rw,async,crossmnt,fsid=0)/srv/nfs/music 192.168.1.0/24(rw,async)
Manejo automático del montaje
Este truco es útil para los NFS compartidos en una red inalámbrica y/o en una red que puede ser poco fiable. Si el host NFS se vuelve inalcanzable, el recurso compartido NFS se desmontará para evitar que el sistema se cuelgue cuando se utilice la opción de montaje hard
.
Asegúrate de que los puntos de montaje NFS están correctamente indicados en fstab:
/etc/fstab
litio:/mnt/data /mnt/data nfs noauto 0 0lithium:/var/cache/pacman /var/cache/pacmannfs noauto 0 0
auto_share
script que será utilizado por cron o systemd/Timers para utilizar el ping ICMP para comprobar si el host NFS es alcanzable:¡
/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" ") # Comprueba si el servidor ya está probado if }" =~ "${SERVER}" ]]; entonces # El servidor está en marcha, asegúrese de que el recurso compartido está montado net_mount $MOUNT_POINT elif }" =~ "${SERVER}" ]]; entonces # No se ha podido acceder al servidor, desmonte el recurso compartido net_umount $MOUNT_POINT else # Compruebe si se puede acceder al servidor ping -c 1 "${SERVER}" &>/dev/null if ; then servidor_nook}]=$SERVIDOR # El servidor no pudo ser alcanzado, desmonte el recurso compartido net_umount $MUNT_POINT else servidor_ok}]=$SERVIDOR # El servidor está arriba, asegúrese de que el recurso compartido está montado net_mount $MOUNT_POINT fi fidone
# Check if the server is reachableping -c 1 "${SERVER}" &>/dev/null
con:
# Check if the server is reachabletimeout 1 bash -c ": < /dev/tcp/${SERVER}/2049"
en el auto_share
script anterior.
Asegúrate de que el script es ejecutable:
# chmod +x /usr/local/bin/auto_share
Siguiente comprobación configura el script para que se ejecute cada X, en los ejemplos de abajo es cada minuto.
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
Finalmente, habilita e inicia auto_share.timer
.
Usando un despachador de NetworkManager
NetworkManager también puede ser configurado para ejecutar un script al cambiar el estado de la red.
El método más sencillo para montar recursos compartidos al cambiar el estado de la red es hacer un enlace simbólico al auto_share
script:
# ln -s /usr/local/bin/auto_share /etc/NetworkManager/dispatcher.d/30-nfs.sh
Sin embargo, en ese caso particular, el desmontaje ocurrirá sólo después de que la conexión de red haya sido deshabilitada, lo cual es poco limpio y puede resultar en efectos como la congelación de los applets de KDE Plasma.
El siguiente script desmonta de forma segura los recursos compartidos NFS antes de que se desactive la conexión de red correspondiente, escuchando los eventos pre-down
y vpn-pre-down
, hace que el script sea ejecutable:
/etc/NetworkManager/dispatcher.d/30-nfs.sh
#!/bin/bash# Encuentra el UUID de la conexión con "nmcli con show" en el terminal.# Todos los tipos de conexión de NetworkManager son compatibles: inalámbrica, VPN, cableada...WANTED_CON_UUID="CHANGE-ME-NOW-9c7eff15-010a-4b1c-a786-9b4efa218ba9 "if ]; then # Parámetro de script $1: nombre de la conexión NetworkManager, no utilizado # Parámetro de script $2: evento enviado 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
, elimine esta opción de montaje o utilice auto
para permitir que el despachador gestione estos montajes.Crea un symlink dentro de /etc/NetworkManager/dispatcher.d/pre-down
para capturar los eventos de pre-down
:
# ln -s /etc/NetworkManager/dispatcher.d/30-nfs.sh /etc/NetworkManager/dispatcher.d/pre-down.d/30-nfs.sh
Solución de problemas
Hay un artículo dedicado NFS/Solución de problemas.
Ver también
\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.