前言

近日,在尝试将 CentOS 系统从虚拟机迁移安装到物理机时,发现网卡名称发生了变化。(eno1 -> enp0s1)

但系统中所运行的服务应用与网卡名称有所关联(OVSPort),迁移之后出现了故障。

此时,则需要为网卡进行更名操作。

操作过程

  • 修改引导参数
vi /etc/default/grub
# 在 GRUB_CMDLINE_LINUX 行加上 net.ifnames=0 biosdevname=0
GRUB_CMDLINE_LINUX="crashkernel=auto rd.lvm.lv=centos/root rd.lvm.lv=centos/swap rhgb quiet net.ifnames=0 biosdevname=0"
  • 更新引导脚本
grub2-mkconfig -o /boot/grub2/grub.cfg
  • 修改网卡配置名称
cd /etc/sysconfig/network-scripts/
vi ifcfg-enp0s1
# ... 将文件中 NAME项 与 DEVICE项 的 enp0s1 修改成 eno1 ...
mv ifcfg-enp0s1 ifcfg-eno1
  • 编辑网卡名称规则
# 如果没有这个文件,创建一个,并复制以下内容进行修改即可。
vi /etc/udev/rules.d/90-eno-pix.rules

# This file was automatically generated on systemd update
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:0c:29:97:49:cb", NAME="eno1"
  • 重新引导
reboot

后话

在旧版本的 Ubuntu/CentOS 系统中常会使用 ethX 的网卡名称。而在最新版本的系统中,却变成了类似 enoX、enpXsX 这样的名称。

为何在新版本的系统中改名了呢?原因其实很简单。

传统方式的网卡命名是简单根据网卡发现顺序决定的(如 CentOS6),命名之后会记录在/etc/udev/ruls.d/70-persistent-net文件中,一个 MAC 地址对应一个名称。

当硬件发生改变时(如更换网卡)那么之前所定义的规则便失效了(MAC地址发生改变),从而导致网络配置文件找不到相应网卡,最后网络无法启动。(虚拟机克隆同理)

而新的网卡命名,则是根据固件中固定的拓扑信息为网卡分配名称。

  • enoX:主板 BIOS 内置的网卡
  • ensX:主板 BIOS 内置的 PCI-E 网卡
  • enpXsX:PCI-E 独立网卡
  • ethX:以上均不适用时使用