Network File System (NFS) is a distributed file system protocol originally developed by Sun Microsystems (Sun) in 1984,[1] allowing a user on a client computer to access files over a computer network much like local storage is accessed. NFS, like many other protocols, builds on the Open Network Computing Remote Procedure Call (ONC RPC) system. NFS is an open IETF standard. After the first experimental version developed in house at Sun Microsystems, all subsequent versions of the protocol are defined in a series of Request for Comments i.e. RFCs, allowing anyone to implement the protocol.
Versions and variations
Sun used version 1 only for in-house experimental purposes. When the development team added substantial changes to NFS version 1 and released it outside of Sun, they decided to release the new version as v2, so that version interoperation and RPC version fallback could be tested.[2][3]
NFSv2
Version 2 of the protocol (defined in RFC 1094, March 1989) originally operated only over User Datagram Protocol (UDP). Its designers meant to keep the server side stateless, with locking (for example) implemented outside of the core protocol. People involved in the creation of NFS version 2 include Russel Sandberg, Bob Lyon, Bill Joy, Steve Kleiman, and others.[1][4]
The Virtual File System interface allows a modular implementation, reflected in a simple protocol. By February 1986, implementations were demonstrated for operating systems such as System V release 2, DOS, and VAX/VMS using Eunice.[4] NFSv2 only allows the first 2 GB of a file to be read due to 32-bit limitations.
NFSv3
Version 3 (RFC 1813, June 1995) added:
- support for 64-bit file sizes and offsets, to handle files larger than 2 gigabytes (GB);
- support for asynchronous writes on the server, to improve write performance;
- additional file attributes in many replies, to avoid the need to re-fetch them;
- a READDIRPLUS operation, to get file handles[5] and attributes along with file names when scanning a directory;
- otras mejoras diversas.
La primera propuesta de NFS Versión 3 dentro de Sun Microsystems se creó poco después del lanzamiento de NFS Versión 2. La motivación principal fue un intento de mitigar el problema de rendimiento de la operación de escritura síncrona en NFS Versión 2. [ 6 ] Para julio de 1992, la práctica de implementación había resuelto muchas deficiencias de NFS Versión 2, dejando solo la falta de soporte para archivos grandes (tamaños de archivo y desplazamientos de 64 bits) como un problema apremiante. En el momento de la introducción de la Versión 3, el soporte de los proveedores para TCP como protocolo de capa de transporte comenzó a aumentar. Si bien varios proveedores ya habían agregado soporte para NFS Versión 2 con TCP como transporte, Sun Microsystems agregó soporte para TCP como transporte para NFS al mismo tiempo que agregó soporte para la Versión 3. El uso de TCP como transporte hizo que usar NFS sobre una WAN fuera más factible y permitió el uso de tamaños de transferencia de lectura y escritura mayores que el límite de 8 KB impuesto por el Protocolo de Datagramas de Usuario .
YANFS/WebNFS
YANFS (Yet Another NFS), anteriormente WebNFS, es una extensión de NFSv2 y NFSv3 que permite su funcionamiento detrás de cortafuegos restrictivos sin la complejidad de los protocolos Portmap y MOUNT. YANFS/WebNFS tiene un número de puerto TCP/UDP fijo (2049) y, en lugar de requerir que el cliente contacte con el servicio RPC MOUNT para determinar el identificador de archivo inicial de cada sistema de archivos, introdujo el concepto de identificador de archivo público (nulo para NFSv2, longitud cero para NFSv3) que puede utilizarse como punto de partida. Ambos cambios se incorporaron posteriormente a NFSv4. El desarrollo de YANFS posterior a WebNFS también ha incluido la integración del lado del servidor.
NFSv4
La versión 4 ( RFC 3010 , diciembre de 2000; revisada en RFC 3530 , abril de 2003 y nuevamente en RFC 7530 , marzo de 2015), influenciada por Andrew File System (AFS) y Server Message Block (SMB), incluye mejoras de rendimiento, exige una seguridad sólida e introduce un protocolo con estado . [ 7 ] [ 8 ] La versión 4 se convirtió en la primera versión desarrollada con el Grupo de Trabajo de Ingeniería de Internet (IETF) después de que Sun Microsystems transfiriera el desarrollo de los protocolos NFS.
NFS version 4.1 (RFC 5661, January 2010; revised in RFC 8881, August 2020) aims to provide protocol support to take advantage of clustered server deployments including the ability to provide scalable parallel access to files distributed among multiple servers (pNFS extension). Version 4.1 includes Session trunking mechanism (Also known as NFS Multipathing) and is available in some enterprise solutions as VMware ESXi.
NFS version 4.2 (RFC 7862) was published in November 2016 with new features including: server-side clone and copy, application I/O advise, sparse files, space reservation, application data block (ADB), labeled NFS with sec_label that accommodates any MAC security system, and two new operations for pNFS (LAYOUTERROR and LAYOUTSTATS).
One big advantage of NFSv4 over its predecessors is that only one UDP or TCP port, 2049, is used to run the service, which simplifies using the protocol across firewalls.[9]
Other extensions
WebNFS, an extension to Version 2 and Version 3, allows NFS to integrate more easily into Web-browsers and to enable operation through firewalls. In 2007 Sun Microsystems open-sourced their client-side WebNFS implementation.[10]
Various side-band protocols have become associated with NFS. Note:
- the byte-range advisory Network Lock Manager (NLM) protocol (added to support UNIX System Vfile locking APIs)
- the remote quota-reporting (RQUOTAD) protocol, which allows NFS users to view their data-storage quotas on NFS servers
- NFS over RDMA, an adaptation of NFS that uses remote direct memory access (RDMA) as a transport[11][12]
- NFS-Ganesha, an NFS server, running in user-space and supporting various file systems like GPFS/Spectrum Scale, CephFS via respective FSAL (File System Abstraction Layer) modules. The CephFS FSAL is supported using libcephfs[13]
- Trusted NFS (TNFS)[14]
Protocol development
Durante el desarrollo del protocolo ONC (conocido entonces como SunRPC ), solo el Sistema de Computación en Red (NCS) de Apollo ofrecía una funcionalidad comparable. Dos grupos rivales se enfrentaron debido a las diferencias fundamentales entre los dos sistemas de llamadas a procedimientos remotos. Los argumentos se centraron en el método de codificación de datos: la Representación de Datos Externos (XDR) de ONC siempre representaba los enteros en orden big-endian , incluso si ambos extremos de la conexión tenían arquitecturas de máquina little-endian , mientras que el método de NCS intentaba evitar el intercambio de bytes cuando dos extremos compartían un orden de bytes común en sus arquitecturas de máquina. Un grupo industrial llamado Foro de Computación en Red se formó (en marzo de 1987) en un intento (finalmente infructuoso) de conciliar los dos entornos de computación en red.
En 1987, Sun y AT&T anunciaron que desarrollarían conjuntamente la versión 4 del sistema UNIX V de AT&T. [ 15 ] Esto provocó que muchos de los otros licenciatarios de UNIX System de AT&T se preocuparan de que esto pusiera a Sun en una posición ventajosa, y finalmente llevó a que Digital Equipment, HP, IBM y otros formaran la Open Software Foundation (OSF) en 1988. Irónicamente, Sun y AT&T habían competido anteriormente por el NFS de Sun frente al Remote File System (RFS) de AT&T, y la rápida adopción de NFS sobre RFS por parte de Digital Equipment, HP, IBM y muchos otros proveedores de computadoras inclinó a la mayoría de los usuarios a favor de NFS. La interoperabilidad de NFS se vio favorecida por eventos llamados "Connectathons" que comenzaron en 1986 y que permitieron pruebas neutrales de implementaciones entre sí. [ 16 ] OSF adoptó el Entorno de Computación Distribuida (DCE) y el Sistema de Archivos Distribuidos DCE (DFS) sobre Sun/ONC RPC y NFS. DFS usó DCE como RPC, y DFS derivó del Sistema de Archivos Andrew (AFS); DCE mismo derivó de un conjunto de tecnologías, incluyendo NCS de Apollo y Kerberos .
década de 1990
Sun Microsystems y la Internet Society (ISOC) llegaron a un acuerdo para ceder el control de cambios de ONC RPC, de modo que el organismo de estándares de ingeniería de ISOC, el Grupo de Trabajo de Ingeniería de Internet (IETF), pudiera publicar documentos de estándares (RFC) relacionados con los protocolos ONC RPC y extender ONC RPC. OSF intentó convertir DCE RPC en un estándar del IETF, pero finalmente se mostró reacia a renunciar al control de cambios. Posteriormente, el IETF optó por extender ONC RPC añadiendo una nueva variante de autenticación basada en la Interfaz de Programación de Aplicaciones de Servicios de Seguridad Genéricos (GSSAPI), RPCSEC GSS , para cumplir con los requisitos del IETF de que los estándares de protocolo tengan una seguridad adecuada.
Posteriormente, Sun e ISOC llegaron a un acuerdo similar para otorgar a ISOC el control sobre los cambios en NFS, aunque redactaron el contrato cuidadosamente para excluir las versiones 2 y 3 de NFS. En cambio, ISOC obtuvo el derecho a agregar nuevas versiones al protocolo NFS, lo que llevó a la IETF a especificar la versión 4 de NFS en 2003.
década de 2000
Para el siglo XXI, ni DFS ni AFS habían alcanzado un éxito comercial significativo en comparación con SMB o NFS. IBM, que anteriormente había adquirido Transarc , el principal proveedor comercial de DFS y AFS, donó la mayor parte del código fuente de AFS a la comunidad de software libre en el año 2000. El proyecto OpenAFS sigue activo. A principios de 2005, IBM anunció el cese de las ventas de AFS y DFS.
En enero de 2010, Panasas propuso NFSv4.1 basado en su tecnología Parallel NFS (pNFS), afirmando mejorar la capacidad de paralelismo en el acceso a datos [ 17 ] . El protocolo NFSv4.1 define un método para separar los metadatos del sistema de archivos de la ubicación de los datos de los archivos; va más allá de la simple separación nombre/datos al distribuir los datos entre un conjunto de servidores de datos. Esto difiere del servidor NFS tradicional, que mantiene los nombres de los archivos y sus datos bajo un único servidor. Algunos productos son servidores NFS multinodo, pero la participación del cliente en la separación de metadatos y datos es limitada.
El servidor pNFS NFSv4.1 es un conjunto de recursos o componentes del servidor; se supone que estos están controlados por el servidor de metadatos.
El cliente pNFS sigue accediendo a un único servidor de metadatos para la navegación o interacción con el espacio de nombres; al transferir datos desde y hacia el servidor, puede interactuar directamente con el conjunto de servidores de datos que pertenecen a la colección de servidores pNFS. El cliente NFSv4.1 puede configurarse para participar directamente en la localización exacta de los datos de archivo y evitar la interacción exclusiva con un único servidor NFS al transferir datos.
Además de pNFS, NFSv4.1 proporciona:
- Sesiones
- Delegación de directorios y notificaciones
- Espacio de nombres multiservidor
- listas de control de acceso y control de acceso discrecional
- Atribuciones de retención
- SECINFO_NO_NAME
Plataformas
NFS está disponible en:
- Sistemas operativos tipo Unix ( Solaris , AIX , HP-UX , FreeBSD , NetBSD , OpenBSD , DragonFly BSD , distribuciones de Linux y macOS , [ 18 ] aunque el protocolo de red predeterminado en macOS es Server Message Block (SMB) [ 19 ] )
- AmigaOS
- ArcaOS [ 20 ]
- Haiku [ 21 ]
- IBM i , [ 22 ] aunque el protocolo de red predeterminado es OS/400 File Server (QFileSvr.400)
- Microsoft Windows , [ 23 ] aunque el protocolo de red predeterminado es Server Message Block (SMB)
- MS-DOS [ 24 ]
- Novell NetWare , [ 25 ] aunque el protocolo de red predeterminado es el Protocolo central de NetWare (NCP)
- OpenVMS [ 3 ]
- OS/2 [ 26 ]
- RISC OS [ 27 ]

