14.2. Montando un Volumen NFS

El montaje de volúmenes NFS se parece mucho al de los sistemas de ficheros comunes. Invoque mount usando la siguiente sintaxis:[1]
      
    # mount -t nfs nfs_volume local_dir options   

nfs_volume se da como remote_host:remote_dir. Dado que esta notación es sólo para NFS, se puede omitir la opción –t nfs.

Hay varias opciones adicionales que se puede especificar para la orden mount al montar un volumen de NFS. Éstas pueden ser dadas siguiendo al modificador –o en la línea de órdenes o en el campo de opciones de entrada para el volumen en el fichero /etc/fstab. En ambos casos las múltiples opciones son separadas por comas y no pueden contener espacios en blanco. Las opciones especificadas en la línea de órdenes siempre tienen preferencia sobre las que estén contenidas en el fichero fstab.

Aquí hay un ejemplo de entrada del fichero /etc/fstab :
      
    # volumen              punto de montaje   tipo  opciones  
    news:/var/spool/news  /var/spool/news     nfs   timeo=14,intr  

Este volumen puede ser montado usando esta orden:
      
    # mount news:/var/spool/news  

En ausencia de una entrada en fstab, las llamadas a mount parecen muy feas. Por ejemplo, suponga que monta su directorio inicial de usuario desde una máquina llamada moonshot, la cual usa un tamaño de bloque de 4 K para las operaciones de lectura/escritura. tendría que incrementar el tamaño del bloque a 8 K para obtener un mejor rendimiento escribiendo la orden:
      
    # mount moonshot:/home /home -o rsize=8192,wsize=8192  

La lista de todas las opciones válidas se describe completamente en la página de ayuda nfs(5) del manual. La siguiente es una lista parcial de opciones que probalemente querría usar:

rsize=n y wsize=n

Especifican el tamaño de datagrama usado por los clientes de NFS en las peticiones de lectura y escritura respectivamente. El tamaño predeterminado depende de la versión del núcleo, pero normalmente es de 1.024 bytes.

timeo=n

Establece el tiempo (en décimas de segundo) que el cliente de NFS esperará por la respuesta a una petición. El valor predefinido es 7 (0.7 segundos). Lo que pase después depende de si usa la opción hard o soft.

hard

Explícitamente marca este volumen como montado físicamente. Es el valor predeterminado. Esta opción hace que el servidor muestr por la consola un mensaje cuando expoira el tiempo de operación y continúa indefinidamente.

soft

Monta lógicamente (como opuesto al montaje físico) el controlador. Esta opción causa un error de E/S a ser informado al proceso que intenta poner en funcionamiento un fichero cuando expira el tiempo de operación.

intr

Permite una señal para interrumpir una llamada a NFS. Es útil parar abortar cuando el el servidor no responde.

Salvo para rsize y wsize, todas estas opciones se aplican a la conducta del cliente en caso de que el servidor se vuelva temporalmente inaccesible. Funcionan juntos de la manera siguiente: Cuando el cliente envía una petición al servidor NFS, espera que la operación finalice tras un intervalo dado de tiempo (especificado en la opción timeout ). Si no se recibe confirmación dentro de este tiempo, ocurre una expiración menor[2], y la operación se reintenta con el tiempo de expiración duplicado. Después de un tiempo de expiración máximo de 60 segundos ocurre una expiración mayor[3].

Por omisión, una expiración mayor causa que el cliente envíe un mensaje a la consola y comience de nuevo, esta vez con un tiempo de expiración inicial doble que la cascada anterior. Potencialmente, esto podría continuar para siempre. Los volúmenes que obstinadamente reintentan el funcionamiento hasta que el servidor esté nuevamente disponible se llaman de montaje fuerte. La variedad opuesta, llamada de montaje débil, genera un error de E/S para el proceso que llama siempre que expire el tiempo de conexión. Debido a la post-escritura [4] introducida desde la caché del búfer, esta condición de error no se propaga hacia el proceso mismo antes de que éste llame a la función write la próxima vez, así que un programa nunca puede estar seguro de que una operación de escritura sobre un volumen montado débilmente se ha completado del todo.

El montar fuerte o débilmente un volumen depende parcialmente de su gusto, pero también del tipo de información al que quiere acceder desde un volumen. Por ejemplo, si monta sus programas X por NFS, ciertamente no querría que su sesión X enloquezca tan sólo porque alguien llevó la red al colapso lanzando siete copias de DOOM al mismo tiempo o desenchufando el conector Ethernet por un momento. Mediante el montaje físico del directorio que contiene estos programas, puede asegurarse que su computadora espera hasta que pueda restablecer el contacto con su servidor NFS. Por otro lado, los datos no-críticos como las particiones de las noticias montadas sobre NFS o ficheros de FTP también pueden ser montadas débilmente, así si la máquina remota está temporalmente inaccesible o apagada, no cuelga su sesión. Si su conexión de la red al servidor es dificultosa o pasa por un encaminador muy cargado, puede en cualquier caso aumentar el tiempo de expiración inicial usando la opción timeo o montar fuertemente los volúmenes. Los volúmenes NFS son montados fuertemente por omisión.

El montaje fuerte presenta un problema porque por omisión las operaciones con los ficheros no son interrumpibles. Así, si un proceso intenta, por ejemplo, una escritura en un servidor remoto y ese servidor es inalcanzable, la aplicación del usuario se cuelga y el usuario no puede hacer nada para abortar la operación. Si usa la opción intr junto con un montaje fuerte, cualquier señal recibida por el proceso interrumpe la llamada NFS para que así los usuarios puedan todavía abortar los accesos a los ficheros colgados y continuar el trabajo (aunque sin guardar el fichero).

Usualmente, el demonio rpc.mountd de una manera u otra rastrea qué directorios han sido montados por qué anfitrioness. Esta información puede mostrarse usando la orden showmount que también está incluida en el paquete del servidor NFS.
      
    # showmount -e moonshot  
    Lista de exportación para el anfitrión local:  
    /home <anon clnt>  
      
    # showmount -d moonshot  
    Directorios en el anfitrión local:  
    /home  
      
    # showmount -a moonshot  
    Todos los puntos de montaje para el anfitrión local:  
    localhost:/home  

Notas

[1]

No se dice sistema de ficheros porque no son propiamente sistemas de ficheros.

[2]

minor timeout

[3]

major timeout

[4]

write-behind