我有一台运行 Ubuntu Server 9.04 的无头计算机,我用它来在网络上共享文件,并把它用作私人网络服务器。时不时地,我会在同一个网络上的笔记本电脑上失去互联网连接。当我检查时,整个网络都瘫痪了,无法访问任何连接的设备。但是,如果我拔下(并重新启动)Ubuntu Server,整个网络就会恢复运行,就像什么都没发生过一样。这种情况每两个月发生一两次。
我一直在查看系统日志,但什么也没看到。系统日志突然在 20.45 停止,然后在 21.15 恢复,并显示内核启动消息,此时我按下了启动开关来启动计算机。
答案1
我曾见过网卡失去理智,通过发送无休止的帧或发送过多的低级以太网流量控制信号来堵塞廉价交换机。不幸的是,这些类型的 MAC/PHY 硬件错误可能会被主机的以太网驱动程序忽视,因此您不会在日志中看到任何内容。同样不幸的是,这两个缺陷在典型的嗅探器跟踪中都是不可见的,因为流量控制信号并不是真正的“以太网帧”,至于无休止的帧,嗅探器通常只捕获正常大小限制内的帧。
下次发生这种情况时,有趣的是看看是否只需断开 Ubuntu 服务器与网络的以太网链接即可解决问题,如果确实如此,那么重新插入以太网电缆时问题是否还会再次出现?
断开链接可能足以重置网卡的芯片来解决问题,但如果问题做重新插入以太网后,您可以尝试将 Ubuntu 服务器的以太网电缆直接插入嗅探器机器上的以太网(希望您手边有一台具有自动 MDI-X 或交叉电缆的机器)。然后您可以尝试捕获帧;如果您能够捕获帧,它们可能会为您提供有关 NIC、驱动程序、网络堆栈或某些使用网络的应用程序中存在错误的线索。
您还可以通过 Google 搜索其他拥有与您相同类型 NIC(或至少 NIC 芯片组)的人,看看其他人是否也遇到同样的问题。当然,确保您的卡拥有最新的驱动程序总是好的。
你的无头 Ubuntu 服务器是否配有显卡,或者你可以暂时安装一个吗?下次再发生这种情况时,你可以插入显示器、键盘和鼠标,看看你能学到什么就地在主机上。主机内核是否崩溃或完全冻结,或者只是其网络 I/O 被阻止?如果主机基本可用(网络除外),那么您可以在其上运行 tcpdump 或 Wireshark,并查看它认为它在网络上正在做什么。
请注意,您甚至不必使用图形控制台来检查 Ubuntu 服务器机箱上正在发生的事情。例如,如果您的机器有一个串行端口(或者您可以连接 USB 串行适配器),您可以将其配置为串行控制台终端端口,您可以将另一台机器连接到该端口并从 shell 中查看。或者,如果您有另一个可以放入该机箱的 NIC,您可以将另一个 NIC 转到单独的隔离网络,您可以使用该网络通过 SSH 或 VNC 进入机箱(理论上,只是一块 NIC 失去了理智,而不是整个 Linux 网络堆栈)。
我建议在你的服务器中安装更高质量的网卡,或者将你在家里使用的消费级交换机替换为企业级的交换机,以便设计用于划分网络端口。
更新:添加了一些诊断/故障排除的额外建议。但总的来说,如果这是我所考虑的 NIC 硬件故障模式,我怀疑除了设计该 NIC 芯片组的工程师之外,没有人会抱有调试它的希望。