在 /etc/exports 中:
/tmp/test *(rw)
/dev/sda1
(ext4 文件系统)安装在/tmp/test
挂载 nfs 命令:
mount -o vers=3 $HOST:/tmp/test $NFS_DIR
(其中 HOST 是 nfs 服务器的 IP,NFS_DIR 是客户端上的本地挂载点)
第一次,nfs mount 成功。然后我卸载了。
然后我命令 /etc/exports(无 nfs 导出)中的条目,然后执行exportfs -r
。
然后我取消注释 /etc/exports 中的 /tmp/test 条目(与之前相同),然后exportfs -r
再次执行
然后我使用相同的命令挂载 nfs 共享。但这次挂载会挂起并超时。
然而,当我检查 nfs 日志时,我得到了这个:
/tmp and /tmp/test have same filehandle for *, using first
qword_eol: fflush failed: errno 22 (Invalid argument)
Cannot export /tmp, possibly unsupported filesystem or fsid= required"
关于 export /tmp 的错误是有道理的,因为它是 tmpfs。
但是为什么 /tmp 和 /tmp/test 具有相同的文件句柄?
我知道问题是由于 /tmp 和 /tmp/test 具有相同的文件句柄而引起的,因此 nfs 返回第一个文件句柄,即 /tmp。我想要导出的是 /tmp/test (ext4 fs),而不是 /tmp (tmpfs)。
重新启动 rpc.mountd 即可解决该问题。
- 为什么 /tmp /tmp/test 获得相同的文件句柄?
- 为什么重新启动 rpc.mountd 可以解决问题?
- 如何在不重新启动 rpc.mounts 的情况下解决此问题?
答案1
看来这是 nfs-utils 本身的 bug。这个 bug 在 1.3.3 版本中得到了修复。我也尝试使用 nfs-utls 1.3.2,但问题仍然存在。使用 nfs-utils 1.3.3 可以修复此问题。