网卡管理中怎么在基于老旧 CentOS 6 升级到新版内核的生产机器上利用 systemd.link 文件规范重写逻辑以彻底锁死多物理网卡的物理命名

舞姬之光

舞姬之光

2026-07-27

533人浏览

原创

centos 6 不支持 systemd.link,因其使用 sysv init + 老版本 udev,网卡命名依赖 /etc/udev/rules.d/70-persistent-net.rules;systemd 及 .link 机制仅从 centos 7 开始引入。

网卡管理中怎么在基于老旧 centos 6 升级到新版内核的生产机器上利用 systemd.link 文件规范重写逻辑以彻底锁死多物理网卡的物理命名

CentOS 6 本身不支持 systemd.link,因为 systemd 是从 CentOS 7(RHEL 7)开始才作为默认 init 系统引入的。而 CentOS 6 使用的是 SysV init + udev(版本较老,如 udev-147),其网卡命名机制依赖于 udev 规则文件(如 /etc/udev/rules.d/70-persistent-net.rules),不存在 .link 文件机制

所以,问题中“在基于老旧 CentOS 6 升级到新版内核的生产机器上利用 systemd.link 文件……”这一前提技术上不成立——无论你把内核升级到 4.x、5.x 还是 6.x,只要操作系统仍是 CentOS 6(内核 + 用户空间未变更),systemd 就不会运行,.link 文件完全被忽略,systemd-networkd 也根本不存在。

但你的实际诉求很明确:在老旧硬件上稳定绑定多物理网卡到固定名称(如 eth0→eno1, eth1→ens1f0),避免因内核升级、驱动变动或热插拔导致网卡名漂移(如 eth0 ↔ eth1 互换)。这确实是生产环境的关键需求。下面分两种真实可行路径说明:


✅ 路径一:仍在 CentOS 6 上 —— 用传统 udev 规则「锁死」网卡名

适用于:已升级新内核(如 4.19/5.15)但 OS 仍为 CentOS 6 的场景。

  1. 确认网卡 PCI 地址与 MAC 地址

    lspci | grep -i ethernet
    ip link show | awk -F': ' '/^[0-9]+:/ {print $2}' | while read iface; do echo "$iface:"; ethtool -i "$iface" 2>/dev/null | grep bus-info; ip link show "$iface" | grep -o -E 'link/[a-f0-9:]{17}'; done

    输出类似:

    CentOS Linux 7.9.2009
    CentOS Linux 7.9.2009

    CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。

    下载
    eth0:
        bus-info: 0000:02:00.0
        link/ether 00:11:22:33:44:55
    eth1:
        bus-info: 0000:02:00.1
        link/ether 00:11:22:33:44:56
  2. 编写 udev 规则(强制重命名)
    创建 /etc/udev/rules.d/70-net-name.rules

    # 锁定第一张网卡为 eno1(对应主板板载)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:22:33:44:55", NAME="eno1"
    # 锁定第二张网卡为 ens1f0(对应 PCIe 插槽第一口)
    SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:11:22:33:44:56", NAME="ens1f0"

    ⚠️ 注意:

    • 必须用 NAME=(不是 KERNEL_NAME=ID_NET_NAME_ONBOARD=);
    • DRIVERS=="?*" 确保匹配所有驱动(e1000e、igb、ixgbe 等);
    • 规则文件名必须以数字开头(如 70-),确保加载顺序晚于系统默认规则。
  3. 生效规则

    sudo udevadm control --reload-rules
    sudo udevadm trigger --subsystem-match=net
    sudo reboot  # 推荐重启,确保所有接口按新名初始化

✅ 路径二:已迁移到 CentOS 7+ / RHEL 7+ —— 正确使用 .link 文件

