The NFS Version 4 Protocol: 1.1. Requirements
The NFS Version 4 Protocol: 1.1. Requirements
The NFS Version 4 Protocol: 1.1. Requirements
Brian Pawlowski, Spencer Shepler, Carl Beame, Brent Callaghan, Michael Eisler,
David Noveck, David Robinson, Robert Thurlow
Abstract
The Network File System (NFS) Version 4 is a
new distributed file system similar to previous
versions of NFS in its straightforward design,
simplified error recovery, and independence of
transport protocols and operating systems for file
access in a heterogeneous network. Unlike earlier
versions of NFS, the new protocol integrates file
locking, strong security, operation coalescing, and
delegation capabilities to enhance client
performance for narrow data sharing applications
on high-bandwidth networks. Locking and
delegation make NFS stateful, but simplicity of
design is retained through well-defined recovery
semantics in the face of client and server failures
and network partitions.
This paper describes the new features of the
protocol, focusing on the security enhancements,
integrated locking support, changes to fully
support Windows file sharing semantics, support
for high performance data sharing, and the design
points that enhance performance on the Internet.
We describe applications of NFS Version 4.
Finally, we describe areas for future work.
1.
Background
1.1.
Requirements
2.
Reserved Operation 2
OPEN/CLOSE operations
NULL
NULL
NULL
Compound operations
COMPOUND
NVERIFY
VERIFY
OPEN
OPENATTR
OPEN_CONFIRM
OPEN_DOWNGRADE
CLOSE
Delegation operations
DELEGPURGE
DELEGRETURN
SETCLIENTID
SETCLIENTID_CONFIRM
Locking operations
LOCK
LOCKT
LOCKU
RENEW
Filehandle operations
PUTPUBFH
PUTROOTFH
GETFH
RESTOREFH
SAVEFH
Security operations
ACCESS
ACCESS
SECINFO
LOOKUP
LOOKUP
GETATTR
SETATTR
LINK
READDIR
GETATTR
SETATTR
LINK
READDIR
READDIRPLUS
READLINK
CREATE
MKDIR
MKNOD
REMOVE
RMDIR
RENAME
SYMLINK
READ
WRITE
COMMIT
FSSTAT
FSINFO
PATHCONF
READLINK
CREATE
MKDIR
REMOVE
RMDIR
RENAME
SYMLINK
READ
WRITE
3.
STATFS
LOOKUP
LOOKUPP
GETATTR
SETATTR
LINK
READDIR
READLINK
CREATE
REMOVE
RENAME
READ
WRITE
COMMIT
Never implemented
ROOT
WRITECACHE
18 ops
22 ops
42 ops
export
vol
vol0
vol1
admin
vol2
backup
archive
vol0
backup
vol1
archive
3.2.
Pseudo-file systems
3.1.
vol
4.
PUTROOTFH OK CURFH
4.1.
An example
GETFH
GETATTR
PUTROOTFH OK CURFH
LOOKUP OK CURFH
GETFH OK
GETATTR OK
PUTFH
OPEN home/data
READ at 0 for 32768
PUTFH OK CURFH
OPEN OK CURFH
READ OK (32768 bytes)
5.
PUTFH
LOOKUP image
GETFH
GETATTR
ACCESS
READ at 0 for 32768
ls /export/home/beepy
4.2.
Multi-component LOOKUP
PUTROOTFH OK CURFH
LOOKUP FAILED
PUTROOTFH
LOOKUP export
GETFH
GETATTR
LOOKUP home
GETFH
GETATTR
LOOKUP beepy
GETFH
GETATTR
PUTROOTFH OK CURFH
LOOKUP OK CURFH
GETFH OK
GETATTR OK
LOOKUP OK CURFH
GETFH
GETATTR OK
LOOKUP FAILED
6.
6.1.
Filehandles
PUTROOTFH
LOOKUP export home
GETATTR
PUTROOTFH OK CURFH
LOOKUP OK CURFH
GETATTR OK
6.2.
Client ID
6.3.
7.
8.
State ID
8.1.
Client-side caching
8.3.
8.2.
Client callbacks
Open delegation
8.4.
9.
Locking
9.1.
9.2.
Mandatory locking
Leases
9.3.
Share reservations
10
Mandatory
Recommended
Named
9.4.
Sequence IDs
fsid
Lease duration
10.
Object type
Filehandle expiration type
Change indicator
Size
UNIX LINK support
UNIX SYMLINK support
Attributes
11
ACL
Archive bit
Case insensitive
Case preserving
Change owner restricted
No file name truncation beyond maximum
Filehandle
File ID
Hidden
Maximum file size
Maximum number of links
Maximum filename size
Maximum read size
Maximum write size
MIME type
UNIX mode bits
Owner string
Group string
Modify time
Create time
Access time
Space available to user
File system free space
File system total space
11.
Security model
12
13
11.6.1. UUIDs
We did consider Universal User Identifiers
(UUIDs) instead of strings. However, UUIDs still
have the translation issue, since they are 128 bits
long versus 32 bits for UNIX identifiers.
Furthermore, in situations where a client receives a
GETATTR result with an untranslatable identifier, it
was felt that a string like ted@eisler.com would
be more useful than a string of 128 bits. We
anticipate that UNIX implementers might consider
adding a stat(2) system call variant that returns
the file system's native string representations if
available.
or
group@domain
where domain represents a registered DNS
domain, or a sub-domain of a registered domain.
By leveraging the global domain name registry and
delegating user and group identifier control, NFS
Version 4 does not require IANA to develop yet
another global registry to guarantee uniqueness.
One issue with using string names, instead of
integers, is that UNIX systems like Solaris will
still be using integers in the underlying file
systems stored on disk. This requires mapping
string names to integers and back. Since NFS
clients and servers have done something similar
with security flavors like RPCSEC_GSS and
AUTH_DH [Taylor] that use string names for
14
13.
/export/alice/safe/A.
12.
Minor versioning
14.
15
15.
16
16.
Future Work
17
17.
http://www.nfsv4.org
Pointers to relevant sections of the Internet
Engineering Task Force site:
http://www.ietf.org
can be found there.
The CITI group at the University of Michigan is
developing an open source reference
implementation, and their work can be accessed at:
http://www.citi.umich.edu/projects/nfsv4/
18.
Acknowledgements
NFS Version 4 does not address server-toserver file system migration protocols or the issues
of maintaining replica consistency and migration
atomicity. It remains for future working groups to
define. Until then, vendor-specific solutions may
arise.
19.
Bibliography
18
http://www.microsoft.com/windows2000/library/pl
anning/security/kerbsteps.asp
[MIT] Massachusetts Institute of Technology
(1998). "Kerberos: The Network Authentication
Protocol." The Web site for downloading MIT's
implementation of Kerberos Version 5, including
implementations of RFC 1510 and RFC 1964.
http://web.mit.edu/kerberos/www/index.html
19
20