在最近从SLES 9.3升级到10.2的盒子上,我看到以下问题:
在升级之前,NFS挂载(通过yast定义,即出现在/etc/fstab )工作正常。 但升级之后,这是失败的。 networking跟踪显示它正在通过TCP(用于portmapper RPC)与NFS服务器进行初始连接,但是随后为后续的MOUNT调用切换到UDP; 由于NFS服务器不允许UDP(有充分的理由,由于数据损坏的可能的问题,如nfs(5) ),连接将不会通过。
添加TCP选项(无论是在fstab还是在命令行等)都没有效果。
在排除故障的过程中,我发现/ var / adm / messages在启动过程中报告了以下内容:
Failed services in runlevel 3: network
(我应该注意,尽pipe有这个错误信息,但显然至less有一些networking服务已经启动,因为这个盒子可以通过SSH访问。)
我的问题是:
编辑添加一些与下面的答案有关的信息。
事实certificate,networking服务在启动时失败,因为其中一个接口(在这个盒子上有两个接口)使用DHCP,目前尚不可用。 所以我现在禁用了它,停止/重新启动了networking服务和NFS客户端服务,但是仍然得到相同的结果。
客户端没有防火墙。 另外,在客户端的iptables -L显示,一切都被接受; 并且/etc/hosts.allow或/etc/hosts.deny中没有条目。
在NFS服务器端,没有任何改变。 远程NFS服务器确实宣布它允许所有NFS服务的TCP和UDP(虽然有阻止UDP的iptables规则)。
/ etc / fstab条目是非常基本的 – 你从yast中设置它会得到什么:
xxxx:/volume /localdir nfs defaults 0 0
用于客户端的rpcinfo -p仅显示portmapper v2正在运行,同时通告TCP和UDP。 对于服务器,它显示了所有常用的服务:
program vers proto port 100000 2 tcp 111 portmapper 100000 2 udp 111 portmapper 100024 1 udp 4047 status 100024 1 tcp 4047 status 100011 1 udp 4049 rquotad 100021 1 udp 4045 nlockmgr 100021 3 udp 4045 nlockmgr 100021 4 udp 4045 nlockmgr 100021 1 tcp 4045 nlockmgr 100021 3 tcp 4045 nlockmgr 100021 4 tcp 4045 nlockmgr 100005 1 udp 4046 mountd 100005 1 tcp 4046 mountd 100005 2 udp 4046 mountd 100005 2 tcp 4046 mountd 100005 3 udp 4046 mountd 100005 3 tcp 4046 mountd 100003 2 udp 2049 nfs 100003 3 udp 2049 nfs 100003 2 tcp 2049 nfs 100003 3 tcp 2049 nfs
上面的/ etc / fstab条目的挂载调用很简单:
mount /localdir
虽然我也尝试了各种选项,如tcp,v3等
/ etc / fstab条目(因此挂载)和rpcinfo -p呼叫都使用IP地址,因此不涉及DNSparsing问题。
检查以确保/etc/hosts.deny不包含mountd条目,并检查hosts.allow ,原因类似。 对于它的价值,我通常清除hosts.deny并使用iptables来控制访问。
使用rpcinfo -p nfsserver来确保mountd确实宣传TCP – 有一个选项-n禁用TCP侦听,这个(在SuSE上的IIRC)很可能会在/etc/sysconfig/nfs或其他地方设置。
正如我理解你的问题,你可以做到以下几点:
rpcinfo到服务器 但不能在nfs客户端上从nfs服务器挂载文件系统,并且不会收到任何错误消息。
你的rpcinfo和mount调用有什么区别? 你在一个使用ip地址,在另一个使用fqdn? 你可以请发送两个命令与输出和返回码?
一些事情。 首先,你首先声明since the NFS server doesn't allow UDP ,然后在你的编辑中提到The remote nfsserver is indeed advertising that it allows both TCP and UDP for all of the NFS services 。 这似乎有点奇怪。 为什么服务器宣传不允许的东西?
其次,你是否尝试使用NFS版本2或版本3? 版本2仅支持UDP,而您需要版本3的TCP。 也许在安装选项中手动指定版本3将有所帮助? (vers = 3)如果默认为2,那么即使指定TCP也不会对你有好处。
当服务器不支持它时,我也遇到了尝试使用版本4的较新客户端的问题。 您的SLES升级可能会导致不同的默认版本。 所有更明确的指定它的理由。
为什么不在/ etc / fstab中发布条目呢?
service network restart手动启动服务,并查看您获得的消息。 那里应该有一些信息。 尝试明确设置的东西,看看你在哪里。 例如,在/ etc / fstab中:
xxxx:/vol /local nfs proto=tcp,port=2049,mountport=4046,nfsvers=3 0 0
这应该至less绕过portmapper,并明确地尝试连接到上面列出的TCP端口,并在debugging过程中更轻松地通过tcpdump跟踪每个通道。
作为参考,如果有其他人遇到这个问题,并希望得到答案:
我终于在这上面开了一张Novell的门票。 事实certificate,这是SLES 10.2中的一个已知错误(491140:mount忽略“nfs”的“proto =”),并且有一个补丁(util-linux-2.12r-35.35.2.x86_64.rpm) 。 安装完成后,安装程序按预期工作,所有请求都通过TCP进行。 (Novell的支持也告诉我,这是合并在SLES 10.3。)