Véase también
- 9P (protocolo)
- Alluxio
- BeeGFS
- CacheFS : un mecanismo de almacenamiento en caché para clientes NFS de Linux.
- Sistema de archivos distribuidos de Hadoop (HDFS)
- Kerberos (protocolo)
- Servicio de Información de Red
- Sistema de archivos remoto
- Calabaza de raíz
- Sistema de archivos Secure Shell
- Recurso compartido
- Envoltorio TCP
Referencias
- 1 2 Russel Sandberg; David Goldberg; Steve Kleiman; Dan Walsh; Bob Lyon (11–14 de junio de 1985). Diseño e implementación del sistema de archivos de red Sun (PDF) . Conferencia de verano de la Asociación Usenix. Portland, Oregón, EE. UU. CiteSeerX 10.1.1.14.473 .
- ↑ NFS Ilustrado (2000) por Brent Callaghan – ISBN 0-201-32570-5
- 1 2 "Servicios TCP/IP de HP para la administración de OpenVMS" . h41379.www4.hpe.com . HP. Archivado del original el 24 de septiembre de 2016. Recuperado el 24 de septiembre de 2016 .
- 1 2 Russel Sandberg. "El sistema de archivos de red Sun: diseño, implementación y experiencia" (PDF) . Informe técnico . Sun Microsystems. Archivado (PDF) del original el 26 de noviembre de 2013. Recuperado el 4 de agosto de 2013 .
- ↑ Arpaci-Dusseau, Remzi; Arpaci-Dusseau, Andrea (marzo de 2015). Sistemas operativos: tres piezas fáciles (PDF) (9.ª ed.). Libros Arpaci-Dusseau. pág. 5. Archivado (PDF) del original el 3 de abril de 2019. Recuperado el 8 de noviembre de 2017 .
- ↑ Brian Pawlowski; Chet Juszczak; Peter Staubach; Carl Smith; Diane Lebel; David Hitz (1994). " Diseño e implementación de la versión 3 de NFS" . USENIX . Archivado del original el 24 de noviembre de 2015. Consultado el 23 de noviembre de 2015 .
- ↑ "NFS Versión 4" . USENIX . 14 de abril de 2005. Archivado del original el 28 de julio de 2011. Consultado el 19 de diciembre de 2008 .
- ↑ Brian Pawlowski; Spencer Shepler; Carl Beame; Brent Callaghan; Michael Eisler; David Noveck; David Robinson; Robert Thurlow (2000). "El protocolo NFS versión 4" (PDF) . SANE . Archivado del original (PDF) el 2 de febrero de 2025.
- ↑ Justin Parisi; Elliott Ecton (junio de 2023). NFS en NetApp ONTAP, guía de mejores prácticas e implementación (PDF) (Informe técnico). NetApp.
- ↑ "yanfs" . Github.com .
- ↑ Tom Talpey (28 de febrero de 2006). "Actualización sobre la implementación de NFS/RDMA" (PDF) . Network Appliance, Inc. Archivado del original (PDF) el 12 de mayo de 2011.
- ↑ Brent Callaghan (28 de enero de 2002). "NFS sobre RDMA" (PDF) . Sun Microsystems. Archivado (PDF) del original el 12 de mayo de 2011. Recuperado el 6 de septiembre de 2010 .
- ↑ Singh, Karan (2016). "4: Trabajando con el sistema de archivos Ceph". Ceph Cookbook . Birmingham: Packt Publishing Ltd. pág. 110. ISBN 978-1-78439-736-4. Consultado el 21/03/2017 .
NFS-Ganesha es un servidor NFS que se ejecuta en el espacio de usuario y admite la capa de abstracción del sistema de archivos (FSAL) de CephFS mediante libcephfs.
- ↑ Glover, Fred (28 de mayo de 1994). "Una especificación de extensiones del protocolo NFS de confianza (TNFS)" . datatracker.ietf.org .
- ↑ Carole Patton (26 de octubre de 1987). "AT&T licenciará el chip SPARC de Sun Microsystems" . InfoWorld . pág. 37. Consultado el 16 de julio de 2019 .
- ↑ "¿Qué es Connectathon?" . Sitio web original de Connectathon.Org . Archivado del original el 28 de enero de 1999.
- ↑ "pNFS" . Panasas . Archivado del original el 7 de agosto de 2013. Recuperado el 4 de agosto de 2013 .
- ↑ "Servidores y ordenadores compartidos a los que puedes conectarte en Mac" . Soporte técnico de Apple . Consultado el 7 de agosto de 2025 .
- ↑ "Configurar el uso compartido de archivos en Mac" . Soporte técnico de Apple . Consultado el 7 de agosto de 2025 .
- ↑ "NetDrive para OS/2" . arcanoae.com . Archivado del original el 3 de noviembre de 2015. Consultado el 22 de septiembre de 2020 .
- ↑ Dziepak, Paweł (15 de marzo de 2013). "El cliente NFSv4 finalmente se fusionó" . Blog de Paweł Dziepak . Haiku, Inc.
- ↑ "Soporte del sistema de archivos de red OS/400" (PDF) . IBM . Consultado el 23 de mayo de 2024 .
- ↑ "Introducción a los servicios de Microsoft Windows para UNIX 3.5" . technet.microsoft.com . Microsoft. 5 de diciembre de 2007. Archivado del original el 18 de junio de 2018. Consultado el 24 de septiembre de 2016 .
- ↑ "Otro software de SUN Microsystems" . www.computinghistory.org.uk . El Centro de Historia de la Computación . Consultado el 24 de septiembre de 2016 .
- ↑ "NFS Gateway para NetWare 6.5" . www.novell.com . Novell . Consultado el 24 de septiembre de 2016 .
- ↑ "Complemento NTFS para NetDrive" . ecsoft2.org . Archivado del original el 22 de febrero de 2016. Consultado el 22 de septiembre de 2020 .
- ↑ "Programas relacionados con redes" . cp15.org .
Enlaces externos
- RFC :
- RFC 1014 – XDR: Estándar de representación de datos externos (obsoleto por RFC 1832)
- RFC 1094 – Especificación del protocolo NFS versión 2
- RFC 1790 – Acuerdo de control de cambios de Sun/ISOC ONC RPC
- RFC 1813 – Especificación del protocolo NFS versión 3
- RFC 1832 – XDR: Estándar de representación de datos externos (obsoleto por RFC 4506)
- RFC 2054 – Especificación del cliente WebNFS
- RFC 2055 – Especificación del servidor WebNFS
- RFC 2203 – Especificación RPCSEC_GSS
- RFC 2224 – Especificación del esquema de URL de NFS
- RFC 2339 – Acuerdo de control de cambios de Sun/ISOC NFS
- RFC 3010 – Especificación del protocolo NFS versión 4 (obsoleta por RFC 3530)
- RFC 3530 – Especificación del protocolo NFS versión 4 (obsoleta por RFC 7530 y RFC 7531)
- RFC 4506 – XDR: Estándar de representación de datos externos
- RFC 5403 – RPCSEC_GSS Versión 2
- RFC 5531 – RPC: Especificación del protocolo de llamada a procedimiento remoto, versión 2
- RFC 5661 – Especificación del protocolo NFS versión 4.1 (obsoleta por RFC 8881)
- RFC 5662 – Descripción del protocolo XDR de la versión 4.1 de NFS
- RFC 5663 – NFS paralelo - Especificación de diseño de bloques/volúmenes
- RFC 5664 – NFS paralelo - Especificación de operaciones basadas en objetos
- RFC 5665 – Consideraciones de IANA para los identificadores de red de llamadas a procedimientos remotos (RPC) y los formatos de direcciones universales
- RFC 5666 – Transporte de acceso directo a memoria remota para llamada a procedimiento remoto
- RFC 5667 – Ubicación directa de datos NFS
- RFC 7530 – Especificación del protocolo NFS versión 4
- RFC 7531 – Descripción del protocolo XDR de la versión 4 de NFS
- RFC 7862 – Especificación del protocolo NFS versión 4.2
- RFC 7863 – Descripción del protocolo XDR de la versión 4.2 de NFS
- RFC 8154 – Especificación de diseño SCSI para NFS paralelo
- RFC 8166 – Transporte de acceso directo a memoria remota para llamadas a procedimientos remotos, versión 1 (actualizado por RFC 8797)
- RFC 8267 – Enlace de capa superior NFS a RPC sobre RDMA Versión 1
- RFC 8275 – Extensión del atributo Umask para NFS versión 4.2
- RFC 8276 – Extensión Xattrs para NFSv4
- RFC 8434 – NFS paralelo - Especificación de diseño de archivos flexible
- RFC 8797 – Acceso remoto directo a memoria - Administrador de conexiones (RDMA-CM) Datos privados para RPC sobre RDMA Versión 1
- RFC 8881 – Especificación del protocolo NFS versión 4.1
- RFC 9289 – Hacia el cifrado de llamadas a procedimientos remotos por defecto
- RFC 9562 – Identificadores Universalmente Únicos (UUID)
- Normas técnicas del Grupo Abierto:
- Protocolos de interconexión: XNFS, versión 3W – Especificación de Open Group de NFS2, NFS3 y protocolos de banda lateral MNT, NSM y NLM para el bloqueo de archivos que no están cubiertos por los documentos RFC.
- Protocolos para la interoperabilidad de X/Open PC: (PC)NFS – Especificación de Open Group de NFS2 y protocolos de banda lateral MNT, NLM y PCNFSD que no están cubiertos por los documentos RFC.
- Diversos recursos:
- Implementación del Sistema de Archivos de Red (NFS) 2.0
- IETF: Carta del Sistema de Archivos de Red Versión 4 (nfsv4)
- Descripción general, preguntas frecuentes y documentos de instrucciones para Linux NFS.
- Funcionamiento de NFS explicado con diagramas de secuencia. Archivado el 22/09/2020 en Wayback Machine.
- Reseña del artículo "Por qué NFS es un desastre" del Simposio Linux de 2006, por Mike Eisler, 27 de octubre de 2006.
- Protocolos de Internet
- Sistemas de archivos de red
- Software de red basado en el protocolo de Internet
- Software relacionado con redes Unix
- protocolos de la capa de aplicación
- protocolos de transferencia de archivos de red
- Sistemas de archivos distribuidos
- Arranque de red
- Software de 1984