NFS interoperability is a feature that you can optionally enable on a view to add support for simultaneous access to files by SMB and NFS protocols. By default, views that have SMB and NFS access enabled support non-simultaneous access to the same files from both SMB and NFS (whether NFSv3 or NFSv4.1 or both). The NFS interoperability feature is specifically relevant if your environment uses applications or scenarios where simultaneous access to the same file from SMB and from NFSv3 or NFSv4.1 may occur.
NFS interoperability enables VAST Cluster to enforce SMB leases, SMB share-mode holds and delete-on-close semantics on NFS clients, so that the NFS clients will respond to mandatory locking from the SMB side by retrying or failing as appropriate to the scenario. This feature is designed to mitigate a potential risk of data corruption with simultaneous access. The risk arises due to the fact that SMB locking is mandatory and server enforced, while, by default, NFS clients may ignore SMB locks and proceed with simultaneous access requests.
NFS interoperability is enabled per view independently of security flavor, and you can choose whether to enable it for NFSv3 or NFSv4.1 or for both NFSv3 and NFSv.1. In each case, the feature carries some performance impact. NFS interoperability should not be enabled on any view that doesn't have SMB enabled, since the feature consumes additional resources during NFS access.
NFS interoperabilty is only recommended with NFSv3 if you expect to have simultaneous access to the same files from NFSv3 and SMB. If you do not expect simultaneous access to the same files from both SMB and NFSv3, NFS interoperability should be disabled (or left disabled, which is the default setting per view). The performance degradation can be quite significant for reads and writes with NFS interoperability if you have IO to small files (less than 1 MB), infrequent IO per file (once per two seconds or more) or parallel IO on many files. However, performance impact is less with frequent IO to the same large file.
The following NFSv3 operations are interoperability-sensitive and subject to the handling added by this feature: READ, WRITE, RENAME, UNLINK, and SETACL of the auxiliary NFSACL protocol.
NFS interoperability may send the following error notifications to NFSv3 clients, depending on the request type and the type of mandatory locking that may be held by an SMB client: NFS3ERR_ACCESS, NFS3ERR_JUKEBOX, NFS3ERR_STALE. These notification codes should be fully implemented on the client.
NFS interoperability could have a minor performance impact on NFSv4.1 workloads, with slower SETATTR, RENAME and REMOVE operations. It is recommended to enable it if there is any possibility of simultaneous file access from NFSv4.1 and SMB. If no simultaneous file access is expected in a given view, it is better to disable the feature on that view.
The following NFSv4.1 operations are interoperability-sensitive and subject to the handling included in this feature: OPEN, OPEN with upgrade, OPEN with truncate, RENAME, REMOVE, SETATTR (mode, owner, ACL).
NFS interoperability may send the following error notifications to NFSv4.1 clients, depending on the request type and the type of mandatory locking that may be held by an SMB client: NFS4ERR_DELAY, NFS4ERR_FILE_OPEN, NFS4ERR_STALE, NFS4ERR_SHARE_DENIED. These notification codes should be fully implemented on the client.
NFS interoperability is disabled by default and can be enabled from the VAST CLI when creating or modifying a view.
To enable NFS interoperability, include the
--nfs-interop parameter in a view create or view modify command and use one of these string values to specify which of the NFS protocols you want to enable it for:
NFSv3. Enables NFS interoperability for NFSv3 and leaves it disabled for NFSv4.1.
NFSv4.1. Enables NFS interoperability for NFSv4.1 and leaves it disabled for NFSv3.
NFSv3_NFSv4.1. Enables NFS interoperability for NFSv3 and NFSv4.1.
vcli: admin> view create --path /home/users/devteam --protocols NFS4,SMB --alias /devteam --share devteamusers --policy-id 2 --create-dir --nfs-interop NFSv4.1
To disable NFS interoperability, include the
--nfs-interop parameter in a view modify command and specify
vcli: admin> view modify --id 20 --nfs-interop Disabled
To see if NFS interoperability is currently enabled or disabled on a given view, use the view list or view show command. The output shows the current configuration (
NFS-interop row in the view show output):
vcli: admin> view show --id 3 +-------------------+--------------+ | ID | 3 | | Path | /dir1 | | Alias | | | Share | | | Bucket | | | Bucket-owner | None | | Policy | default | | Protocols | ['NFS'] | | Cluster | vast1 | | Physical-capacity | 405031178876 | | Logical-capacity | 824025317418 | | S3-locks | False | | NFS-interop | Disabled | +-------------------+--------------+