如何将 persistent-net-generator.rules 更改为依赖于 PCI 总线而不是基于 MAC?

如何将 persistent-net-generator.rules 更改为依赖于 PCI 总线而不是基于 MAC?

我在 VMware 上使用 CentOS 6.2。我经常需要克隆我的系统。每次我克隆它时,它都会向 70-persistent-net.rules 文件添加一条新规则,如下所示。

SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:0c:f1:5e", ATTR{type}=="1", KERNEL=="eth*", NAME="eth1"

我的系统中从来没有多个接口,所以这真的很烦人。我知道有办法将规则更改为依赖于 PCI 总线而不是依赖于 MAC,因为我已经这样做过一次,但我找不到任何地方如何做到这一点。

我理解实施 udev 规则的原因。这在物理系统上非常有意义,但在虚拟机上却很麻烦。请帮忙。

答案1

这应该足以满足您的要求:

DRIVERS=="?*", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

答案2

通过 PCI 地址来识别设备。例如:

SUBSYSTEM=="net", BUS=="PCI", ID=="0000:04:00.0", ...

答案3

在 Virtualbox 上运行 CentOS 6.5 我实现了如下效果:

1)抑制/lib/udev/rules.d/75-persistent-net-generator.rules避免覆盖 /etc/udev/rules.d/70-persistent-net.rules - 只需创建一个空的/etc/udev/rules.d/75-persistent-net-generator.rules

2)编辑/etc/udev/rules.d/70-persistent-net.rules

# Map ethernet devices according to kernel enumeration
# this should match the adaptor numbering in the virtualbox console 
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{type}=="1", KERNEL=="eth0*", NAME="eth0"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{type}=="1", KERNEL=="eth1*", NAME="eth1"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{type}=="1", KERNEL=="eth2*", NAME="eth2"
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{type}=="1", KERNEL=="eth3*", NAME="eth3"

3)编辑/etc/sysconfig/网络脚本/ifcfg-eth[0-3]根据需要,删除任何无意义的 HWADDR 或 MACADDRESS。

它并不完美,因为如果您在执行克隆之前对 VirtualBox 设置进行其他设备更改,内核枚举顺序可能会改变,而且很可能会改变 - 并且内核检测并不完全遵循 Virtualbox 适配器顺序(在我的系统中,它似乎是相反的)。但它的表现似乎确实一致,这至少应该“足够好”。

更多解释和智慧在这里:

答案4

我也遇到了这个问题。克隆 centos 6 客户机后使用此 cmd

sed -i '/eth0/d' /etc/udev/rules.d/70-persistent-net.rules
sed -i s/eth1/eth0/g /etc/udev/rules.d/70-persistent-net.rules

请在以下行中更改你的 IP 和主机名

sed -i s/192.168.42.100/192.168.42.101/g /etc/sysconfig/network-scripts/ifcfg-eth0
sed -i s/node01/node02/g /etc/sysconfig/network

相关内容