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