Compartiendo archivos: NFS

NFS (Network File System) permite el acceso transparente a archivos y directorios ubicados en computadoras remotas, es decir, permite que usuarios y programas traten archivos remotos como si fueran locales.

La computadora remota (llamada server NFS) pone ciertos directorios de su propio sistema de archivos a disposición de otras computadoras exportándolos hacia la red. Para acceder a los archivos remotos, las computadoras que los utilizan (los clientes NFS) previamente deben montar alguno de los directorios exportados por el servidor en algún punto de su sistema de archivos (de la misma forma que los sistemas de archivos residentes en discos duros locales deben ser montados antes de poder ser utilizados).

A modo de ejemplo, en el gráfico anterior se muestra que Andrómeda, actuando como servidor NFS, exporta a la red el directorio /net, y que un cliente NFS, en éste caso Altair, lo monta en /usr/local. Esto significa que para los usuarios de Altair existen los directorios /usr/local/bin, /usr/local/etc y /usr/local/apps, pero en realidad dichos directorios están ubicados en Andrómeda.

NFS fue desarrollado originariamente por Sun Microsystems, y se transformó en el standard para compartir archivos bajo plataforma Unix; también existen actualmente implementaciones de NFS para otros sistemas operativos.

Los demonios de NFS

Para ofrecer servicios NFS, una computadora debe ejecutar los siguientes demonios:

Algunas implementaciones de NFS requieren demonios auxiliares adicionales como los siguientes:

Exportando directorios

Para exportar directorios desde un server NFS, el administrador debe listarlos en el archivo /etc/exports, teniendo en cuenta las siguientes consideraciones:

 

El archivo /etc/exports contendrá una línea por cada directorio exportado, en la que se indicará la ruta completa al mismo, seguida por ciertos parámetros que configurarán el modo en que se exporta el directorio, los cuales permiten especificar cuales computadoras tienen derecho a montar remotamente el directorio exportado, y de que manera:

En el ejemplo anterior, el server NFS exporta tres directorios:

Montando directorios

Los directorios remotos se montan localmente de la misma manera que otro sistema de archivos: manualmente por medio del comando mount, o listándolos en /etc/fstab para que se monten automáticamente al inicializar el sistema operativo.

En ambos casos, la sintaxis para especificar un directorio remoto es la siguiente:

nombre_del_host:directorio_remoto

Por ejemplo, para montar manualmente el directorio /net de Andrómeda en /usr/local de Altair, se debe ejecutar el siguiente comando:

# mount andromeda:/net /usr/local

Alternativamente, se podría agregar la siguiente línea en /etc/fstab:

andromeda:/net /usr/local nfs rw,bg 0 0

Obsérvese que al montar un directorio remoto pude indicarse la opción bg a fin de realizar la operación de montura en background.

Si al momento de solicitar la montura el server NFS no se encuentra disponible, el cliente permanecerá reintentando hasta que el server lo esté. La opción bg premite que esos reintentos continúen en background y así no detener las demás operaciones del cliente que no dependen del acceso a ese recurso compartido. Cuanto tiempo el cliente permanecerá reintentando depende de si la montura es dura (hard mounts) o blanda (soft mounts).

Por defecto, las monturas de directorios NFS son duras, lo cual significa que el cliente permanecerá reintentando indefinidamente hasta recibir respuesta del server. Si la montura es blanda (en cuyo caso deberá utilizarse la opción soft en /etc/fstab o al montar manualmente con mount), al cabo de cierto número de reintentos la operación fallará y retornará un mensaje de error al usuario, indicando que el server es inaccesible.