一致性网络设备命名——linux 网络接口 命名 p1p1 em1
以下内容代表 Matt Domsch 发表,他是 Dell CTO 办公室的一名技术策略专家(也是 Linux 专家)
我长期宠爱的计划之一——Consistent Network Device Naming(一致性网络设备命名)最终应用于 Fedora(强调Fedora 中 “F“的 2 个元素:Features(功能)和 First(第一)),并且以后所有的 Linux 发行版都将如此。你肯定会问,什么是Consistent Network Device Naming(一致性网络设备命名)?
运行 Linux 的系统一贯将以太网设备命名为 ethX。你的桌面可能有一个以太网端口,命名为 eth0。如果你仅有一个网络端口,这样毫无问题,但如果出现戴尔PowerEdge 服务器的情况,四个以太网端口该怎么办?它们被命名为 eth0、eth1、eth2、eth3,分 别对应机箱背面的标签 1、2、3、4。某些时候确实如此。除了从 0 开始,而不是从 1 开始导致的明显命名混乱外,还可能出现其他混乱情况,如每个端口在每次启用时可能无法获得相同的名称,此外它们的命名顺序可能是任意的。如果将网卡添加到 PCI 插槽,情况还会更糟,主板上的端口和新添加卡上的端口命名可能相互混杂。
尽管已有多种解决方案提出(去年 Linux Plumbers Conference 会议的详情),但直至今日,仍无可行的方法。
运行biosdevname,这是 Dell 开发的工具,旨在为网络设备的命名理清思路(并且保持一致性!)。Biosdevname 是一款 udev 帮助程序,可根据系统 BIOS 提供的信息对网络接口进行重命名。
新的命名规则如下:
- em[1-N] 表示主板(嵌入式)NIC(# 对应机箱标签)
- pci# 表示 PCI 插槽中的卡,端口 1 至 N
- NPAR & SR-IOV 设备增加后缀 _,从 0 至 N,取决于各端口可用的分区或虚拟功能的数量。
- 其他 Linux 命名规则,如 . 和 : 后缀,保持不变且仍然适用。
由此,Linux 网络接口名称与外部可见的网络端口(RJ-45 机架)之间建立了明确的对照。
从何处获取此信息?其算法相当简单:
- 如果系统 BIOS 显示新的 PCI 固件规格 3.1 ACPI _DSM 方法,我们将从 ACPI 获取接口标签和索引,并加以使用。
- 如果系统 BIOS 显示 SMBIOS 2.6 类型 9 和 41 中的索引和标签,则使用该索引值。
- 如果系统 BIOS 通过 HP 专用 SMBIOS 扩展名显示索引,则使用该索引。
- 否则将继续使用遗留 PCI IRQ 路由表,找出设备所在的插槽,按宽度优先顺序排列 PCI 设备列表,并指定索引值。
将带来什么影响?
如果你的脚本采用硬编码的 eth0,或者假设 ethX 为特定端口,则你的脚本已存缺陷(或许你并不知道)。请开始规划在将来使用新的接口命名,并根据需要调整你的脚本。
Fedora 15 将是默认采用 biosdevname 的首个发行版。1 月 27 日星期四是测试日。欢迎大家下载实时镜像,并在你的系统上启动,检查你的网络接口是否已根据以上规则进行命名,以及是否一切的效果均如预期。你还可借此机会检查你的定制脚本,寻找硬编码的 ethX 值,为将来的命名变更做好准备。
一旦使用 Fedora获得足够的关注和验证,我希望这样的变化扩展到其他的 Linux 发行版,并逐渐覆盖其他的操作系统。请务必留意。