diff options
Diffstat (limited to 'static/freebsd/man4/nfsv4.4')
| -rw-r--r-- | static/freebsd/man4/nfsv4.4 | 509 |
1 files changed, 509 insertions, 0 deletions
diff --git a/static/freebsd/man4/nfsv4.4 b/static/freebsd/man4/nfsv4.4 new file mode 100644 index 00000000..9ec77561 --- /dev/null +++ b/static/freebsd/man4/nfsv4.4 @@ -0,0 +1,509 @@ +.\" Copyright (c) 2009 Rick Macklem, University of Guelph +.\" All rights reserved. +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in the +.\" documentation and/or other materials provided with the distribution. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE +.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS +.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) +.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY +.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF +.\" SUCH DAMAGE. +.\" +.Dd April, 8, 2026 +.Dt NFSV4 4 +.Os +.Sh NAME +.Nm NFSv4 +.Nd NFS Version 4 Protocol +.Sh DESCRIPTION +The NFS client and server provides support for the +.Tn NFSv4 +specification; see +.%T "Network File System (NFS) Version 4 Protocol RFC 7530" , +.%T "Network File System (NFS) Version 4 Minor Version 1 Protocol RFC 5661" , +.%T "Network File System (NFS) Version 4 Minor Version 2 Protocol RFC 7862" , +.%T "File System Extended Attributes in NFSv4 RFC 8276" and +.%T "Parallel NFS (pNFS) Flexible File Layout RFC 8435" . +The protocol is somewhat similar to NFS Version 3, but differs in significant +ways. +It uses a single compound RPC that concatenates operations to-gether. +Each of these operations are similar to the RPCs of NFS Version 3. +The operations in the compound are performed in order, until one of +them fails (returns an error) and then the RPC terminates at that point. +.Pp +It has +integrated locking support, which implies that the server is no longer +stateless. +As such, the +.Nm +server remains in recovery mode for a grace period (always greater than the +lease duration the server uses) after a reboot. +During this grace period, clients may recover state but not perform other +open/lock state changing operations. +To provide for correct recovery semantics, a small file described by +.Xr stablerestart 5 +is used by the server during the recovery phase. +If this file is missing or empty, there is a backup copy maintained by +.Xr nfsd 8 +that will be used. +If either file is missing, they will be created by the +.Xr nfsd 8 . +If both the file and the backup copy are empty, +it will result in the server starting without providing a grace period +for recovery. +Note that recovery only occurs when the server +machine is rebooted, not when the +.Xr nfsd 8 +are just restarted. +.Pp +It provides several optional features not present in NFS Version 3: +.sp +.Bd -literal -offset indent -compact +- NFS Version 4 ACLs +- Referrals, which redirect subtrees to other servers + (not yet implemented) +- Delegations, which allow a client to operate on a file locally +- pNFS, where I/O operations are separated from Metadata operations +And for NFSv4.2 only +- User namespace extended attributes +- lseek(SEEK_DATA/SEEK_HOLE) +- File copying done locally on the server for copy_file_range(2) +- posix_fallocate(2) +- posix_fadvise(POSIX_FADV_WILLNEED/POSIX_FADV_DONTNEED) +.Ed +.Pp +The +.Nm +protocol does not use a separate mount protocol and assumes that the +server provides a single file system tree structure, rooted at the point +in the local file system tree specified by one or more +.sp 1 +.Bd -literal -offset indent -compact +V4: <rootdir> [-sec=secflavors] [host(s) or net] +.Ed +.sp 1 +line(s) in the +.Xr exports 5 +file. +(See +.Xr exports 5 +for details.) +The +.Xr nfsd 8 +allows a limited subset of operations to be performed on non-exported subtrees +of the local file system, so that traversal of the tree to the exported +subtrees is possible. +As such, the +.Ql <rootdir> +can be in a non-exported file system. +The exception is ZFS, which checks exports and, as such, all ZFS file systems +below the +.Ql <rootdir> +must be exported. +However, +the entire tree that is rooted at that point must be in local file systems +that are of types that can be NFS exported. +Since the +.Nm +file system is rooted at +.Ql <rootdir> , +setting this to anything other than +.Ql / +will result in clients being required to use different mount +paths for +.Nm +than for NFS Version 2 or 3. +Unlike NFS Version 2 and 3, Version 4 allows a client mount to span across +multiple server file systems, although not all clients are capable of doing +this. +.Pp +.Nm +uses strings for users and groups instead of numbers. +On the wire, these strings can either have the numbers in the string or +take the form: +.sp +.Bd -literal -offset indent -compact +<user>@<dns.domain> +.Ed +.sp +where +.Ql <dns.domain> +is not the same as the DNS domain used +for host name lookups, but is usually set to the same string. +Most systems set this +.Ql <dns.domain> +to the domain name part of the machine's +.Xr hostname 1 +by default. +However, this can normally be overridden by a command line +option or configuration file for the daemon used to do the name<->number +mapping. +Under +.Fx , +the mapping daemon is called +.Xr nfsuserd 8 +and has a command line option that overrides the domain component of the +machine's hostname. +For use of this form of string on +.Nm , +either client or server, this daemon must be running. +.Pp +The form where the numbers are in the strings can only be used for AUTH_SYS. +To configure your systems this way, the +.Xr nfsuserd 8 +daemon should not be running on the NFS systems, +but the following sysctls +need to be set to 1 on the NFS server. +.sp +.Bd -literal -offset indent -compact +vfs.nfs.enable_uidtostring +vfs.nfsd.enable_stringtouid +.Ed +.sp +However, on the NFS client +only the sysctl +.sp +.Bd -literal -offset indent -compact +vfs.nfs.enable_uidtostring +.Ed +.sp +needs to be set to 1. +.Pp +If these strings are not configured correctly, +.Ql ls -l +will typically +report a lot of +.Ql nobody +and +.Ql nogroup +ownerships. +.Pp +Although uid/gid numbers are no longer used in the +.Nm +protocol except optionally in the above strings, they will still be in the RPC +authentication fields when using AUTH_SYS (sec=sys), which is the default. +As such, in this case both the user/group name and number spaces must +be consistent between the client and server. +.Pp +However, if you run +.Nm +with RPCSEC_GSS (sec=krb5, krb5i, krb5p), only names and KerberosV tickets +will go on the wire. +.Sh SERVER SETUP +To set up the NFS server that supports +.Nm , +you will need to set the variables in +.Xr rc.conf 5 +as follows: +.sp +.Bd -literal -offset indent -compact +nfs_server_enable="YES" +nfsv4_server_enable="YES" +.Ed +.sp +plus +.sp +.Bd -literal -offset indent -compact +nfsuserd_enable="YES" +.Ed +.sp +if the server is using the +.Ql <user>@<domain> +form of user/group strings or +is using the +.Ql -manage-gids +option for +.Xr nfsuserd 8 . +.Pp +In addition, you can set: +.sp +.Bd -literal -offset indent -compact +nfsv4_server_only="YES" +.Ed +.sp +to disable support for NFSv2 and NFSv3. +.Pp +You will also need to add at least one +.Ql V4: +line to the +.Xr exports 5 +file for +.Nm +to work. +.Pp +If the file systems you are exporting are only being accessed via +.Nm +there are a couple of +.Xr sysctl 8 +variables that you can change, which might improve performance. +.Bl -tag -width Ds +.It Cm vfs.nfsd.issue_delegations +when set non-zero, allows the server to issue Open Delegations to +clients. +These delegations permit the client to manipulate the file +locally on the client. +Unfortunately, at this time, client use of +delegations is limited, so performance gains may not be observed. +This can only be enabled when the file systems being exported to +.Nm +clients are not being accessed locally on the server and, if being +accessed via NFS Version 2 or 3 clients, these clients cannot be +using the NLM. +.It Cm vfs.nfsd.enable_locallocks +can be set to 0 to disable acquisition of local byte range locks. +Disabling local locking can only be done if neither local accesses +to the exported file systems nor the NLM is operating on them. +.El +.sp +Note that Samba server access would be considered +.Ql local access +for the above +discussion. +.Pp +To build a kernel with the NFS server that supports +.Nm +linked into it, the +.sp +.Bd -literal -offset indent -compact +options NFSD +.Ed +.sp +must be specified in the kernel's +.Xr config 5 +file. +.Sh CLIENT MOUNTS +To do an +.Nm +mount, specify the +.Ql nfsv4 +option on the +.Xr mount_nfs 8 +command line. +This will force use of the client that supports +.Nm +plus set +.Ql tcp +and +.Nm . +.Pp +The +.Xr nfsuserd 8 +must be running if name<->uid/gid mapping is being used, as above. +Also, since an +.Nm +mount uses the host uuid to identify the client uniquely to the server, +you cannot safely do an +.Nm +mount when +.sp +.Bd -literal -offset indent -compact +hostid_enable="NO" +.Ed +.sp +is set in +.Xr rc.conf 5 . +.sp +If the +.Nm +server that is being mounted on supports delegations, you can start the +.Xr nfscbd 8 +daemon to handle client side callbacks. +This will occur if +.sp +.Bd -literal -offset indent -compact +nfsuserd_enable="YES" <-- If name<->uid/gid mapping is being used. +nfscbd_enable="YES" +.Ed +.sp +are set in +.Xr rc.conf 5 . +.sp +Without a functioning callback path, a server will never issue Delegations +to a client. +.sp +For NFSv4.0, by default, the callback address will be set to the IP address +acquired via +.Fn rtalloc +in the kernel and port# 7745. +To override the default port#, a command line option for +.Xr nfscbd 8 +can be used. +.sp +To get callbacks to work when behind a NAT gateway, a port for the callback +service will need to be set up on the NAT gateway and then the address +of the NAT gateway (host IP plus port#) will need to be set by assigning the +.Xr sysctl 8 +variable vfs.nfs.callback_addr to a string of the form: +.sp +N.N.N.N.N.N +.sp +where the first 4 Ns are the host IP address and the last two are the +port# in network byte order (all decimal #s in the range 0-255). +.Pp +For NFSv4.1 and NFSv4.2, the callback path (called a backchannel) uses the +same TCP connection as the mount and, as such, no additional +configuration is needed for the callback path. +.Pp +To build a kernel with the client that supports +.Nm +linked into it, the option +.sp +.Bd -literal -offset indent -compact +options NFSCL +.Ed +.sp +must be specified in the kernel's +.Xr config 5 +file. +.Pp +Options can be specified for the +.Xr nfsuserd 8 +and +.Xr nfscbd 8 +daemons at boot time via the +.Ql nfsuserd_flags +and +.Ql nfscbd_flags +.Xr rc.conf 5 +variables. +.Pp +NFSv4 mount(s) against exported volume(s) on the same host are not recommended, +since this can result in a hung NFS server. +It occurs when an nfsd thread tries to do an NFSv4 +.Fn VOP_RECLAIM +/ Close RPC as part of acquiring a new vnode. +If all other nfsd threads are blocked waiting for lock(s) held by this nfsd +thread, then there is no nfsd thread to service the Close RPC. +.Sh NFSv4 ROOT FILE SYSTEM +.Pp +For an +.Nm +root file system, there are a few things that need +to be done beyond what is needed for an NFSv3 root file system. +The NFS server must be configured with the +.Ql <rootdir> +as +.Pa / +so that +the mount path is the same for +.Nm +as NFSv3. +This is required because the bootstrap code still uses NFSv3. +.Pp +The following additional changes are required in the exported +root file system. +.sp +In +.Xr fstab 5 , +the +.Ql nfsv4 +mount option must be specified in +the line for the root mount. +.sp +In +.Pa /boot/loader.conf +the line +.sp +.Bd -literal -offset indent -compact +boot.nfsroot.options="nfsv4" +.Ed +.sp +is needed to tell the kernel to use +.Nm +for the root mount. +Additional mount options may be specified. +.sp +If your +.Nm +setup is using the form where the uid/gid numbers are in strings, +the sysctl +.Ql vfs.nfs.enable_uidtostring +must be set to one before any NFSv4 read/write mounts are done. +The recommended way to do this is to put +.sp +.Bd -literal -offset indent -compact +vfs.nfs.enable_uidtostring=1 +.Ed +.sp +in +.Pa /etc/sysctl.conf +in the FS exported root file system. +Alternately, if your +.Nm +setup is using +.Ql <user>@<dns.domain> +via +.Xr nfsuserd 8 +for uids/gids, then you need the following additional line in +.Pa /boot/loader.conf +.sp +.Bd -literal -offset indent -compact +boot.nfsroot.user_domain="<dns.domain>" +.Ed +.sp +which tells the booting kernel that you are going to be +doing mapping via +.Xr nfsuserd 8 +and what your +.Ql <dns.domain> +is. +The booting kernel will set a few critical mappings to allow +the boot to proceed until the +.Xr nfsuserd 8 +daemon is started. +Then in +.Pa /etc/rc.conf +you need the lines +.sp +.Bd -literal -offset indent -compact +nfsuserd_enable="YES" +nfsuserd_flags="-domain <dns.domain>" +.Ed +.sp +to start the daemon. +.Pp +Beyond this, the setup should be the same as would be used +for an NFSv3 root file system. +See section +.Ql Diskless Operation with PXE +in the +.Ql Advanced Networking +chapter of the +.Ql FreeBSD Handbook , +although configuring hosts as fixed addresses in your +.Ql dhcpd.conf +might be preferable. +.Sh FILES +.Bl -tag -width /var/db/nfs-stablerestart.bak -compact +.It Pa /var/db/nfs-stablerestart +NFS V4 stable restart file +.It Pa /var/db/nfs-stablerestart.bak +backup copy of the file +.El +.Sh SEE ALSO +.Xr stablerestart 5 , +.Xr mountd 8 , +.Xr nfscbd 8 , +.Xr nfsd 8 , +.Xr nfsdumpstate 8 , +.Xr nfsrevoke 8 , +.Xr nfsuserd 8 +.Sh BUGS +At this time, there is no recall of delegations for local file system +operations. +As such, delegations should only be enabled for file systems +that are being used solely as NFS export volumes and are not being accessed +via local system calls nor services such as Samba. |
