我现在正在回答自己的问题,因为我终于找到了解决此问题的方法。
我发现可以通过卸载驱动程序然后以正确的顺序加载设备来重新排序设备。
第一种方法(bruteforce):
因此,我想出的第一种方法很简单,就是使用init.d脚本强行重新加载驱动程序。
以下init脚本是为Debian 6.0量身定制的,但是使用适当的init.d脚本,几乎所有发行版都可以使用相同的原理。
#!/bin/sh -e
### BEGIN INIT INFO
# Provides: reorder-nics
# Required-Start:
# Required-Stop:
# Default-Start: S
# Default-Stop:
# Short-Description: Reloads the nics in correct order
### END INIT INFO
#
# This script should reload the nic drivers in corrected order.
# Basically it just unloads and then loads the drivers in different order.
#
echo "Reloading NICs!"
# unload the drivers
modprobe -r driver_0 # eth0 nic interface
modprobe -r driver_1 # eth1 nic interface
# load the drivers in corrected order
modprobe driver_1
modprobe driver_0
#EOF
然后,必须将脚本添加到正确的运行级别目录。这可以在Debian上使用“ update-rc.d ”命令轻松完成。例如:update-rc.d reorder-nics start S
第二种方法(我认为更好):
我还发现了一种更优雅的方式(至少对于Debian和Ubuntu系统而言)。
首先,请确保内核不会自动加载NIC驱动程序。这可以通过在中创建黑名单文件来完成/etc/modprobe.d/
。我创建了一个名为“ disable-nics.conf
” 的文件。请注意,其中的文件/etc/modprobe.d/
必须具有.conf
后缀。另外,在其中命名模块/etc/modprobe.d/blacklist.conf
不会影响内核自动加载模块,因此您必须创建自己的文件。
# Disable automatic loading of kernel driver modules
# Disable NIC drivers
blacklist driver_0 # eth0 by default
blacklist driver_1 # eth1 by default
然后以root身份运行' depmod -ae '
用' update-initramfs -u ' 重新创建initrd
最后,以正确的顺序将驱动程序名称添加到/ etc / modules文件中。
# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
# Parameters can be specified after the module name.
# drivers in wanted order
driver_1 # this one should be loaded as eth0
driver_0 # this one should be loaded as eth1
更改应在下次启动后生效。
但是,无需重新启动;使用以下命令轻松切换设备(当然,以root用户身份):
modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0
我在搜索解决方案时发现的一些有用链接: