# nfsdcld

## NAME



           nfsdcld - NFSv4 Client Tracking Daemon
    


## SYNOPSIS



           nfsdcld [-d] [-F] [-p path] [-s stable storage dir]
    


## DESCRIPTION



           nfsdcld is the NFSv4 client tracking daemon. It is not necessary
           to run this daemon on machines that are not acting as NFSv4
           servers.
    
           When a network partition is combined with a server reboot, there
           are edge conditions that can cause the server to grant lock
           reclaims when other clients have taken conflicting locks in the
           interim. A more detailed explanation of this issue is described in
           RFC 3530, section 8.6.3.
    
           In order to prevent these problems, the server must track a small
           amount of per-client information on stable storage. This daemon
           provides the userspace piece of that functionality.
    


## OPTIONS



           **-d** , **--debug**
               Enable debug level logging.
    
           **-F** , **--foreground**
               Runs the daemon in the foreground and prints all output to
               stderr
    
           **-p** _path_ , **--pipefsdir** =_path_
               Location of the rpc_pipefs filesystem. The default value is
               _/var/lib/nfs/rpc_pipefs_.
    
           **-s** _storage_dir_ , **--storagedir** =_storage_dir_
               Directory where stable storage information should be kept. The
               default value is _/var/lib/nfs/nfsdcld_.
    


## CONFIGURATION FILE



           The following values are recognized in the **[nfsdcld]** section of
           the _/etc/nfs.conf_ configuration file:
    
           **storagedir**
               Equivalent to **-s** /**--storagedir**.
    
           **debug**
               Setting "debug = 1" is equivalent to **-d** /**--debug**.
    
           In addition, the following value is recognized from the **[general]**
           section:
    
           **pipefs-directory**
               Equivalent to **-p** /**--pipefsdir**.
    


## NOTES



           The Linux kernel NFSv4 server has historically tracked this
           information on stable storage by manipulating information on the
           filesystem directly, in the directory to which
           _/proc/fs/nfsd/nfsv4recoverydir_ points.
    
           This changed with the original introduction of **nfsdcld** upcall in
           kernel version 3.4, which was later deprecated in favor of the
           nfsdcltrack(8) usermodehelper program, support for which was added
           in kernel version 3.8.  However, since the usermodehelper upcall
           does not work in containers, support for a new version of the
           **nfsdcld** upcall was added in kernel version 5.2.
    
           This daemon requires a kernel that supports the **nfsdcld** upcall. On
           older kernels, if the legacy client name tracking code was in use,
           then the kernel would not create the pipe that **nfsdcld** uses to
           talk to the kernel.  On newer kernels, nfsd attempts to initialize
           client tracking in the following order:  First, the **nfsdcld**
           upcall.  Second, the **nfsdcltrack** usermodehelper upcall.  Finally,
           the legacy client tracking.
    
           This daemon should be run as root, as the pipe that it uses to
           communicate with the kernel is only accessible by root. The daemon
           however does drop all superuser capabilities after starting.
           Because of this, the _storagedir_ should be owned by root, and be
           readable and writable by owner.
    
           The daemon now supports different upcall versions to allow the
           kernel to pass additional data to be stored in the on-disk
           database.  The kernel will query the supported upcall version from
           **nfsdcld** during client tracking initialization.  A restart of **nfsd**
           is not necessary after upgrading **nfsdcld** , however **nfsd** will not
           use a later upcall version until restart.  A restart of **nfsd is**
           **necessary** after downgrading **nfsdcld** , to ensure that **nfsd** does not
           use an upcall version that **nfsdcld** does not support.
           Additionally, a downgrade of **nfsdcld** requires the schema of the
           on-disk database to be downgraded as well.  That can be
           accomplished using the nfsdclddb(8) utility.
    


## FILES



           **/var/lib/nfs/nfsdcld/main.sqlite**
    


* * *