# 如何解决多网卡的Linux弹性云服务器变更规格后网卡漂移？
#### 问题描述
绑定了多个网卡的Linux系统弹性云服务器，如果在变更规格后执行**ifconfig** （或**i** **p addr**）命令时出现网卡设备名称与网卡MAC地址对应不一致的情况，则表明云服务器变更规格后发生了网卡漂移。
如下图所示，变更规格前后，分别在云服务器中执行**i** **p addr**命令。从执行结果可以看到eth1和eth2对应的网卡MAC地址发生了变化，该情况即为发生了网卡漂移。
图1变更规格前   
![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0000001803553169.png "点击放大")
图2变更规格后   
![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0000001756515930.png "点击放大")
#### 可能原因
在Linux操作系统的云服务器中，与网卡相关的信息保存在/etc/udev/rules.d/70-persistent-net.rules文件中，当该文件不存在或者文件内容和Linux操作系统云服务器的实际信息不一致时，就可能导致出现网卡漂移现象。
#### 处理方法
1. 远程登录出现网卡漂移的云服务器。
2. 执行以下命令，修改"/boot/grub2/grub.cfg"文件。 在"/boot/grub2/grub.cfg"文件中，增加**biosdevname=0, net.ifnames=0**，如果文件中已经有该配置项，则跳过本步骤，不用添加。
   **cat /boot/grub2/grub.cfg I grep linux I grep net.ifnames**
   ```
   1inux /boot/vmlinuz-5.10.0-60.18.0.50.r865_35.hce2.x86_64 root=UUID=bb9f8e28-4582-48d5-9fe8-d76d32466d03 ro biosdevname=0 net.ifnames=0 consoleblank=600 console=tty0 console=ttyS0,115200n8 nohz=off mitigations=off crashkernel=512M crash_kexec_post notifiers panic=3 nmi_watchdog=1 selinux=0 rd.shel1=0
         1inux /boot/vmlinuz-0-rescue root=UUID=bb9f8e28-4582-48d5-9fe8-d76d32466d03 ro biosdevname=0 net.ifnames=0 consoleblank=600 console=tty0 console=ttyS0, 115200n8 nohz=off mitigations=off crashkernel=512M crash_kexec_post_notifiers panic=3 nmi_watchdog=1 selinux=0 rd.shel1=0
   ```
   
3. 执行以下命令，添加udev规则，在"/etc/udev/rules.d/"下创建一个MAC地址和网卡名称的映射规则，并给予可执行权限。 为了保序，建议网卡名称命名采用非eth开头命名方式。
   **cat /etc/udev/rules.d/70-persistent-net.rules**
   ```
   SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="fa:16:3e:79:5f:a1", ATTR{type}=="1", KERNEL=="eth*", NAME="net_eth0"
   SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="fa:16:3e:79:5c:1b", ATTR{type}=="1", KERNEL=="eth*", NAME="net_eth1"
   SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="fa:16:3e:79:58:78", ATTR{type}=="1", KERNEL=="eth*", NAME="net_eth2"
   ```
   
4. 执行以下命令，给予映射规则可执行权限。 **#chmod +x /etc/udev/rules.d/70-persistent-net.rules**
   
5. 执行以下命令，修改"/etc/sysconfig/network-scripts/ifcfg-$name"下网卡配置文件名和文件中"DEVICE=$name"字段对应值的名字一一对应。
   **cat /etc/sysconfig/network-scripts/ifcfg-net_eth0**
   ```
   DEVICE="net_eth0"
   B00TPROTO="dhcp"
   ONBO0T="yes"
   TYPE="Ethernet"
   PERSISTENT_DHCLIENT="yes"
   ```
   
6. 执行以下命令，重新生成grub配置并更新内核参数。 不同操作系统的grub代次有差异，例如update-initramfs和mkinitrd。
   **grub2-mkconfig -o /boot/grub2/grub.cfg**
   ```
   Generating grub configuration file ...
   Found linux image: /boot/vmlinuz-5.10.0-60.18.0.50.r865_35.hce2.x86_64
   Found initrd image: /boot/initramfs-5.10.0-60.18.0.50.r865_35.hce2.x66_64.img
   Found linux image: /boot/vmlinuz-0-rescue
   Found initrd image: /boot/initramfs-0-rescue.img
   Adding boot menu entry for UEFI Firmware Settings ...
   done
   ```
   
7. 执行以下命令，重启云服务器即可使配置生效。 **reboot**
   
8. 执行以下命令，查看网卡设备名称与网卡MAC地址的映射关系。
   **ip addr**
   图3查看结果   
   ![](https://support.huaweicloud.com/ecs_faq/zh-cn_image_0000001803711549.png "点击放大") 
