银河麒麟高级服务器操作系统V10SP2(X86)cloud-init组件导致eth0网卡重命名失败问题处理

前言:在grub中添加biosdevname=0 net.ifnames=0,将网卡ensxxx或者enpxxx等网卡重命名为eth0,重启系统之后不生效问题。以下抒写的文档是用银河麒麟V10 SP2 X86架构进行分析处理。该问题不是出现在某个系统版本上,只要安装了cloud-init都会出现。

一 基本信息

1.1 系统版本
############## Kylin Linux Version #################
Release:
Kylin Linux Advanced Server release V10 (Sword)

Kernel:
4.19.90-25.31.v2101.ky10.x86_64

Build:
Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-x86_64-Build09/20210524
#################################################
1.2 cloud-init版本
rpm -qa | grep cloud-init
cloud-init-19.4-6.p05.ky10.noarch

二 排查过程

2.1 排查messages日志和dmesg日志
(1)dmesg | grep eth0
[ 5.92788] virtio_net virtio0 enp1s0: renamed form eth0
#dmesg中发现网卡名已经将enp1s0改成了eth0了


(2) cat /var/log/messages | grep eth0
systend-udevd[346]: eth0: Network interface 2 is renamed fron 'eth0’ to 'enp1s0'
kernel: [3.651584] virtio_net virtio0 enp1s0: renaned from etho
systemd-udevd[332]: eth0: Network interface 2 is renaned fron 'etho’ to 'enp1s0'
kernel: [4.254616] virtio_net virtio0 enp1s0: renamed from eth0
systemd-udevd[318]: eth0: Network interface 2 is renamed from 'etho’ to 'enp1s0'
kernel: [2.446198] virtio_net virtio0 enp1s0: renaned fron eth0
systend-udevd[301]: eth0: Network interface 2 is renamed from 'eth0’ to 'enp1s0'
kernel: [5.927988] virtio_net virtio0 enp1s0: renaned from eth0
systend-udevd[5931: eth0: Network interface 2 is renamed from 'eth0' to "enp1s0'
#messages中systemd-udevd发现网卡名又将eth0改为enp1s0了
2.2 查看udev规则

在做了诸多场景的问题复现之后,发现了是系统中有udev规则导致的,udev规则文件是自行生成的,而不是手动创建的。

具体文件路径:
/etc/udev/rules.d/70-persistent-net.rules
2.3 查看cloud-init组件中涉及的udev文件
[root@localhost ~]# grep -nr "70-persistent-net.rules" /usr/
匹配到二进制文件 /usr/lib/python3.7/site-packages/cloudinit/net/__pycache__/eni.cpython-37.opt-1.pyc
匹配到二进制文件 /usr/lib/python3.7/site-packages/cloudinit/net/__pycache__/eni.cpython-37.pyc
匹配到二进制文件 /usr/lib/python3.7/site-packages/cloudinit/net/__pycache__/sysconfig.cpython-37.opt-1.pyc
匹配到二进制文件 /usr/lib/python3.7/site-packages/cloudinit/net/__pycache__/sysconfig.cpython-37.pyc
/usr/lib/python3.7/site-packages/cloudinit/net/eni.py:347:            'netrules_path', 'etc/udev/rules.d/70-persistent-net.rules')
/usr/lib/python3.7/site-packages/cloudinit/net/sysconfig.py:312:            'netrules_path', 'etc/udev/rules.d/70-persistent-net.rules')
/usr/lib/dracut/modules.d/95udev-rules/module-setup.sh:59:    [[ $hostonly ]] && inst_rules 70-persistent-net.rules

下面是查到涉及70-persistent-net.rules的文件
/usr/lib/python3.7/site-packages/cloudinit/net/eni.py
/usr/lib/python3.7/site-packages/cloudinit/net/sysconfig.py

2.4 解决方法
(1)grub引导中添加biosdevname=0 net.ifnames=0参数

/etc/default/grub GRUB_COMLINE_LINUX尾行添加biosdevname=0 net.ifnames=0

(2)更新grub.cfg文件
[ -d /sys/firmware/efi ] && echo UEFI || echo BIOS
BIOS
#如果输出是UEFI则表示是UEFI启动
#如果输出是BIOS则表示是传统的Legacy BIOS启动

传统的Legacy BIOS启动文件路径:
/boot/grub2/grub.cfg
UEFI启动文件路径:
/boot/efi/EFI/kylin/grub.cfg

UEFI引导执行:grub2-mkconfig -o /boot/efi/EFI/kylin/grub.cfg
Legacy启动执行:grub2-mkconfig -o /boot/grub2/grub.cfg

下面是修改之后的grub文件和执行grub2-mkconfig命令的输出:
在这里插入图片描述

(3)关闭cloud-init的网络接管

​ /etc/cloud/cloud.cfg配置文件尾行添加:
​ network:
​ config: disabled
#有缩进问题,写的时候要注意下
下面是修改完成之后的示例:
在这里插入图片描述

(4)删除70-persistent-net.rules
rm -f  /etc/udev/rules.d/70-persistent-net.rules
(5)检查initramfs-xxx.img文件中有没有70-persistent-net.rules

initramfs 是 “initial ram file system”(初始RAM文件系统)的缩写。它是一个临时的文件系统,通常在引导过程中被加载到内存中,以帮助系统初始化硬件、加载必要的驱动程序和其他必要的功能,以便系统能够继续加载真正的根文件系统。
这个文件在/boot下 xxx代表的是具体的内核版本,例如完整的文件名称为:initramfs-4.19.90-25.31.v2101.ky10.aarch64.img

lsinitrd /boot/initramfs-$(uname -r).img | grep rules.d | grep 70-persistent-net.rules

如果执行lsinitrd可以筛选到,需要更新initramfs-xxx.img,更新之前确保/etc/udev/rules.d/70-persistent-net.rules文件被删除
更新命令如下:

dracut -f 
(6)删除网卡配置文件

ifcfg-ens3(配置文件名称根据实际情况修改,ens3只是示例)

rm -f /etc/sysconfig/network-scripts/ifcfg-ens3
(7)重启测试
reboot
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值