调试 Solaris 网络问题

调试 Solaris 网络问题

我正在运行 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 -annetstat -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 下工作的博客和讨论。或者如果设备不受支持,则使用它来代替。因此,如果您还没有尝试搜索这些内容,您会想尝试一下。

参考: Solaris 硬件兼容性列表 (HCL)

相关内容