NFSv4.1 服务器实现¶
可以使用 /proc/fs/nfsd/versions 控制文件来控制服务器对 minorversion 1 的支持。读取此文件返回的字符串输出将包含 “+4.1” 或 “-4.1” 相应的值。
当前,默认启用服务器对 minorversion 1 的支持。可以通过将字符串 “-4.1” 写入 /proc/fs/nfsd/versions 控制文件来在运行时禁用它。请注意,要写入此控制文件,必须关闭 nfsd 服务。你可以使用 rpc.nfsd 来完成此操作;请参阅 rpc.nfsd(8)。
(警告:较旧的服务器会将 “+4.1” 和 “-4.1” 分别解释为 “+4” 和 “-4”。因此,旨在在新旧内核上运行的代码必须先打开或关闭 4.1 的支持,然后再打开或关闭版本 4 的支持;rpc.nfsd 可以正确地执行此操作。)
nfsd 中 NFSv4 minorversion 1 (NFSv4.1) 的实现基于 RFC 5661。
在 NFSv4.1 的许多新功能中,当前实现侧重于强制实现的 NFSv4.1 会话,提供“完全一次”语义,以及更好地控制和限制为每个客户端分配的资源。
下表取自 NFSv4.1 文档,列出了在 minor version 1 中强制实现 (REQ)、可选 (OPT) 和要求不实现的 NFSv4.0 操作 (MNI)。第一列指示 Linux 服务器实现尚不支持的操作。
已标识的可选功能及其缩写如下
pNFS 并行 NFS
FDELG 文件委托
DDELG 目录委托
以下缩写指示 Linux 服务器的实现状态。
I 已实现的 NFSv4.1 操作。
NS 不支持。
NS* 未实现的可选功能。
操作¶
实现状态 |
操作 |
REQ、REC、OPT 或 NMI |
功能(REQ、REC 或 OPT) |
定义 |
---|---|---|---|---|
ACCESS |
REQ |
第 18.1 节 |
||
I |
BACKCHANNEL_CTL |
REQ |
第 18.33 节 |
|
I |
BIND_CONN_TO_SESSION |
REQ |
第 18.34 节 |
|
CLOSE |
REQ |
第 18.2 节 |
||
COMMIT |
REQ |
第 18.3 节 |
||
CREATE |
REQ |
第 18.4 节 |
||
I |
CREATE_SESSION |
REQ |
第 18.36 节 |
|
NS* |
DELEGPURGE |
OPT |
FDELG (REQ) |
第 18.5 节 |
DELEGRETURN |
OPT |
FDELG, |
第 18.6 节 |
|
DDELG, pNFS |
||||
(REQ) |
||||
I |
DESTROY_CLIENTID |
REQ |
第 18.50 节 |
|
I |
DESTROY_SESSION |
REQ |
第 18.37 节 |
|
I |
EXCHANGE_ID |
REQ |
第 18.35 节 |
|
I |
FREE_STATEID |
REQ |
第 18.38 节 |
|
GETATTR |
REQ |
第 18.7 节 |
||
I |
GETDEVICEINFO |
OPT |
pNFS (REQ) |
第 18.40 节 |
NS* |
GETDEVICELIST |
OPT |
pNFS (OPT) |
第 18.41 节 |
GETFH |
REQ |
第 18.8 节 |
||
NS* |
GET_DIR_DELEGATION |
OPT |
DDELG (REQ) |
第 18.39 节 |
I |
LAYOUTCOMMIT |
OPT |
pNFS (REQ) |
第 18.42 节 |
I |
LAYOUTGET |
OPT |
pNFS (REQ) |
第 18.43 节 |
I |
LAYOUTRETURN |
OPT |
pNFS (REQ) |
第 18.44 节 |
LINK |
OPT |
第 18.9 节 |
||
LOCK |
REQ |
第 18.10 节 |
||
LOCKT |
REQ |
第 18.11 节 |
||
LOCKU |
REQ |
第 18.12 节 |
||
LOOKUP |
REQ |
第 18.13 节 |
||
LOOKUPP |
REQ |
第 18.14 节 |
||
NVERIFY |
REQ |
第 18.15 节 |
||
OPEN |
REQ |
第 18.16 节 |
||
NS* |
OPENATTR |
OPT |
第 18.17 节 |
|
OPEN_CONFIRM |
MNI |
不适用 |
||
OPEN_DOWNGRADE |
REQ |
第 18.18 节 |
||
PUTFH |
REQ |
第 18.19 节 |
||
PUTPUBFH |
REQ |
第 18.20 节 |
||
PUTROOTFH |
REQ |
第 18.21 节 |
||
READ |
REQ |
第 18.22 节 |
||
READDIR |
REQ |
第 18.23 节 |
||
READLINK |
OPT |
第 18.24 节 |
||
RECLAIM_COMPLETE |
REQ |
第 18.51 节 |
||
RELEASE_LOCKOWNER |
MNI |
不适用 |
||
REMOVE |
REQ |
第 18.25 节 |
||
RENAME |
REQ |
第 18.26 节 |
||
RENEW |
MNI |
不适用 |
||
RESTOREFH |
REQ |
第 18.27 节 |
||
SAVEFH |
REQ |
第 18.28 节 |
||
SECINFO |
REQ |
第 18.29 节 |
||
I |
SECINFO_NO_NAME |
REC |
pNFS 文件 |
第 18.45 节, |
layout (REQ) |
第 13.12 节 |
|||
I |
SEQUENCE |
REQ |
第 18.46 节 |
|
SETATTR |
REQ |
第 18.30 节 |
||
SETCLIENTID |
MNI |
不适用 |
||
SETCLIENTID_CONFIRM |
MNI |
不适用 |
||
NS |
SET_SSV |
REQ |
第 18.47 节 |
|
I |
TEST_STATEID |
REQ |
第 18.48 节 |
|
VERIFY |
REQ |
第 18.31 节 |
||
NS* |
WANT_DELEGATION |
OPT |
FDELG (OPT) |
第 18.49 节 |
WRITE |
REQ |
第 18.32 节 |
回调操作¶
实现状态 |
操作 |
REQ、REC、OPT 或 NMI |
功能(REQ、REC 或 OPT) |
定义 |
---|---|---|---|---|
CB_GETATTR |
OPT |
FDELG (REQ) |
第 20.1 节 |
|
I |
CB_LAYOUTRECALL |
OPT |
pNFS (REQ) |
第 20.3 节 |
NS* |
CB_NOTIFY |
OPT |
DDELG (REQ) |
第 20.4 节 |
NS* |
CB_NOTIFY_DEVICEID |
OPT |
pNFS (OPT) |
第 20.12 节 |
NS* |
CB_NOTIFY_LOCK |
OPT |
第 20.11 节 |
|
NS* |
CB_PUSH_DELEG |
OPT |
FDELG (OPT) |
第 20.5 节 |
CB_RECALL |
OPT |
FDELG, |
第 20.2 节 |
|
DDELG, pNFS |
||||
(REQ) |
||||
NS* |
CB_RECALL_ANY |
OPT |
FDELG, |
第 20.6 节 |
DDELG, pNFS |
||||
(REQ) |
||||
NS |
CB_RECALL_SLOT |
REQ |
第 20.8 节 |
|
NS* |
CB_RECALLABLE_OBJ_AVAIL |
OPT |
DDELG, pNFS |
第 20.7 节 |
(REQ) |
||||
I |
CB_SEQUENCE |
OPT |
FDELG, |
第 20.9 节 |
DDELG, pNFS |
||||
(REQ) |
||||
NS* |
CB_WANTS_CANCELLED |
OPT |
FDELG, |
第 20.10 节 |
DDELG, pNFS |
||||
(REQ) |
实现说明:¶
- SSV
规范声称这是强制性的,但实际上我们不知道任何实现,所以我们暂时忽略它。 服务器在 EXCHANGE_ID 上返回 NFS4ERR_ENCR_ALG_UNSUPP,这应该是面向未来的。
- 在 backchannel 上的 GSS
同样,理论上是必需的,但没有被广泛实现(特别是,当前的 Linux 客户端没有请求它)。我们在 CREATE_SESSION 上返回 NFS4ERR_ENCR_ALG_UNSUPP。
- DELEGPURGE
仅对于支持 CLAIM_DELEGATE_PREV 和/或 CLAIM_DELEG_PREV_FH 的服务器是强制性的(这允许客户端保留在客户端重新启动后仍然存在的委托)。因此,我们现在不需要实现它。
- EXCHANGE_ID
实现 id 被忽略
- CREATE_SESSION
backchannel 属性被忽略
- SEQUENCE
不支持动态槽表重新协商(可选)
- 非标准复合限制
不支持需要 ca_maxrequestsize 请求和 ca_maxresponsesize 回复的会话前向通道 RPC 复合,因此我们可能无法兑现在 CREATE_SESSION 前向通道协商中做出的承诺。
另请参阅 http://wiki.linux-nfs.org/wiki/index.php/Server_4.0_and_4.1_issues。