NFS客户端,ZFS服务器ZoL:cat to changed file not found

自从我们的客户从Ubuntu 12.04升级到Ubuntu 14.04后,我们遇到了麻烦。

行为:

在客户端AI上更改nfs共享上的现有文件foo。 在客户端BI上做一个猫富。

第一次安装后,它的工作。 猫显示foo的内容。 但是,如果我再次更改客户端A上的foo,并在BI上执行cat获取错误:cat:foo:No such file or directory

对B做一个ls解决这个问题, cat foo再次显示新的内容。 但是,如果我再次更改客户端A上的foo,客户端B上的猫将无法工作。

分析:

如果B上的程序首先调用“stat”,则一切正常。 但是如果像猫这样的程序直接使用系统调用打开它不会find文件!

使用tcpdump和wireshark,我可以看到Ubuntu 12.04使用正确的(更新后的)文件句柄在“PUTFH”下的NFS分区中调用,但是在14.04中,文件句柄是错误的(等同于在系统A上更改之前的旧文件句柄)。

现在非常有趣的部分:如果我在服务器站点上的nfs共享驻留在ext4文件系统上,并通过/ etc / exports共享,则nfs服务器将返回错误代码NFS4ERR_STALE。 客户端(B)会用正确的文件句柄做第二个请求,一切工作正常。 甚至在14.04。

如果服务器站点上的nfs共享驻留在ZFS文件系统(ZoL 0.6.4.1,CentOS 7和Ubuntu 14.04)上,并通过sharefs选项或/ etx / exports共享,则nfs服务器将回答错误代码NFS4ERR_NOENT。 客户端将失败。

问题:1.如何获得较新的客户端(14.04+),像在12.04上一样正确地更新文件句柄2.(或者)如何让服务器在ZFS文件系统上使用NFS4ERR_STALE进行回答? 或者,服务器应该如何按照规范来回答?

问候Joerg

在Linux上的ZFS中进行修补:

https://github.com/zfsonlinux/zfs/pull/3404

获得git版本并编译它:

git clone https://github.com/zfsonlinux/zfs.git