Я зараз відповідаю на власне запитання, тому що нарешті знайшов вирішення цієї проблеми.
Я з’ясував, що можна переупорядкувати пристрої, вивантаживши драйвери та потім завантаживши їх у правильному порядку.
Перший метод (груба сила):
Таким чином, перший метод, який я придумав, був простим, щоб змусити перезавантажити драйвер зі скриптом init.d.
Наступний сценарій init розроблений для Debian 6.0, але той самий принцип повинен працювати майже на будь-якому дистрибутиві, використовуючи належні сценарії init.d.
#!/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
Потім сценарій повинен бути доданий у відповідний каталог runlevel. Це можна зробити легко на Debian за допомогою команди " update-rc.d ". Наприклад:update-rc.d reorder-nics start S
Другий метод (краще я думаю):
Я також знайшов трохи більш елегантний спосіб (принаймні для систем Debian & Ubuntu).
Спочатку переконайтеся, що ядро не завантажує автоматично драйвери NIC. Це можна зробити, створивши файл чорного списку в /etc/modprobe.d/
. Я створив файл під назвою " disable-nics.conf
". Зауважте, що файли у файлі /etc/modprobe.d/
повинні мати .conf
суфікс. Також іменування модулів /etc/modprobe.d/blacklist.conf
не впливає на автоматичне завантаження модулів ядром, тому вам доведеться створити власний файл.
# Disable automatic loading of kernel driver modules
# Disable NIC drivers
blacklist driver_0 # eth0 by default
blacklist driver_1 # eth1 by default
Потім запустіть ' depmod -ae ' як корінь
Відтворіть свій initrd за допомогою " update-initramfs -u "
І нарешті додайте імена драйверів у виправленому порядку до файлу / etc / module .
# /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
Зміни повинні набути чинності після наступного завантаження.
Перезавантаження не потрібно, хоча; легко перемикати пристрої за допомогою наступної команди (як звичайно, root):
modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0
Деякі корисні посилання, які я знайшов під час пошуку рішення: