写在前面
你是否遇到过这样的困扰:Linux服务器上的网卡名称从熟悉的eth 0、eth 1变成了ens3**np*、enp1*f0np*,在配置高性能RDMA网络时,需要给eth0—eth*网口批量配置ip,而由于网口名被rename不能批量操作。。。😐
for i in {1..10};do *** ;ifconfig eth${i} *** ;ifconfig eth${i} mtu *** ;done
今天这篇文章,将教你如何解决~
一、为什么网卡名称变了?
从CentOS 7、Ubuntu 16.04开始,Linux系统引入了"可预测网络接口命名"机制。虽然这种命名方式在某些场景下提供了稳定性,但对于运维人员来说,传统的eth0、eth1命名显然更加直观。
本文将带你:
🔧 恢复传统网卡命名方式
📡 配置RDMA高性能网络
🎯 解决设备映射混乱问题
二、3步搞定网卡重命名
第1步:修改GRUB配置
编辑GRUB配置文件:
sudo vim /etc/default/grub
找到GRUB_CMDLINE_LINUX这一行,添加两个关键参数:
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0"
参数解释:
net.ifnames=0
这是systemd/udev 的网络接口命名控制参数,默认情况下(net.ifnames=1),系统会按“可预测网络接口名称”规则给网卡起名。设为 net.ifnames=0时,告诉内核/udev:不要用这套新命名规则,网卡就叫 eth0、eth1…
biosdevname=0
这是 Dell 发起的 biosdevname 工具的开关,设为 biosdevname=0就是:禁用 biosdevname 这套命名逻辑,不让它参与网卡命名。
如果该行已有其他参数,在末尾追加即可:
GRUB_CMDLINE_LINUX="crashkernel=auto quiet net.ifnames=0 biosdevname=0"
第2步:更新引导配置
RHEL/CentOS/Rocky系统:
# BIOS引导sudo grub2-mkconfig -o /boot/grub2/grub.cfg# UEFI引导sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
Ubuntu/Debian系统:
sudo update-grub
第3步:重启验证
sudo reboot
重启后检查网卡名称:
ip link show
你应该能看到熟悉的eth0、eth1了!
三、高级玩法之固定网卡与MAC地址绑定
为了防止网卡顺序混乱,建议创建udev规则固定网卡名称:
sudo vi /etc/udev/rules.d/70-persistent-net.rules
添加规则(替换为你的实际MAC地址):
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:11:22:33:44:55", NAME="eth0"SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="66:77:88:99:aa:bb", NAME="eth1"
如何查看MAC地址?
ip link show | grep -A1 "enp\|eno"
四、RDMA环境配置指南
对于使用InfiniBand或RoCE的高性能计算场景,网卡重命名后需要正确配置RDMA设备映射。
4.1 检查RDMA设备状态
首先查看系统中的RDMA设备:
# 列出所有RDMA设备:ibv_devices# 查看详细信息:ibv_devinfo# 查看设备与网卡映射关系 ls -l /sys/class/infiniband/*/device/net/
4.2 验证驱动加载
确保RDMA相关内核模块已加载:
# 检查Mellanox网卡驱动:lsmod | grep mlx5# 检查InfiniBand核心模块:lsmod | grep ib_# 如未加载需手动加载:sudo modprobe mlx5_coresudo modprobe mlx5_ibsudo modprobe rdma_cm
4.3 安装配置OpenSM(InfiniBand环境)
对于InfiniBand网络,需要运行子网管理器:
# 安装OpenSM:sudo yum install opensm # RHEL/CentOS:sudo apt install opensm # Ubuntu# 启动并设置开机自启sudo systemctl start opensmsudo systemctl enable opensm
4.4 性能测试
使用RDMA性能测试工具验证配置:
带宽测试:
# 服务器端ib_send_bw -d mlx5_0# 客户端ib_send_bw -d mlx5_0 <服务器IP>
延迟测试:
# 服务器端ib_send_lat -d mlx5_0# 客户端ib_send_lat -d mlx5_0 <服务器IP>
五、实用工具:RDMA设备映射脚本
创建一个脚本快速查看RDMA设备与网卡的对应关系:
#!/bin/bash# 文件名: rdma_mapping.shecho "========================================"echo " RDMA设备与网卡映射关系"echo "========================================"for dev in /sys/class/infiniband/*; do ibdev=$(basename $dev) netdev=$(ls $dev/device/net/ 2>/dev/null | head -1) if [ -n "$netdev" ]; then mac=$(cat /sys/class/net/$netdev/address) ip=$(ip -4 addr show $netdev | grep inet | awk '{print $2}') echo "RDMA设备: $ibdev" echo " └─ 网卡: $netdev" echo " └─ MAC: $mac" echo " └─ IP: ${ip:-未配置}" echo "" fidone
保存后赋予执行权限:
chmod +x rdma_mapping.sh./rdma_mapping.sh
六、常见问题排查
❌ 问题1:重启后网卡名称没变
排查步骤:
# 检查当前内核参数cat /proc/cmdline# 确认是否包含 net.ifnames=0 biosdevname=0
如果未包含,说明GRUB配置未生效,重新检查是否拼写错误。
❌ 问题2:RDMA设备无法识别
可能原因:
解决方案:
# 检查Mellanox OFED版本ofed_info -s# 重新安装OFED(如有必要)sudo /etc/init.d/openibd restart
❌ 问题3:网络配置文件冲突
删除旧的网络配置文件:
# RHEL/CentOSsudo rm /etc/sysconfig/network-scripts/ifcfg-eno*sudo rm /etc/sysconfig/network-scripts/ifcfg-enp*# 重新生成eth0配置sudo nmcli con add type ethernet ifname eth0
七、最佳实践建议
✅ 配置前准备
备份关键配置
sudo cp /etc/default/grub /etc/default/grub.bak
sudo tar czf network-backup.tar.gz /etc/sysconfig/network-scripts/
记录硬件信息
# 生成网卡信息表 ip link show | grep -E "^[0-9]+" > network-info.txtlspci | grep -i ethernet >> network-info.txt
✅ 监控与维护
建议定期检查:
八、总结
通过本文的配置方法,你可以:
恢复直观的网卡命名 - 告别enp3**,拥抱eth0
稳定RDMA设备映射 - 确保高性能网络可靠运行
掌握问题排查技巧 - 快速定位和解决常见故障
无论是传统的以太网环境,还是高性能的RDMA场景,合理的网络配置都是系统稳定运行的基石。