我有一个 Centos 7 系统,我已在其中禁用新的网络命名系统并恢复到旧系统(eth0、eth1 等)。我这样做是因为我在 RDO Openstack 设置中使用它,并且这需要在几个不同的主机上使用相同的以太网设备名称。其中一些主机是 kvm 下的虚拟机并使用 eth 命名系统。
从此以后,每隔几次重启,我的以太网设备就会发生翻转。
在健康的靴子上,我看到
[ 11.172339] tg3 0000:03:00.0 eth0: Tigon3 [partno(BCM95723) rev 5784100] (PCI Express) MAC 地址 68:b5:99:72:d8:02
[ 11.269599] e1000e 0000:02:00.0 eth1: (PCI Express:2.5GT/s:Width x1) 68:05:ca:04:90:16
在“坏启动”的情况下,它们将被翻转,e1000e 将是 eth0,而 tg3 将是 eth1。
到目前为止我已经完成了以下工作:
- 在 /etc/default/grub 中的 GRUB_CMDLINE_LINUX 行中添加了“net.ifnames=0 biosdevname=0”
- grub2-mkconfig -o /boot/grub2/grub.cfg
- 创建 /etc/udev/rules.d/70-persistent-net.rules
运行 grub2-mkconfig 后,我在 /boot/grub2/grub.cfg 中看到以下内容(这意味着我上面的更改正在生效)
linux16 /boot/vmlinuz-3.10.0-123.el7.x86_64 root=UUID=eabee081-85f8-4f33-b72a-fbbdc575e010 ro vconsole.keymap=uk crashkernel=auto vconsole.font=latarcyrheb-sun16 rhgb net.ifnames=0 biosdevname=0 quiet
70-persistent-net.rules的内容如下:
子系统=="网络", 操作=="添加", 驱动程序=="?", ATTR{地址}=="68:B5:99:72:D8:02", ATTR{类型}=="1", KERNEL=="eth", NAME="eth0"
SUBSYSTEM=="net", ACTION=="添加", DRIVERS=="?", ATTR{address}=="68:05:CA:04:90:16", ATTR{type}=="1", KERNEL=="eth", NAME="eth1"
我还尝试将此文件中 MAC 地址的字母更改为小写,以匹配 dmesg 的输出。这没有任何区别。
我已禁用 NetworkManager,并且在 /etc/sysconfig/network-scripts/ifcfg-eth* 中有 HWADDR 条目。
在 ubuntu 和早期版本的 Centos 下,上述操作运行良好且可靠。
但是,这些都无法使这个装有 Centos 7 的盒子上出现可预测的设备。
如能得到关于如何将这些设备固定到 eth 名称的建议,我们将非常感激!
答案1
我进一步调查并发现了更多细节。
这种不利行为的原因是内核和 udev 软件之间的竞争条件(开发人员在错误报告中指出)。
因此,udev 的开发人员决定删除可靠的 ethX NIC 命名,并强制使用不太可预测的命名。
他们删除了允许管理员使用可靠的 ethX 接口顺序的代码,还添加了拒绝使用内核已用作内部 NIC 名称的任何 ethX 名称的代码。
因此,如果您想要使用 eth0、eth1 等名称,似乎无法获得可靠的排序。
有人建议改用 netX 等名称。
如果您将 ethX 设置为 X 大于实际接口数,也可能有效。
我是最初发帖人,我以为他找到了解决方案,但实际上这只是一个临时解决方案。经过几次测试启动后,我发现以太网设备的名称是随机的,而不是我在 60-net.rules 中定义的方式。
我匿名发布了原始答案,然后决定注册以便能够更多地参与。所以很抱歉。下面发布的答案实际上并没有解决最初回答的问题。它确实解决了一些问题,但效果并不可靠。
我已经成功使用 CentOS 7 的 Minimal-CD 和以下策略:
我做了很多事情但都没有帮助,所以我不得不把其中一些改回去。
我重新安装了 biosdevname(已将其删除)。
我编辑了 /etc/default/grub 并将 biosdevname=0 和 ifnames=0 添加到 CMDLINE。
我使用以下命令重新制作了 grub 配置: grub2-mkconfig -o /boot/grub2/grub.cfg
我还从 CentOS 6.5 安装中导入了以下两个文件:
/lib/udev/rules.d/75-persistent-net-generator.rules
/lib/udev/write_net_rules
(但这些可能根本没有任何效果)
然后我在 /etc/udev/rules.d/ 中创建了一个名为 60-net.rules 的文件,其中每个 NIC 对应一行:
子系统=="net", 动作=="添加", 驱动程序=="?*", 属性{地址}=="aa:bb:cc:dd:ee:ff", 属性{dev_id}=="0x0", 属性{类型}=="1", 名称="eth1"
(当然,MAC 地址“aa:bb:...”必须是正确的)。
之后我启动了并且它工作正常。