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。