“biosdevname”如何真正起作用?

时间:2014-11-24 19:17:00

标签: linux ubuntu

我知道Linux中"biosdevname"功能的用途,但我不确定如何 确切地说它有效。

我使用Ubuntu 14.04和Ubuntu 14.10(均为64位服务器版本)进行了测试 看起来他们默认启用它 - 在系统启动后立即启用它 网络接口的名称如p4p1而不是eth0,没有自定义 需要。据我所知,为了biosdevname启用,两者兼而有之 必须满足这两个条件:

  • 必须将引导选项biosdevname=1传递给内核
  • 必须安装
  • biosdevname

正如我已经提到的,Ubuntu 14.04和14.10似乎都提供biosdevname 作为默认功能:它们已经安装了biosdevname包,我 我也不需要修改grub.cfg - GRUB_CMDLINE_LINUX_DEFAULT没有 参数和我的网络接口仍然有一个BIOS名称(p*p*)而不是 内核名称(eth*。)

后来我想恢复旧式设备命名和那个地方 有趣的部分开始。我决定尝试禁用时尝试一下 biosdevname功能。因为它需要biosdevname包才能工作(或者 所以我在这里和那里阅读),我假设删除它就足以禁用了 功能,所以我键入:

sudo apt-get purge biosdevname

令我惊讶的是,重启后我的网络接口仍然是p4p1, biosdevname即使biosdevname包已经显而易见,/etc/network/interfaces仍然有效 消灭了。

下一步,我对p4p1进行了适当的更改 为了恢复我的网络接口的旧名称(删除了eth0的条目 并添加了ifconfig)的条目。因此,在重新启动后,eth0 报告p4p1GRUB_CMDLINE_LINUX_DEFAULT=biosdevname=0都不是OS的另一个证据 了解BIOS名称而不是内核名称。

原来我还必须明确地将GRUB条目更改为 biosdevname并更新GRUB以获得预期结果 结果(已禁用biosdevname并恢复网络接口的旧名称。)

我的问题是biosdevname如何在没有biosdevname包的情况下工作?是 毕竟不需要吗?如果是这样,究竟是什么提供了{{1}} 功能以及它是如何工作的?

1 个答案:

答案 0 :(得分:9)

即使在卸载软件包之后,biosdevname仍然让你烦恼的原因是它自己安装在initrd'初始ramdisk'文件也是。

卸载时,删除了/ usr / share / initramfs-tools / hooks / biosdevname,但程序包中没有postrm脚本,因此不执行update-initramfs,并且/ boot / initrd中仍然存在biosdevname。 ..在系统启动的第一阶段使用的文件。

你可以完全摆脱它:

$ sudo update-initramfs -u