Estou respondendo à minha própria pergunta agora porque finalmente encontrei uma solução alternativa para esse problema.
Descobri que é possível reordenar os dispositivos descarregando os drivers e carregando-os na ordem correta.
Primeiro método (força bruta):
Portanto, o primeiro método que criei foi simples: forçar o recarregamento do driver com o script init.d.
O script init a seguir foi feito sob medida para o Debian 6.0, mas o mesmo princípio deve funcionar em praticamente qualquer distribuição usando scripts init.d apropriados.
#!/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
Em seguida, o script deve ser adicionado ao diretório de nível de execução apropriado. Isso pode ser feito facilmente no Debian com o comando " update-rc.d ". Por exemplo:update-rc.d reorder-nics start S
Segundo método (melhor eu acho):
Eu também achei uma maneira um pouco mais elegante (pelo menos para os sistemas Debian e Ubuntu).
Primeiro Verifique se o kernel não carrega automaticamente os drivers da NIC. Isso pode ser feito criando um arquivo de lista negra no /etc/modprobe.d/
. Eu criei um arquivo chamado " disable-nics.conf
". Observe que os arquivos em /etc/modprobe.d/
devem ter .conf
sufixo. A nomeação de módulos /etc/modprobe.d/blacklist.conf
também não afeta o carregamento automático de módulos pelo kernel, portanto você precisa criar seu próprio arquivo.
# Disable automatic loading of kernel driver modules
# Disable NIC drivers
blacklist driver_0 # eth0 by default
blacklist driver_1 # eth1 by default
Em seguida, execute ' depmod -ae ' como root
Recrie seu initrd com ' update-initramfs -u '
E, finalmente, adicione os nomes dos drivers na ordem corrigida no arquivo / 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
As alterações devem entrar em vigor após a próxima inicialização.
A reinicialização não é necessária; é fácil alternar os dispositivos com o seguinte comando (como root, é claro):
modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0
Alguns links úteis que encontrei ao pesquisar a solução: