FreeBSD 上的 NFS V4 托管,客户端和服务器都可以安装,但文件系统上没有读取或写入,报告输入/输出错误

Posted

技术标签:

【中文标题】FreeBSD 上的 NFS V4 托管,客户端和服务器都可以安装,但文件系统上没有读取或写入,报告输入/输出错误【英文标题】:NFS V4 at FreeBSD hosted, both client and server, mounts OK but there is no read or write on the filesystem, reporting Input/output error 【发布时间】:2016-05-09 11:37:45 【问题描述】:

我已经成功安装并使用了 NFS 版本 4,其中包含 Solaris 服务器和 FreeBSD 客户端。 问题是在版本 4 中拥有 FreeBSD 服务器和 FreeBSD 客户端时。版本 3 运行良好。

我从 FreeBSD 4.5 版开始使用 FreeBSD NFS 服务器(当时有 IBM AiX 客户端)。

问题: 挂载正常,但 kerberos 缓存中没有出现任何主体,当尝试在已挂载的文件系统上读取或写入时出现错误:输入/输出错误

nfs/server-fqdn@REALM 和 nfs/client-fqdn@REALM 主体在 kerberos 服务器上创建并正确存储在双方的 keytab 文件中。

我使用上述方法从 KDC 为根的 kerberos 缓存发出 tgt 票证。

我正确启动服务: 文件 /etc/rc.conf

rpcbind_enable="YES"
gssd_enable="YES"
rpc_statd_enable="YES"
rpc_lockd_enable="YES"
mountd_enable="YES"
nfsuserd_enable="YES"
nfs_server_enable="YES"
nfsv4_server_enable="YES"

然后我启动服务 在客户端:rpcbind、gssd、nfsuserd、 在以上所有具有导出文件的服务器上:

V4: /marble/nfs   -sec=krb5:krb5i:krb5p -network 10.20.30.0 -mask 255.255.255.0

我安装:

# mount_nfs -o nfsv4 servername:/ /my/mounted/nfs
# 
# mkdir /my/mounted/nfs/e
# mkdir: /my/mounted/nfs/e: Input/output error
#

即使是 ls 命令也有相同的结果。 klist 不显示根缓存或任何其他缓存中的任何新主体。 我喜欢版本 3 的惊人性能,但需要 NFS4 的本地锁定文件功能。 第二个原因是安全。我需要 kerberised RPC 调用 (-sec=krbp)。

如果你们中的任何人使用 NFS 版本 4 的 FreeBSD 服务器实现了这一点,请对这个问题提供反馈,如果你这样做,我会很高兴。

【问题讨论】:

我在 FreeBSD 上都使用 V4 客户端/服务器,但没有 kerberos 身份验证。对于我来说,-mapall=1001:1001 就足够了。这可能无关紧要,但我在 V4: 行之前列出了共享(即 V3 的每个共享一行,然后所有 V3 共享的父文件夹的 V4 配置一行)。您是否可以先尝试使其在没有 kerberos 的情况下工作?例如。 V4: /marble/ -sec=sys 192.168.2.200 那么,如果可行,请尝试添加 Kerberos? 非常感谢您抽出宝贵时间回复我的问题。 非常感谢您抽出宝贵时间回复我的问题。不幸的是,即使在导出文件中使用 -sec=sys 相同的结果 :( root@lucy # mount -o nfsv4 lynx:/ /root/ela/ root@lucy # mkdir /root/ela/a mkdir: /root/ela/a: Input/output error 但感谢您的回复。我不想使用 Solaris(工作正常),因为用户使用 NIS 映射,Solaris 上的 NIS 很糟糕,ldap应该这样做,但这种情况适用于使用 NIS 的小型网络。FreeBSD 的 NIS 非常棒。谢谢 【参考方案1】:

注释不好给出代码示例。这是适用于我的 FreeBSD 客户端和 FreeBSD 服务器的设置。我不使用 Kerberos,但如果你让它使用这个最小配置,那么你可以在之后添加 Kerberos(我相信)。

服务器rc.conf:

nfs_server_enable="YES"
nfs_server_flags="-u -t -n 4"
nfsv4_server_enable="YES"
nfsuserd_enable="YES"
mountd_flags="-r"

服务器/etc/exports:

/parent/path1 -mapall=1001:1001 192.168.2.200
/parent/path2 -mapall=1001:1001 192.168.2.200
... (more shares)
V4: /parent/ -sec=sys 192.168.2.200

客户rc.conf:

nfs_client_enable="YES"
nfs_client_flags="-n 4"
rpc_lockd_enable="YES"
rpc_statd_enable="YES"

客户fstab:

192.168.2.100:/path1/  /mnt/path1/  nfs rw,bg,late,failok,nfsv4  0 0
192.168.2.100:/path2/  /mnt/path2/  nfs rw,bg,late,failok,nfsv4  0 0
... (more shares)

如您所见,客户端仅尝试挂载服务器上V4 行中指定的/parent/ 路径之后的内容。 192.168.2.100 是服务器 IP,192.168.2.200 是客户端 IP。此设置仅允许一个客户端连接到服务器。

我希望我没有错过任何东西。顺便说一句,请在 SuperUser 或 ServerFault 而不是 *** 上提出这样的问题。我很惊讶这个问题还没有因此而结束;)

【讨论】:

鄙视我的设置重试失败,即使安全性被降级为“sys”,我想再次感谢您的回答。我不知道我做错了什么。感谢网站提示;) 不客气,你可以随时尝试forums.freebsd.org,以防我遗漏了任何明显的东西。

以上是关于FreeBSD 上的 NFS V4 托管,客户端和服务器都可以安装,但文件系统上没有读取或写入,报告输入/输出错误的主要内容,如果未能解决你的问题,请参考以下文章

NFS介绍

NFS应用及搭建

查看客户端nfs是v3还是v4 solaris

NFS共享存储服务

NFS

NFS