我知道 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/