适用于:你已完成 OS 层级迁移(非仅内核升级),运行 systemd 的现代系统。

  1. 禁用预测性网卡命名(可选,但推荐统一管理)
    /etc/default/grub 中添加:

    GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"

    然后 sudo grub2-mkconfig -o /boot/grub2/grub.cfg && sudo reboot
    → 恢复传统 eth0/eth1 命名,再用 .link 精准控制。

  2. 创建 .link 文件(推荐方式)
    例如 /etc/systemd/network/10-eno1.link

    [Match]
    MACAddress=00:11:22:33:44:55
    
    [Link]
    Name=eno1

    /etc/systemd/network/20-ens1f0.link

    [Match]
    MACAddress=00:11:22:33:44:56
    
    [Link]
    Name=ens1f0

    ✅ 优势:

    • 优先级高于 udev,且由 systemd-networkd 原生支持;
    • 支持更丰富的匹配条件(Path=, Driver=, Property= 等);
    • 无需重启,sudo systemctl restart systemd-udevd 即可重载。

❌ 不可行方案提醒

  • 在 CentOS 6 上安装 systemd 并期望 .link 生效 → 失败(基础库、dbus、logind 等严重缺失);
  • 仅升级内核却不升级用户空间 → 无法启用任何 systemd 功能;
  • 误以为 kernel-ml(ELRepo 提供)自带 systemd 支持 → 它只是内核包,不改变 init 系统。

真正“彻底锁死”的关键不在内核版本,而在 命名机制的控制权归属
CentOS 6 靠 udev 规则,CentOS 7+ 靠 systemd .link
选对路径,才能让 eno1 永远是那块 Intel I210,ens1f0 永远是那张 Mellanox CX4 —— 无论内核怎么升,驱动怎么换。

相关专题

更多
磁盘配额是什么
磁盘配额是什么

磁盘配额是计算机中指定磁盘的储存限制,就是管理员可以为用户所能使用的磁盘空间进行配额限制,每一用户只能使用最大配额范围内的磁盘空间。php中文网为大家提供各种磁盘配额相关的内容,教程,供大家免费下载安装。

2023.06.21

2672

4

如何安装LINUX
如何安装LINUX

本站专题提供如何安装LINUX的相关教程文章,还有相关的下载、课程,大家可以免费体验。

2023.06.29

1649

10

linux find
linux find

find是linux命令,它将档案系统内符合 expression 的档案列出来。可以指要档案的名称、类别、时间、大小、权限等不同资讯的组合,只有完全相符的才会被列出来。find根据下列规则判断 path 和 expression,在命令列上第一个 - ( ) , ! 之前的部分为 path,之后的是 expression。还有指DOS 命令 find,Excel 函数 find等。本站专题提供linux find相关教程文章,还有相关

2023.06.30

1297

5

linux修改文件名
linux修改文件名

本专题为大家提供linux修改文件名相关的文章,这些文章可以帮助用户快速轻松地完成文件名的修改工作,大家可以免费体验。

2023.07.05

2674

7

linux系统安装教程
linux系统安装教程

linux系统是一种可以免费使用,自由传播,多用户、多任务、多线程、多CPU的操作系统。本专题提供linux系统安装教程相关的文章,大家可以免费体验。

2023.07.06

2421

7

linux查看文件夹大小
linux查看文件夹大小

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。linux怎么查看文件夹大小呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.20

1660

8

linux查看ip命令
linux查看ip命令

本专题为大家提供linux查看ip命令相关文章内容,感兴趣的朋友可以免费下载体验试试。

2023.07.20

1254

4

linux查看cpu使用率
linux查看cpu使用率

在linux的系统维护中,可能需要经常查看cpu使用率,分析系统整体的运行情况。本专题为大家带来了linux查看cpu使用率的相关文章,感兴趣的朋友千万不要错过了。

2023.07.25

1423

6

linux查找文件命令
linux查找文件命令

Linux是一种自由和开放源码的类Unix操作系统,存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.07.31

210

3

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Linux开发篇视频教程
Linux开发篇视频教程

共18课时 | 4.4万人学习

Linux开发视频教程
Linux开发视频教程

共18课时 | 4.5万人学习

CentOS 官方文档
CentOS 官方文档

共0课时 | 0人学习