Saya menjawab pertanyaan saya sendiri sekarang karena saya akhirnya menemukan solusi untuk masalah ini.
Saya menemukan bahwa mungkin untuk memesan ulang perangkat dengan membongkar driver dan kemudian memuatnya dalam urutan yang benar.
Metode pertama (bruteforce):
Jadi metode pertama yang saya buat adalah mudah untuk memaksa driver memuat ulang dengan skrip init.d.
Skrip init berikut dirancang untuk Debian 6.0, tetapi prinsip yang sama harus bekerja pada hampir semua distribusi menggunakan skrip init.d yang tepat.
#!/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
Maka skrip harus ditambahkan ke direktori runlevel yang tepat. Ini dapat dilakukan dengan mudah di Debian dengan perintah " update-rc.d ". Sebagai contoh:update-rc.d reorder-nics start S
Metode kedua (Lebih baik saya pikir):
Saya juga menemukan cara yang sedikit lebih elegan (setidaknya untuk sistem Debian & Ubuntu).
Pertama, pastikan kernel tidak memuat driver NIC secara otomatis. Ini dapat dilakukan dengan membuat file daftar hitam di /etc/modprobe.d/
. Saya membuat file dengan nama " disable-nics.conf
". Perhatikan bahwa file dalam /etc/modprobe.d/
harus memiliki .conf
akhiran. Penamaan modul /etc/modprobe.d/blacklist.conf
juga tidak memengaruhi modul autoloading oleh kernel, jadi Anda harus membuat file Anda sendiri.
# Disable automatic loading of kernel driver modules
# Disable NIC drivers
blacklist driver_0 # eth0 by default
blacklist driver_1 # eth1 by default
Kemudian jalankan ' depmod -ae ' sebagai root
Buat initrd Anda dengan ' update-initramfs -u '
Dan akhirnya menambahkan nama driver dalam urutan yang benar ke file / 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
Perubahan harus mulai berlaku setelah booting berikutnya.
Reboot tidak perlu; mudah untuk berpindah perangkat dengan perintah berikut (sebagai root, tentu saja):
modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0
Beberapa tautan bermanfaat yang saya temukan saat mencari solusinya: