Estoy respondiendo a mi propia pregunta ahora porque finalmente encontré una solución para este problema.
Descubrí que es posible reordenar los dispositivos descargando los controladores y luego cargándolos en el orden correcto.
Primer método (fuerza bruta):
Entonces, el primer método que se me ocurrió fue simple: fuerza bruta, la recarga del controlador con el script init.d.
El siguiente guión de inicio está diseñado para Debian 6.0, pero el mismo principio debería funcionar en casi cualquier distribución usando los guiones de inicio adecuados.
#!/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
Luego, el script debe agregarse al directorio de nivel de ejecución adecuado. Esto se puede hacer fácilmente en Debian con el comando " update-rc.d ". Por ejemplo:update-rc.d reorder-nics start S
Segundo método (mejor creo):
También encontré una forma un poco más elegante (al menos para los sistemas Debian y Ubuntu).
Primero, asegúrese de que el núcleo no cargue automáticamente los controladores NIC. Esto se puede hacer creando un archivo de lista negra en /etc/modprobe.d/
. Creé un archivo llamado " disable-nics.conf
". Tenga en cuenta que los archivos /etc/modprobe.d/
deben tener .conf
sufijo. Además, nombrar módulos en /etc/modprobe.d/blacklist.conf
no afecta la carga automática de módulos por el núcleo, por lo que debe crear su propio archivo.
# Disable automatic loading of kernel driver modules
# Disable NIC drivers
blacklist driver_0 # eth0 by default
blacklist driver_1 # eth1 by default
Luego ejecute ' depmod -ae ' como root
Recrea tu initrd con ' update-initramfs -u '
Y finalmente agregue los nombres de los controladores en orden corregido en el archivo / 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
Los cambios deben entrar en vigencia después del próximo arranque.
Sin embargo, no es necesario reiniciar; Es fácil cambiar los dispositivos con el siguiente comando (como root, por supuesto):
modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0
Algunos enlaces útiles que encontré mientras buscaba la solución: