设备上有2个网卡,虽然留意了,在设置也区别了eth0和eth1,直到设置eth0无效时才发现有了问题。
这个问题其实也是我们自己搞出来的。因为我们的项目使用了硬盘,使用时会将一个设备上的硬盘直接拿到另一个设备上使用,当原来的设备的系统已经有了网卡的配置后,再换一个新硬件平台上(虽然还是同一个硬盘),这些网卡名称就会改变。
比如:
# dmesg | grep udev
[ 5.005449] systemd-udevd[1174]: starting version 204
[ 5.598720] systemd-udevd[1648]: renamed network interface eth0 to eth2
[ 6.610114] systemd-udevd[1650]: renamed network interface eth1 to eth3
这个问题网上有很多讨论,我也摸索了好久才解决,但这个解决,不知算不算彻底,至少,使用到目前为止,网卡名称始终为eth0和eth1。
Linux中,网卡设备和mac地址等信息在/etc/udev/rules.d/70-persistent-net.rules文件中,如果这个文件已经存在一个eth0,若下次在不同的设备上启动,将添加新的eth1——而不管eth0有没有效。
下面是这个文件的示例:
This file maintains persistent names for network interfaces.
# See udev(7) for syntax.
#
# Entries are automatically added by the 75-persistent-net-generator.rules
# file; however you are also free to add your own entries.
# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="4c:41:54:45:4c:45", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
正因为如此,我之前我用debootstrap制作根文件系统时,就必须将这个文件清空,以免出现网卡设备名称变化的问题。
解决:
1、关机时把/etc/udev/rules.d/70-persistent-net.rules清空(以免下次拷贝系统时出现问题)。
启动时把/etc/udev/rules.d/70-persistent-net.rules清空。
清空命令:echo "" > /etc/udev/rules.d/70-persistent-net.rules
2、在/lib/udev/write_net_rules文件中,把RULES_FIL路径改为其它不存在的目录:
RULES_FILE='/etc/udev/not_rules.d/70-persistent-net.rules'
3、在/lib/udev/rules.d/75-persistent-net-generator.rules文件中,注释掉下面内容:
# device name whitelist
#KERNEL!="eth*|ath*|wlan*[0-9]|msh*|ra*|sta*|ctc*|lcs*|hsi*", \
# GOTO="persistent_net_generator_end"
其中第2点存在疑问,现在的设备不进行此操作也正常。因为是很久前解决的,现在忘了,就不改了。
以上仅为个人的解决方法,无权威性,无太多理论依据。
本文永久更新地址://m.ajphoenix.com/linux/21158.html