在最近从 SLES 9.3 升级到 10.2 的机器上,我看到以下问题:
在升级之前,NFS 挂载(通过 yast 定义,即它出现在 中/etc/fstab
)正常工作。但是,在升级之后,它失败了。网络跟踪显示它正在通过 TCP 与 NFS 服务器建立初始连接(对于 portmapper RPC),但随后切换到 UDP 以进行后续 MOUNT 调用;由于 NFS 服务器不允许 UDP(有充分的理由,由于可能存在数据损坏问题,如 中所示nfs(5)
),连接将无法通过。
添加 TCP 选项(无论是在 fstab 中,还是在命令行等处)都没有效果。
在对此进行故障排除的过程中,我发现 /var/adm/messages 报告在引导期间发生以下情况:
Failed services in runlevel 3: network
(我应该注意,尽管有此错误消息,但显然至少启动了一些网络服务,因为该框可通过 SSH 访问。)
那么我的问题:
- 我应该看什么来确定服务启动失败的原因?
- 这确实会导致上述 NFS 的问题吗?
- 如果 (2) 的答案是否定的,那么关于寻找什么的任何建议?
编辑以添加与以下答案相关的一些信息。
事实证明,网络服务在启动时失败,因为其中一个接口(此框中有两个)使用 DHCP,而此时该接口尚不可用。所以我暂时禁用它,停止/重新启动网络服务和 NFS 客户端服务,但仍然得到相同的结果。
客户端没有防火墙。此外,客户端的 iptables -L 表明一切都被接受;/etc/hosts.allow 或 /etc/hosts.deny 中没有条目。
在 NFS 服务器端,没有任何变化。远程 nfsserver 确实在宣传它允许 TCP 和 UDP 用于所有 NFS 服务(尽管有一个 iptables 规则阻止 UDP)。
/etc/fstab 条目是非常基本的——在 yast 中设置它会得到什么:
x.x.x.x:/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 调用很简单:
mount /localdir
虽然我也尝试过各种选项,如 tcp、v3 等。
/etc/fstab 条目(因此挂载)和 rpcinfo -p 调用都使用 IP 地址,因此不涉及 DNS 解析问题。