El Sistema de Ficheros de Red (NFS, por sus siglas en inglés) es probablemente el servicio de red más prominente que usa RPC. Permite acceder a ficheros en anfitriones remotos exactamente en la misma manera que se accedería si fueran locales. Una mezcla de soporte en el núcleo y demonios en espacio de usuario en el lado del cliente, junto con un servidor NFS en el lado del servidor, hace esto posible. Este acceso a los ficheros es completamente transparente al cliente y funciona con varias clases de servidores y arquitecturas anfitrionas.
NFS ofrece varias características útiles:
Los datos accedidos por todos los usuarios pueden mantenerse en un anfitrión central, con los clientes montando este directorio en tiempo de arranque. Por ejemplo, se puede mantener todas la cuentas de usuario en un anfitrión y hacer que todos los anfitriones de la red monten el directorio /home desde ese anfitrión. Si se instala NFS junto a NIS, los usuarios pueden entrar en cualquier sistema y trabajar en un conjunto de ficheros.
La información que consume grandes cantidades de disco puede mantenerse en un único anfitrión. Por ejemplo, todos los ficheros y programas relativos a LaTeX y METAFONT pueden almacenarse y mantenerse en un lugar...
Los datos administrativos pueden almacenarse en un único anfitrión. No hay necesidad de usar rcp para instalar el mismo fichero estúpido en 20 máquinas diferentes.
No es demasiado difícil preparar el funcionamiento básico de NFS en el cliente y el servidor; este capítulo le dice cómo.
Linux NFS es principalmente obra de Rick Sladkey, quien escribió el código del núcleo de NFS y gran parte del servidor de NFS.[1] Lo último se deriva del servidor NFS de espacio de usuario unfsd , originalmente escrito por Mark Shand, y el servidor NFS Harris hnfs, escrito por Donald Becker.
Echemos un vistazo a cómo funciona NFS. Primero, un cliente intenta montar un directorio de un anfitrión remoto en un directorio local justo de la misma manera que si fuese un dispositivo físico. Sin embargo, la sintaxis usada para especificar el directorio remoto es diferente. Por ejemplo, para montar /home desde el anfitrión vlager en /users en vale, el administrador escribe la siguiente orden en vale:[2]
# mount -t nfs vlager:/home /users |
mount tratará de conectar con el demonio remoto sobre rpc.mountd de vlager vía RPC. El servidor verificará si vale tiene permiso para montar el directorio en cuestión, en cuyo caso, devuelve un descriptor de fichero. Este descriptor será usado en todas las peticiones subsecuentes que se hagan sobre los ficheros bajo /users.
Cuando alguien accede a un fichero sobre NFS, el núcleo manda una llamada de RPC a rpc.nfsd (el demonio de NFS) en la máquina servidor. Esta llamada toma el descriptor de fichero, el nombre del fichero a acceder y los identificadores de usuario y grupo del usuario como parámetros. Éstos se usan en la determinación de los derechos de acceso al fichero especificado. Para prevenir que usuarios no autorizados lean o modifiquen ficheros, los identificadores de usuario y grupo deben ser iguales en ambos anfitriones...
En la mayoría de las implementaciones de Unix, la funcionalidad NFS de cliente y servidor se implementan como demonios a nivel de núcleo que arrancan desde el espacio de usuario al arrancar la máquina. Éstos son los Demonios NFS (rpc.nfsd ) en el anfitrión servidor, y Block I/O Daemon (biod ) en el anfitrión cliente. Para mejorar el rendimiento, biod realiza la E/S usando prelectura y postescritura asíncrona; también, varios demonios rpc.nfsd usualmente se ejecutan concurrentemente.
La implementación actual de NFS de Linux es un poco diferente del NFS clásico en la que el código de servidor se ejecuta enteramente en espacio de usuario, así que ejecutar múltiples copias simultáneamente es más complicado. La implementación actual derpc.nfsd ofrece una característica experimental que permite soporte limitado para múltiples servidores. Olaf Kirch desarrolló el soporte para servidor NFS basado en el núcleo ofrecido en la versión 2.2 del núcleo de Linux. Su desempeño es significativamente mejor que la de la implementación en el entorno de usuario existente. Lo describiremos más adelante en este capítulo.
[1] | Puede contactar a Rick en jrs@world.std.com. |
[2] | Actualmente, usted puede omitir el argumento –t nfs porque la orden mount interpreta por los dos puntos que esto especifica un volumen NFS. |