NFS (Español)

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.

Nota:

  • 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 anonuidanongid junto con all_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:

  1. La raíz NFS es /srv/nfs.
  2. La exportación es /srv/nfs/music a través de un montaje bind al objetivo real /mnt/music.
    1. # mkdir -p /srv/nfs/music /mnt/music# mount --bind /mnt/music /srv/nfs/music
      Nota: Los sistemas de archivos ZFS requieren un manejo especial de los bindmounts, ver ZFS#Bind mount.

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

      • La opción crossmnt hace posible que los clientes accedan a todos los sistemas de archivos montados en un sistema de archivos marcado con crossmnt 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ón nohide en las exportaciones hijo para que puedan ser montadas automáticamente cuando un cliente monta la exportación raíz. Al ser diferente de crossmntnohide sigue respetando los rangos de direcciones de las exportaciones hijas.
      • Usa un asterisco (*) para permitir el acceso desde cualquier interfaz.

      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).

      Sugerencia: ip2cidr es una herramienta para convertir un rango de IPs a una especificación CIDR correctamente estructurada.
      Nota: Si la exportación de destino es un sistema de archivos tmpfs, la opción fsid=1 es necesaria.

      Iniciar el servidor

      Iniciar y habilitar nfs-server.service.

      Advertencia: Una dependencia dura de servir NFS (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.
      Nota: Si exporta recursos compartidos ZFS, también inicie/habilite 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 1112049, 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
      Advertencia: ¡Este comando anulará la configuración actual de inicio de iptables con la configuración actual de iptables!

      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

      Tango-view-fullscreen.pngEste artículo o sección necesita ser ampliado.Tango-view-fullscreen.png

      Razón: Falta información de búsqueda, ejemplos de vinculación estática, etc. (Discutir en Talk:NFS#)
      Nota:

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

      Nota: Los módulos del kernel 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
      Nota: El nombre del servidor debe ser un nombre de host válido (no sólo la dirección IP). De lo contrario, el montaje del recurso compartido remoto se colgará.

      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
      Nota: Consulta nfs(5) y mount(8) para más opciones de montaje.

      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.

      Advertencia: Un llamado 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.

      Nota: Establecer el sexto campo (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 .

      Consejo:

      • La opción de montaje noauto no montará el recurso compartido NFS hasta que se acceda a él: utilice auto para que esté disponible inmediatamente.
        Si experimenta algún problema con el montaje que falla debido a que la red no está levantada/disponible, habilite NetworkManager-wait-online.service. Se asegurará de que network.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 como noexec 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 dependencia network-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.

      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.

      Nota: Asegúrese de que el nombre del archivo se corresponde con el punto de montaje que desea utilizar.Por ejemplo, el nombre de la unidad 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

      Nota:

      • Las unidades de montaje en red adquieren automáticamente After dependencias de remote-fs-pre.targetnetwork.target y network-online.target, y ganan una Before dependencia de remote-fs.target a menos que se establezca la opción de montaje nofail. Hacia esto último se añade también una unidad Wants.
      • Agregar noauto a Options 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 a After. Esto podría evitar errores de montaje en el arranque que no surgen al probar la unidad.
      /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
      Consejo: En caso de un sistema inalcanzable, anexa 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.

      Consejo: Añade 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
      Nota:

      • 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.
      Crea el 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
      Nota: Pruebe usando una sonda TCP en lugar de un ping ICMP (por defecto es el puerto tcp 2049 en NFS4) y luego reemplace la línea:

      # 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
      Nota: Este script ignora los montajes con la opción 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

      • 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

      \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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *