failed, reason given by server(失败,服务器给出的原因)Permission denied(权限被拒绝)
RPC: Program Not Registered(RPC:程序未注册):(或其他“RPC”错误)
这意味着客户端未检测到服务器上正在运行的NFS。这可能是出于几个原因。
首先,通过在服务器上键入rpcinfo -p来检查NFS是否实际在服务器上运行。您应该看到类似以下内容
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100011 1 udp 749 rquotad 100011 2 udp 749 rquotad 100005 1 udp 759 mountd 100005 1 tcp 761 mountd 100005 2 udp 764 mountd 100005 2 tcp 766 mountd 100005 3 udp 769 mountd 100005 3 tcp 771 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 300019 1 tcp 830 amd 300019 1 udp 831 amd 100024 1 udp 944 status 100024 1 tcp 946 status 100021 1 udp 1042 nlockmgr 100021 3 udp 1042 nlockmgr 100021 4 udp 1042 nlockmgr 100021 1 tcp 1629 nlockmgr 100021 3 tcp 1629 nlockmgr 100021 4 tcp 1629 nlockmgr |
如果您至少没有看到portmapper、nfs和mountd,则需要重新启动NFS。 如果您无法成功重新启动,请继续症状9。
现在,检查以确保您可以从客户端看到它。 在客户端上,键入rpcinfo -p server,其中server是服务器的DNS名称或IP地址。
如果您得到一个列表,请确保支持您尝试执行的挂载类型。 例如,如果您尝试使用版本3 NFS挂载,请确保已列出版本3; 如果您尝试通过TCP使用NFS挂载,请确保已注册。 (某些非Linux客户端默认为TCP)。 键入man rpcinfo以获取有关如何读取输出的更多详细信息。 如果未列出您尝试执行的挂载类型,请尝试其他挂载类型。
如果您收到错误No Remote Programs Registered(未注册远程程序),则需要检查服务器上的/etc/hosts.allow和/etc/hosts.deny文件,并确保您的客户端实际上被允许访问。 同样,如果条目显示正确,请检查/etc/hosts(或您的DNS服务器),并确保机器已正确列出,并确保您可以从客户端ping服务器。 另请检查系统上的错误日志以获取有用的消息:来自错误/etc/hosts.allow条目的身份验证错误通常会出现在/var/log/messages中,但可能会出现在其他位置,具体取决于您的系统日志的设置方式。 的手册页syslog可以帮助您弄清楚日志的设置方式。 最后,当两台机器之间的路由不对称时,某些较旧的操作系统可能会出现异常行为。 尝试从客户端键入tracepath [server],看看输出中是否出现“不对称”一词。 如果是这样,则可能会导致数据包丢失。 但是,不对称路由通常在最近的Linux发行版上不是问题。
如果您收到错误Remote system error - No route to host(远程系统错误 - 没有到主机的路由),但是您可以正确ping服务器,那么您就是过度热情的防火墙的受害者。 检查可能已设置的任何防火墙,无论是在服务器上还是在客户端和服务器之间的任何路由器上。 查看ipchains、netfilter和ipfwadm的手册页,以及IPChains-HOWTO和Firewall-HOWTO以获得帮助。
第二个问题与用户名映射有关,并且根据您是以root用户身份还是以非root用户身份尝试执行此操作而有所不同。
如果您是root用户,则您可能没有使用no_root_squash选项进行导出; 请在服务器上检查/proc/fs/nfs/exports或/var/lib/nfs/xtab,并确保已列出该选项。 总的来说,能够以root用户身份写入NFS服务器是一个坏主意,除非您有紧急需要 - 这就是为什么Linux NFS默认情况下会阻止它。 有关详细信息,请参阅第6节。
如果您有root权限压缩,则要保留它,并且您只是想让root用户对文件具有与用户nobody相同的权限,那么请记住,服务器确定root用户映射到的uid。 默认情况下,服务器使用/etc/passwd文件中的nobody的UID和GID,但是也可以使用anonuid和anongid选项覆盖/etc/exports文件。 确保客户端和服务器就nobody映射到的UID达成一致。
Jan 7 09:15:29 server kernel: fh_verify: mail/guest permission failure, acc=4, error=13 Jan 7 09:23:51 server kernel: fh_verify: ekonomi/test permission failure, acc=4, error=13 |
kernel: nfs: server server.domain.name not responding, still trying kernel: nfs: task 10754 can't get a request slot kernel: nfs: server server.domain.name OK |
“can't get a request slot”消息表示客户端RPC代码检测到大量超时(可能是由于网络拥塞,也可能是由于服务器过载),并且正在限制并发的未完成请求数,以尝试减轻负载。 这些消息的原因基本上是性能迟缓。 有关详细信息,请参阅第5节。
挂载后,客户端上出现以下消息
nfs warning: mount version older than kernel |
它的意思很明确:您应该升级您的挂载包和/或am-utils。(如果由于某些原因升级是一个问题,您可能可以通过重新编译它们来解决问题,以便在编译时识别较新的内核功能)。
启动/关闭日志中出现lockd的错误
您可能会在启动日志中看到以下类型的消息:
nfslock: rpc.lockd startup failed |
这些消息是无害的。 旧版本的 rpc.lockd 需要手动启动,但新版本由 nfsd 自动启动。 许多默认启动脚本仍然尝试手动启动 lockd,以防需要。 如果您希望这些消息消失,您可以修改您的启动脚本。
以下消息出现在日志中:
kmem_create: forcing size word alignment - nfs_fh |
这是由于文件句柄是 16 位,而不是 32 位的倍数,这会让内核不满。 这是无害的。
/etc/exports对空格非常敏感 - 因此以下语句并不相同:
/export/dir hostname(rw,no_root_squash) /export/dir hostname (rw,no_root_squash) |
像 ls 这样的简单命令可以工作,但是任何传输大量信息的命令都会导致挂载点锁定。
如果您在服务器和/或客户端上启用了 ipchains,并且您不允许分段数据包通过链,则会发生这种情况。 允许来自远程主机的片段,您就可以再次正常工作。 有关如何执行此操作的详细信息,请参阅 第 6.4 节。
您可能使用了更大的rsize和wsize挂载选项,服务器不支持。 尝试将rsize和wsize降低到 1024,看看问题是否消失。 如果是这样,那么慢慢地将它们增加到一个更合理的值。