我知道 Linux 中 "biosdevname" 功能的用途,但我不确定如何
正是它的工作原理。

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

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

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

    后来我想恢复旧式设备命名,这就是
    有趣的部分开始了。我决定在尝试禁用时进行一些试验biosdevname 功能。由于它需要 biosdevname 包才能工作(或
    所以我在这里和那里阅读),我认为删除它就足以禁用
    功能,所以我输入:
    sudo apt-get purge biosdevname
    

    令我惊讶的是,重启后我的网络接口(interface)仍然是 p4p1, 所以biosdevname 显然仍然有效,即使 biosdevname 包已经
    歼灭。

    作为下一步,我对 /etc/network/interfaces 应用了适当的更改
    为了恢复我的网络接口(interface)的旧名称(删除了 p4p1 的条目
    并为 eth0 添加了条目)。结果,再次重启后,ifconfig既没有报告 eth0 也没有报告 p4p1 这是 OS 仍然存在的另一个证据
    理解 BIOS 名称而不是内核名称。

    事实证明,我还必须明确地将 GRUB 条目更改为GRUB_CMDLINE_LINUX_DEFAULT=biosdevname=0 并更新 GRUB 以获得预期
    结果(禁用 biosdevname 并恢复网络接口(interface)的旧名称)。

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

    最佳答案

    即使在您卸载软件包后 biosdevname 仍然让您烦恼的原因是它也将自身安装在 initrd 'initial ramdisk' 文件中。

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

    你可以像这样完全摆脱它:

    $ sudo update-initramfs -u
    

    关于linux - "biosdevname"是如何工作的?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27112436/

    10-13 07:29