Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

11.10. 网络设备命名故障排除

将根据 第 11.2 节 “了解设备重命名过程” 中描述的步骤为每个接口分配可预测的接口名称(如果适用)。要查看 udev 将使用的可能名称列表,以 root 用户身份以以下格式发出命令
~]# udevadm info /sys/class/net/ifname | grep ID_NET_NAME
其中 ifname 是以下命令列出的接口之一:
~]$ ls /sys/class/net/
udev 将根据 第 11.2 节 “了解设备重命名过程” 中描述的规则应用其中一个可能的名称,并在此总结:
  • /usr/lib/udev/rules.d/60-net.rules - 从 initscripts 开始,
  • /usr/lib/udev/rules.d/71-biosdevname.rules - from biosdevname,
  • /usr/lib/udev/rules.d/80-net-name-slot.rules - from systemd
从上面的规则文件列表中,可以看到,如果通过 initscripts 或 biosdevname 进行接口命名,它总是优先于 udev 原生命名。但是,如果没有出现 initscripts 重命名并禁用 biosdevname,那么要更改接口名称,将 80-net-name-slot.rules/usr 复制到 /etc,并相应地编辑该文件。换句话说,注释掉或安排按特定顺序使用的方案。

例 11.1. 某些接口来自内核命名空间(eth[0,1,2...]),而 Others Are Successfully Renamed 为 udev

混合方案最可能意味着,对于某些硬件,内核无法向 udev 提供可用信息,因此无法找出任何名称,或者提供给 udev 的信息并不合适,例如非唯一设备 ID。后者更为常见,解决方案是在 ifcfg 文件中使用自定义命名方案,或通过编辑 80-net-name-slot.rules 更改正在使用的 udev 方案。

例 11.2. 在 /var/log/messages 或 systemd Journal 中,Renaming Is Seen to Be Done Twice for E每个接口

带有命名方案的系统在 ifcfg 文件中编码,但没有重新生成的 initrd 镜像可能会遇到这个问题。在早期启动期间,仍使用 initrd 分配接口名称(通过 biosdevname 或 udev 或 dracut 参数)。然后,在切换到真实 rootfs 后,将再次执行重命名,并且新接口名称由 udev 生成的 /usr/lib/udev/rename_device 二进制文件决定,因为需要处理 60-net.rules。您可以安全地忽略此类消息。

例 11.3. 在 ifcfg 文件中使用 ethX 名称不起作用的命名方案

Red Hat Enterprise Linux 不提供持续应用 ethX 命名约定的方法,除非在非常特殊的情况下。
如果某个其他接口已在使用请求的名称,将接口设置为特定名称的 udev 规则将失败。这包括 /usr/lib/udev/rules.d/60-net.rules 文件提供的功能。
当内核枚举网络设备时,内核在引导时使用 ethX 命名约定。ethX 名称在不同的重新启动之间不一致,因此它们无法预测。因此,尝试使用 udev 将接口重命名为可预测的名称或重新排序内核给出的不可预测的 ethX 名称会失败。
在以下情况下,使用 ethX 名称可以正常工作:

例 11.4. 在 Inconsistent enpXxX Names 中设置 net.ifnames=0 结果

如果 systemd 可预测的接口命名(net.ifnames)和 biosdevname 命名方案都已禁用,网络接口继续使用最初由内核提供的 ethX 名称无法预计且可能不一致。
当内核枚举网络设备时,内核始终在启动时使用 enpXxX 命名约定。由于并行化,内核接口枚举顺序应该在每次重启后会有所不同。Red Hat Enterprise Linux 依赖于 systemd 可预测的接口命名方案或 biosdevname 命名方案,以可预测的方式将内核无法预计的 ethX 接口重命名为在重新引导后始终一致的名称。
有关网络适配器命名约定的更多信息,请参阅在 RHEL7 中设置 net.ifnames=0?红帽客户门户上的知识中心支持文章.

例 11.5. 以太网接口前缀的限制

您选择的前缀必须满足以下要求:
  • 它由 ASCII 字符组成。
  • 它是一个字母数字字符串。
  • 它少于 16 个字符。
  • 它不与用于网络接口命名的任何其他已知的前缀冲突,如 eth、eno、ens 和 em