CentOS 7网卡默认为ens33而非eth0,因内核启用可预测命名机制(net.ifnames=1),依据固件/PCI拓扑生成唯一名称以避免虚拟机克隆冲突;若需恢复eth0,必须同时禁用net.ifnames=0和biosdevname=0、重命名配置文件并同步修改NAME与DEVICE字段,三者缺一不可。

为什么 CentOS 7 网卡叫 ens33 而不是 eth0
因为内核启用了新的命名策略:net.ifnames=1(默认开启),它按固件/PCI拓扑生成可预测名,比如 ens33、eno1、enp0s3。这不是 bug,是设计——避免克隆虚拟机后网卡名冲突。但如果你习惯 eth0,就得关掉这套机制。
修改 grub 内核参数禁用新命名规则
这是最关键的一步,否则改配置文件也没用。必须让内核启动时跳过自动命名逻辑:
- 编辑
/etc/default/grub(注意不是/etc/sysconfig/grub,后者只是软链接) - 找到
GRUB_CMDLINE_LINUX行,在引号内末尾追加两个参数:net.ifnames=0 biosdevname=0 - 确保没有多余空格或换行断开参数,例如写成
"...quiet net.ifnames=0 biosdevname=0"是对的,写成"...quiet\nnet.ifnames=0"就会失效 - 运行
grub2-mkconfig -o /boot/grub2/grub.cfg生效,别漏掉-o和输出路径
重命名网卡配置文件并修正 NAME/DEVICE
仅改 grub 不够,旧配置仍指向 ens33,系统重启后 network 服务会尝试加载两个同名设备,报错 RTNETLINK answers: File exists:
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离
- 进
/etc/sysconfig/network-scripts/目录 - 把原配置如
ifcfg-ens33改名为ifcfg-eth0(对应你要的名称) - 编辑
ifcfg-eth0,把NAME=ens33和DEVICE=ens33都改成eth0 -
UUID和HWADDR字段可删,它们在禁用net.ifnames后已无作用;保留反而可能引发识别冲突 - 旧配置文件(如
ifcfg-ens33)必须删掉或重命名移出目录,否则systemctl restart network会同时读取两个文件,直接失败
重启后验证和常见坑
改完不重启等于没改。重启后执行 ip link show 或 nmcli device status 查真实接口名,别只看 ifconfig(CentOS 7 默认不装 net-tools):
- 如果仍显示
ens33,先确认grub.cfg里是否真写入了那两个参数,再检查cat /proc/cmdline输出里有没有net.ifnames=0 - 如果
eth0出现但无法获取 IP,大概率是ONBOOT=yes没设,或BOOTPROTO值不匹配当前网络环境(DHCP 还是 static) - 虚拟机克隆后改名,务必同步更新
HWADDR字段(如果保留的话),否则 systemd-networkd 可能拒绝启动该接口
真正起作用的是内核参数 + 配置文件名 + NAME/DEVICE 三者严格一致,缺一不可。中间任何一步漏掉,都会导致网络服务反复报错或静默失效。










