Desarrollado en 1984 por Sun Microsystems para SunOS. Más tarde donadoal public domain [?].
Permite montar un sistema de ficheros remoto dentro del sistema de ficheroslocal.†Las aplicaciones no ven la diferencia.
El sistema de ficheros es “exportado” por el host remoto.
El sistema de ficheros es “montado” por el host local.
Muchos hosts remotos pueden montar el mismo sistema de ficheros ycompartir así datos de forma sencilla.
Las aplicaciones locales acceden al sistema de ficheros remoto como si fueralocal. En otras palabras, el NFS es completamente transparente al usuario.
Arquitectura cliente/servidor. El servidor se monta en el host que exporta elsistema de ficheros y el cliente, en los hosts que lo montan.
El servidor asegura la integridad de los datos en el sistema de ficherosexportado.
El NFS utiliza un protocolo a nivel de la capa de aplicación y se monta encimadel sistema RPC, otro paquete de la capa de aplicación [24]. Dicho protocoloes el NFSP (NFS Protocol). Actualmente cohexisten tres versiones: la 2 [27],la 3 [28]y la 4 [30].
Los datos son transmitidos a través de la red usando el sistema derepresentación XDR (eXternal Data Representation) [29]. Esto permite queque host de diferente clase (con distintos SO’s, endian’s y/o longitudes depalabra) puedan intercambiar datos.
Es un protocolo sin estado lo que significa que ante un fallo del sistema (porejemplo, que el servidor NFS se cuelgue), es el cliente el que sabe cómorecuperarse de los erroes (por ejemplo, re-ejecutando la orden de escribir unfichero que no pudo ser escrito por el cuelgue del servidor).
El protocolo se describe mediante un conjunto de procedimientos que se ejecutansobre el sistema RPC. A continuación se muestran algunos de los másusados:
null() returns(): Hace un ping al server. Sirve para medir latenciasen la red.
lookup(dir_fh, name) return (fh, attr): Busca el fichero nameen el directorio dir_fh y si lo encuentra, devuelve el descriptor de esefichero fh más la información attr sobre los atributos del fichero.
create(dir_fh, name, attr) return(new_fh, new_attr):] Creaen e directorio dir_fh el fichero name con atributos attr. Si la creacióntiene éxito, devuelve un nuevo descriptor de fichero new_fh que tienelos atributos new_attr.
remove(dir_fh, name) returns(status): Borra el fichero name enel directorio dir_fh y devuelve verdadero si la operación ha tenido éxito.
getattr(fh) returns(attr): Devuelve los atributos del fichero.
setattr(fh, attr) returns(new_attr): Establece los atributos delfichero.
read(fh, offset, count) returns(attr, data): Escribe en elpuntero data los count bytes a partir del byte de índice offset delfichero fh. Se devuelve además los atributos del fichero.
write(fh, offset, count, data) returns(attr): Semejante alanterior método, excepto que escribimos en el fichero remoto.
rename(dir_fh, name, to_fh, to_name)returns(status): Renombra el fichero name en el directorio dir_fh alfichero to_name en el directorio to_fh. Se devuelve información sobreel éxito de la operación.
link(dir_fh, name, to_fh, to_name) returns(status): Crea elfichero to_name en el directorio to_fh, que es un enlace al fichero nameen el directorio dir_fh.‡
symlink(dir_fh, name, string) returns(status): Crea un enlacesimbólico llamado name en el directorio dir_fh con el valor string.§
readlink(fh) return(string): Devuelve el nombre del enlacesimbólico.
mkdir(dir_fh, name, attr) returns(fh, new_attr): Crea unnuevo directorio llamado name dentro del directorio dir_fh, retorna eldescriptor de ese directorio fh y los atributos new_attr con los quefinalmente ha sido creado.
mkdir(dir_fh, name) returns(status): Elimina un directoriovacío llamado name que está dentro del directorio dir_fh y devuelve elresultado de dicha operación.
readdir(dir_fh, cookie, count) return(entries): En entriesretorna hasta count bytes de las entradas en el directorio dir_fh. Cadaentrada contiene un nombre de fichero, un identitificador y un punterocookie a la siguiente entrada dentro del directorio. Este fichero permiteen sucesivas llamadas ir recorriendo todas las entradas del directorio. Sicookie == NULL se devuelve la primera entrada.
statfs(fh) return(fs_stats): Devuelve información sobre elsistema de ficheros remoto como el tamaño de bloque, el número debloques libres, etc.