前言
近日,在尝试将 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:以上均不适用时使用