我正在运行 Solaris 11 x86 文件服务器。文件服务器部分是ZFS + Samba。现在已经运行了三四年了,没有出现什么大问题。
Samba 共享一开始对网络上的其他 PC 可见。我可以可靠地从文件服务器读取数据。我可以 ping 通服务器。我可以从服务器 ping 其他 PC。我可以从服务器 ping 默认网关。
从几周前开始,当我尝试写入文件服务器时,共享在几秒钟后(或者可能在几百兆字节后)消失。问题显然出在网络上。不过,服务器还活着。如果我连接鼠标、键盘和显示器,我仍然可以与服务器交互。
问题似乎不在于硬盘或 Samba。尝试过:
- zpool状态
- FMDM 故障
- svcadm 重新启动 samba
没有错误。无故障设备。桑巴似乎不是问题。
问题发生后,我无法再从文件服务器 ping 默认网关。我无法再从文件服务器 ping 其他计算机。我无法从其他机器 ping 服务器。
网络调试步骤
我试过了:
- ifconfig skge0 down/ifconfig skge0 up。
- 重新启动 Solaris 盒所插入的交换机
- 重新启动 Solaris 盒所插入的路由器
Solaris 机器似乎认为它仍然连接到网络。重置 Solaris 盒子(init 6)将使共享恢复,但仅限于我尝试再次写入它们。
我尝试过 netstat -rn问题发生之前和之后。一切看起来都很正常。下面是“之后”:
Routing Table: IPv4
Destination Gateway Flags Ref Use Interface
-------------------- -------------------- ----- ----- ---------- ---------
default 10.1.10.1 UG 27 456 skge0
10.1.10.0 10.1.10.254 U 6 2536350 skge0
127.0.0.1 127.0.0.1 UH 2 252 lo0
Routing Table: IPv6
Destination/Mask Gateway Flags Ref Use If
--------------------------- --------------------------- ----- --- ------- -----
::1 ::1 UH 2 4 lo0
第一个条目的“参考”列中的“之前”有 27,而不是 17。 “之后”的“使用”数字略高 - 可能是正常的。
我尝试过 netstat -an问题发生之前和之后也是如此。这个可能有更多线索。在问题全部消失之前存在大量 UDP 连接。
前:
UDP: IPv4
Local Address Remote Address State
-------------------- -------------------- ----------
--truncated entries that are present in both before/after--
10.1.10.254.40504 10.1.10.1.53 Connected
10.1.10.254.39900 10.1.10.1.53 Connected
10.1.10.254.40129 10.1.10.1.53 Connected
10.1.10.254.37892 10.1.10.1.53 Connected
10.1.10.254.61658 10.1.10.1.53 Connected
之后,这五个条目消失了,但出现了一个新条目:
UDP: IPv4
Local Address Remote Address State
-------------------- -------------------- ----------
--Again, truncated--
10.1.10.254.53920 10.1.10.1.53 Connected
我找不到任何有关端口 53920 用途的信息。在网关方面,端口 53 似乎用于 DNS - 不确定这是否是一个线索。 似乎没有多大帮助
在 TCP 部分的下方,有一大堆“已建立”的整体前要么已经消失了后或者它们已转换为 TIME_WAIT 或 FIN_WAIT_1。这似乎与我已经知道的相符。
只有一个对我用来导致网络崩溃的计算机 IP 的引用:
前:
TCP: IPv4
Local Address Remote Address Swind Send-Q Rwind Recv-Q State
-------------------- -------------------- ----- ------ ----- ------ -----------
10.1.10.254.445 10.1.10.132.53487 64512 0 128480 0 ESTABLISHED
后:
TCP: IPv4
Local Address Remote Address Swind Send-Q Rwind Recv-Q State
-------------------- -------------------- ----- ------ ----- ------ -----------
10.1.10.254.445 10.1.10.132.53487 64256 0 128480 0 ESTABLISHED
唯一的区别在于 Swind(发送窗口?)列。奇怪的是,该状态仍然被列为已建立状态。
我又做了一次 netstat -an 实验
前后唯一的区别与我用来使共享崩溃的 PC 的 IP 地址有关。
前:
TCP: IPv4
Local Address Remote Address Swind Send-Q Rwind Recv-Q State
-------------------- -------------------- ----- ------ ----- ------ -----------
10.1.10.254.445 10.1.10.132.53613 380416 0 128480 0 ESTABLISHED
后:
10.1.10.254.445 10.1.10.132.53613 65280 0 128480 0 ESTABLISHED
同样,唯一的区别在于 Swind 列 - 数字变小了。
我已经到达了我所知道的尽头关于这种事情。 netstat 似乎告诉我我已经知道的事情。除了购买另一张网卡并尝试一下,或者重新安装 Solaris 之外,我不知道。有人可以告诉我下一步吗?
编辑
我正在购买另一张网卡并尝试一下。大约需要一周时间才能到达这里,所以在此期间我会继续研究这个问题。
答案1
Netstat -an
、 netstat -rn
、 和lsof
(在问题之前和期间)可能会提供线索。 (它们是否显示太多开放连接?)。tcpdump
也可能有帮助:在建立连接之前启动它,看看连接开始消失时(以及超时前几分钟)会发生什么。
并查看 NFS 选项是否为非默认选项并且可能会产生影响:
例如,尝试使用软设置而不是硬设置。
删除所有“非核心”选项(核心是建立 NFS 所需的选项),然后将它们一点一点地放回去,以查看哪些选项导致了问题。
抱歉,我目前无法访问 Solaris 来提供准确的设置。包含“Solaris”和“NFS”关键字的网络搜索将帮助您找到它们。
答案2
我观察到,在导出的 ZFS 数据集上运行 Samba 可能会导致性能非常差,包括终止服务器或客户端上的交互式会话。但是,使用 Solaris 11(及更高版本)内置 CIFS 服务器是一种很多更好的解决方案 - 然后你在内核中而不是在用户空间中执行协议位。
我忘记了要使用的确切语法,您应该阅读 tfm for zfs(1m) 并搜索“smb”。另请查看 zfs_share(1m)。
答案3
您一直在维护 Solaris 11 系统吗?pkg info entire
和显示什么pkg publisher
?
我还看到您使用 skge 界面进行记录。我不知道,所以我查了一下。在 Solaris (SPARC) 存储库中找不到它的 pkg。但确实发现谷歌找到了人们试图让网络驱动程序在 Solaris 下工作的博客和讨论。或者如果设备不受支持,则使用它来代替。因此,如果您还没有尝试搜索这些内容,您会想尝试一下。