Je réponds à ma propre question maintenant parce que j'ai finalement trouvé une solution de contournement pour ce problème.
J'ai découvert qu'il était possible de réorganiser les appareils en déchargeant les pilotes puis en les chargeant dans le bon ordre.
Première méthode (bruteforce):
Donc, la première méthode que j'ai trouvée a été simple de forcer le rechargement du pilote avec le script init.d.
Le script d'initialisation suivant est adapté à Debian 6.0, mais le même principe devrait fonctionner sur presque toutes les distributions en utilisant les scripts init.d appropriés.
#!/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
Ensuite, le script doit être ajouté au répertoire de niveau d'exécution approprié. Cela peut être fait facilement sur Debian avec la commande " update-rc.d ". Par exemple:update-rc.d reorder-nics start S
Deuxième méthode (mieux je pense):
J'ai également trouvé un moyen un peu plus élégant (au moins pour les systèmes Debian et Ubuntu).
Assurez-vous d'abord que le noyau ne charge pas automatiquement les pilotes NIC. Cela peut être fait en créant un fichier de liste noire dans /etc/modprobe.d/
. J'ai créé un fichier nommé " disable-nics.conf
". Notez que les fichiers dans /etc/modprobe.d/
doivent avoir le .conf
suffixe. Le fait de nommer les modules dans /etc/modprobe.d/blacklist.conf
n'affecte pas le chargement automatique des modules par le noyau, vous devez donc créer votre propre fichier.
# Disable automatic loading of kernel driver modules
# Disable NIC drivers
blacklist driver_0 # eth0 by default
blacklist driver_1 # eth1 by default
Exécutez ensuite ' depmod -ae ' en tant que root
Recréez votre initrd avec ' update-initramfs -u '
Et enfin, ajoutez les noms des pilotes dans l'ordre corrigé dans le fichier / 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
Les modifications devraient entrer en vigueur après le prochain démarrage.
Le redémarrage n'est cependant pas nécessaire; il est facile de changer les appareils avec la commande suivante (en tant que root, bien sûr):
modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0
Quelques liens utiles que j'ai trouvés en recherchant la solution: