Ich beantworte jetzt meine eigene Frage, weil ich endlich eine Lösung für dieses Problem gefunden habe.
Ich fand heraus, dass es möglich ist, die Geräte neu zu ordnen, indem die Treiber entladen und dann in der richtigen Reihenfolge geladen werden.
Erste Methode (Bruteforce):
Daher war die erste Methode, die ich mir ausgedacht habe, einfach, das Neuladen des Treibers mit dem Skript init.d zu erzwingen.
Das folgende Init-Skript ist auf Debian 6.0 zugeschnitten, aber das gleiche Prinzip sollte auf fast jeder Distribution mit geeigneten Init-Skripten funktionieren.
#!/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
Dann muss das Skript zum richtigen Runlevel-Verzeichnis hinzugefügt werden. Dies kann einfach unter Debian mit dem Befehl " update-rc.d " durchgeführt werden. Beispielsweise:update-rc.d reorder-nics start S
Zweite Methode (Besser denke ich):
Ich habe auch einen etwas eleganteren Weg gefunden (zumindest für Debian & Ubuntu-Systeme).
Stellen Sie zunächst sicher, dass der Kernel die NIC-Treiber nicht automatisch lädt. Dies kann durch Erstellen einer Blacklist-Datei in erfolgen /etc/modprobe.d/
. Ich habe eine Datei mit dem Namen " disable-nics.conf
" erstellt. Beachten Sie, dass Dateien in /etc/modprobe.d/
müssen .conf
Suffix. Das /etc/modprobe.d/blacklist.conf
automatische Laden von Modulen durch den Kernel wird auch durch das Benennen von Modulen in nicht beeinflusst, sodass Sie eine eigene Datei erstellen müssen.
# Disable automatic loading of kernel driver modules
# Disable NIC drivers
blacklist driver_0 # eth0 by default
blacklist driver_1 # eth1 by default
Führen Sie dann ' depmod -ae ' als root aus
Erstellen Sie Ihre initrd mit ' update-initramfs -u ' neu.
Und schließlich fügen Sie die Treibernamen in der korrekten Reihenfolge in die Datei / etc / modules ein .
# /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
Änderungen sollten nach dem nächsten Start wirksam werden.
Ein Neustart ist jedoch nicht erforderlich. Es ist einfach, die Geräte mit folgendem Befehl zu wechseln (natürlich als root):
modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0
Einige nützliche Links, die ich bei der Suche nach der Lösung gefunden habe: