我在 Sun Fire x4140 上有一个物理 SLES 11 SP2 服务器,它在重新启动时给我带来网络问题。NIC 是板载的。
引导期间网络似乎成功,但网络服务(如 nfs)却严重失败。这是因为 eth0 和 eth1 都接收相同的配置并且都被 ifup-ed。一旦一切都超时并且我在控制台,ifconfig 显示 eth0 和 eth1 已启动并使用相同的 IP 运行。尝试 ping 该子网中的任何内容都失败。重新启动网络服务可解决此问题。
根据 MAC 地址,eth0 是应该配置为主网卡的正确网卡。
问题:是什么导致 eth1 使用与 eth0 相同的配置?
我没有为 eth1 设置配置脚本:
banjer@harp:~> ls -la /etc/sysconfig/network/
total 104
drwxr-xr-x 6 root root 4096 Jun 11 12:21 .
drwxr-xr-x 6 root root 4096 Apr 10 09:46 ..
-rw-r--r-- 1 root root 13916 Apr 10 09:32 config
-rw-r--r-- 1 root root 9952 Apr 10 09:36 dhcp
-rw------- 1 root root 180 Jun 11 12:21 ifcfg-eth0
-rw------- 1 root root 180 Jun 11 12:21 ifcfg-eth3
-rw------- 1 root root 172 Feb 1 08:32 ifcfg-lo
-rw-r--r-- 1 root root 29333 Feb 1 08:32 ifcfg.template
drwxr-xr-x 2 root root 4096 Apr 10 09:32 if-down.d
-rw-r--r-- 1 root root 239 Feb 1 08:32 ifroute-lo
drwxr-xr-x 2 root root 4096 Apr 10 09:33 if-up.d
drwx------ 2 root root 4096 May 5 2010 providers
-rw-r--r-- 1 root root 25 Nov 16 2010 routes
drwxr-xr-x 2 root root 4096 Apr 10 09:36 scripts
附带说明一下,eth3 还配置了不同子网中的 IP,但这没有造成任何问题。仅供参考,正在使用的内核模块是forcedeth
.
banjer@harp:~> sudo cat /etc/sysconfig/network/ifcfg-eth0
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='172.21.64.25/20'
MTU=''
NAME='MCP55 Ethernet'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
ONBOOT="yes"
这是 eth3,以备不时之需:
banjer@harp:~> sudo cat /etc/sysconfig/network/ifcfg-eth3
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR='172.11.200.4/24'
MTU=''
NAME='MCP55 Ethernet'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='auto'
USERCONTROL='no'
ONBOOT="yes"
也许与 udev 有关? 70-persistent-net-rules
对我来说看起来不错,但我可能不完全理解。
banjer@harp:~> cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# PCI device 0x10de:0x0373 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:4f:8d:85:4c", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth2"
# PCI device 0x10de:0x0373 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:4f:8d:85:4a", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
# PCI device 0x10de:0x0373 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:4f:8d:85:4b", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"
# PCI device 0x10de:0x0373 (forcedeth)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:18:4f:8d:85:4d", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth3"
# PCI device 0x1077:0x3032 (qla3xxx)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:c1:dd:0e:34:6c", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth4"
关于什么会导致这种情况的任何其他想法?
更新 1
根据建议,我为所有其他未使用的 NIC(eth1 和 eth2)提供了配置,例如这里是 eth1:
banjer@harp:/etc/sysconfig/network> sudo cat ifcfg-eth1
BOOTPROTO='static'
BROADCAST=''
ETHTOOL_OPTIONS=''
IPADDR=''
MTU=''
NAME='MCP55 Ethernet'
NETMASK='255.255.255.0'
NETWORK=''
REMOTE_IPADDR=''
STARTMODE='off'
ONBOOT='no'
USERCONTROL='no'
并将具体添加HWADDR
到实际插入的 NIC(eth0 和 eth3)。在测试重启期间,我看到网络按预期出现,并且 eth1 和 eth2 按预期显示“已跳过”。然而,eth1 仍然会随着 eth0 的配置一起出现。
我设置udev_log="debug"
了/etc/udev/udev.conf
,现在我在/var/log/messages
. 这是 的粘贴,grep eth1 /var/log/messages
但与其他 eth 的 grep 相比,我看不出有什么突出之处。
更新 2
认为这是一个 udev 问题,我进行了更改/lib/udev/rules.d/75-persistent-net-generator.rules
并做了rm /etc/udev/rules.d/70-persistent-net.rules
.
# device name whitelist
#KERNEL!="eth*|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", GOTO="persistent_net_generator_end"
KERNEL!="eth[03]|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", GOTO="persistent_net_generator_end"
重新启动后,这正是我想要的(为 eth0、eth3 生成规则),但它没有解决问题。eth1 仍然被提出。有没有办法调试整个启动过程,例如strace?我不知道这是从哪里来的。
作为创可贴,我添加了一个 rc 脚本以在引导过程的后期重新启动网络。
你说你没有 eth1 的配置脚本。为什么不?是否应该配置?如果是,那么它应该拥有什么 IP。静态分配或DHCP?
顺便说一句,这些是您需要考虑的问题,不一定要在这里回答。
尝试为 eth1 创建一个配置,即使它只是一个带有ONBOOT="no"的最小配置,如果没有配置文件,suse 可能会做一些疯狂的默认自动魔术废话。
使配置文件更具体应该有所帮助。将以下指令添加到您的 ifcfg-ethX 文件中:
冲洗、起泡、重复 eth3 等
您也可以(应该?)为 eth1 等添加配置文件:
尝试添加:
到
/etc/sysconfig/network-scripts/ifcfg-eth0
。您可能还想创建一个ifcfg-eth1
包含如下内容的:至少在 RHEL 上,它只会调出没有 IP 配置的界面,并且网络初始化脚本在 SuSE 11 上看起来很相似。关于 SuSE 网络配置的另一个解决方案是用类似的
70-persistent-net.rules
东西清除:这将清除 udev 规则并告诉 init 使用 ifcfg-eth* 文件进行接口识别。
我无法确定两个 NIC 在启动时配置相同的 IP 和子网的谜团背后的原因。
然而,该问题的最终解决方案是将电缆从第一个 NIC 移至第二个 NIC,即从 eth0 移至 eth1。然后我配置了 ifcfg-eth1 和“未配置的”ifcfg-eth0。现在我的网络和网络相关服务完美运行。
我感觉它可能是
forcedeth
模块或 BIOS 问题,但我不会再花时间在它上面,因为这些天我们正在使用完全不同的硬件构建服务器并从 SLES 迁移到 CentOS,所以我不要指望问题再次出现。