我知道"biosdevname"Linux 中功能的用途,但我不确定它是如何工作的.
我用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
Run Code Online (Sandbox Code Playgroud)
令我惊讶的是,之后重新启动我的网络接口仍然p4p1,如此
biosdevname显然还是即使工作biosdevname包已经被消灭了.
下一步,我应用了适当的更改/etc/network/interfaces,以便恢复我的网络接口的旧名称(删除条目p4p1
和添加条目eth0).结果,在另一次重新启动后,ifconfig
既eth0没有报告也没有报告p4p1操作系统仍然理解BIOS名称而不是内核名称.
事实证明,我还必须显式更改GRUB条目
GRUB_CMDLINE_LINUX_DEFAULT=biosdevname=0并更新GRUB以获得预期结果(已biosdevname禁用和恢复网络接口的旧名称).
我的问题是:biosdevname没有biosdevname包裹怎么办?毕竟不是必需的吗?如果是这样,究竟是什么提供了biosdevname
功能以及它是如何工作的?
小智 9
即使在卸载软件包之后,biosdevname仍然让你烦恼的原因是它自己也安装在initrd的"初始ramdisk"文件中.
卸载时,删除了/ usr/share/initramfs-tools/hooks/biosdevname,但是包中没有postrm脚本,因此不执行update-initramfs,并且/ boot/initrd ...文件中仍然存在biosdevname用于系统启动的第一阶段.
你可以像这样完全摆脱它:
$ sudo update-initramfs -u
Run Code Online (Sandbox Code Playgroud)