作者tinlans ( )
看板FreeBSD
标题[问题] Gentoo Linux 透过 NFS mount FreeBSD partition 的问题
时间Sun Mar 29 19:41:11 2009
NFS client 是 Gentoo Linux,
kernel 是 2.6.29-gentoo,
跟 NFS 相关的套件装的是 nfs-utils 1.1.5,
系统有装 iptables 不过 default policy 都是 pass,
只是用来搭 sshguard 挡暴力 try 密码的东西而已;
该开的 RPC service 和 portmap 这些东西都有开。
NFS server 是 FreeBSD 7.1-STABLE (目前已升到 7.2-PRELEASE 做测试),
有使用 pf 搭 sshguard,
其余都是 pass,
hosts.allow 第一条 rule 就是 ALL : ALL : allow,
该开的 RPC service 都有打开。
目前 Linux 这端无论使用 autofs 或是写死在 /etc/fstab,
过了一段时间之後跟 FreeBSD 的 NFS 连线都会 hang 住,
观察发现无论用哪种方法 Linux 这端都会在闲置一段时间後切断 NFS 的连线,
也就是会把 tcp socket 给 shutdown 掉。
问题就在这个 shutdown 的过程有时候会成功有时候却不成功,
在使用 tcpdump 观察後发现会成功的流程是:
1. Linux (client) -----FIN----> FreeBSD (server)
2. Linux (client) <----ACK----- FreeBSD (server)
3. Linux (client) <----FIN----- FreeBSD (server)
4. Linux (client) -----ACK----> FreeBSD (server)
会 hang 住的情况就是只有进行完 1. 和 2.,
FreeBSD 这端并没有主动发送 FIN 给 Linux 这端,
导致 Linux 这端的 tcp socket 进入 FIN_WAIT2 状态:
tcp 0 0 linux:789 freebsd:nfs FIN_WAIT2
而 FreeBSD 那端对应的 nfsd 也会停在 CLOSE_WAIT 状态。
Google 查过各式各样的关键字不过都没有看到有效的解法,
比方说是在 mount option 里加入 rsize=1024 和 wsize=1024 也是无效,
在 FreeBSD 里把 net.inet.tcp.keepidle 改成一分钟也是没有改善,
打死它都不肯回传一个 FIN,
不晓得有没有人遇过相似的问题并解决的呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.160.107.89