bios 设备名称

bios 设备名称

Ubuntu 和 Debian(stretch)的最新版本带来了新的网络接口命名方案。

现在,当从使用“eth0”等旧式名称的系统进行更新时,我想知道启动前新名字是什么?

我该怎么做?是否有一个神奇的“systemd”调用,我可以在启动之前(随后失去网络连接)使用它来编辑 /etc/network/interface?

答案1

有两种不同的方案可用:biosdevname 与可预测的网络接口名称。

bios 设备名称

biosdevname 好像是 ubuntu 默认的,安装 biosdevname 包就可以激活。

可以使用以下方法找到接口的 biosdevname:

biosdevname -i eth0

可预测的网络接口名称

我相信这是 Debian stretch 中的默认设置,但需要在从以前的版本升级时明确启用。

可以使用以下命令找到 eth0 的可预测名称:

udevadm test-builtin net_id /sys/class/net/eth0 | grep '^ID_NET_NAME_'

答案2

新的方案显然被称为“可预测的网络接口名称”,但我没有找到很多关于如何实际上预测名字。 我发现的所有关于它的信息基本上指向此源代码评论(它本身指向第一个链接)。从评论中,根本不清楚如何知道 udev 将使用哪种寻址方案来表示网络设备名称。

net.ifnames=0根据第一个链接,您可以通过在 Grub 中的内核命令行中添加来禁用它并使用传统名称。根据此评论如果您计划创建 VLAN 标记接口,这可能是必要的,因为添加的扩展会使接口名称太长。

否则,最好重新提出问题来解释您要用该名称做什么(例如通过 ansible 或类似方法配置接口)

答案3

我不确定更新版本后是否仍存在这种情况,但在我的旧系统上,我能够创建一个空文件,/etc/udev/rules.d/80-net-name-slot.rules它会禁用“可预测”命名功能。您还可以创建自己的规则,并根据 mac 地址或 PCI/USB 连接自行命名接口。

答案4

我们在公司中使用以下“单行代码”将现有接口映射到其各自可预测的名称:

echo; [ -e /etc/systemd/network/99-default.link ] && echo '!!! Predictable Network Interface Names are disabled - /etc/systemd/network/99-default.link exists! !!!' && ls -l /etc/systemd/network/99-default.link && echo; echo; [ -e /etc/udev/rules.d/80-net-setup-link.rules  ] && echo '!!! Predictable Network Interface Names are disabled - /etc/udev/rules.d/80-net-setup-link.rules  exists! !!!' && ls -l /etc/udev/rules.d/80-net-setup-link.rules && echo; for i in /sys/class/net/*; do udevadm info -q property "$i" | perl -Mwarnings -Mstrict -e 'my $res = {}; while(<>) { chomp; my @f = split /=/, $_, 2; $res->{$f[0]} = $f[1]; }; printf "%s: %s\n", $res->{DEVPATH}, $res->{ID_NET_NAME_FROM_DATABASE} // $res->{ID_NET_NAME_ONBOARD} // $res->{ID_NET_NAME_SLOT} // $res->{ID_NET_NAME_PATH} // $res->{ID_NET_NAME_MAC} // "???";'; done

它实现了https://www.freedesktop.org/wiki/Software/systemd/PredictableNetworkInterfaceNames/可以通过 SSH 快速复制粘贴。

我的机器的输出示例:

/devices/virtual/net/docker0: ???
/devices/pci0000:00/0000:00:01.2/0000:02:00.2/0000:03:09.0/0000:2a:00.0/net/enp42s0: enp42s0
/devices/virtual/net/lo: ???
/devices/virtual/net/tun0: ???
/devices/virtual/net/veth732bf87: ???
/devices/pci0000:00/0000:00:01.2/0000:02:00.2/0000:03:08.0/0000:29:00.0/net/wlo1: wlo1

相关内容