Bây giờ tôi đang trả lời câu hỏi của mình vì cuối cùng tôi cũng tìm được cách giải quyết cho vấn đề này.
Tôi phát hiện ra rằng có thể sắp xếp lại các thiết bị bằng cách dỡ trình điều khiển và sau đó tải chúng theo đúng thứ tự.
Phương pháp đầu tiên (bruteforce):
Vì vậy, phương pháp đầu tiên tôi nghĩ ra là đơn giản để cải tiến trình điều khiển tải lại với tập lệnh init.d.
Tập lệnh init được thiết kế riêng cho Debian 6.0, nhưng cùng một nguyên tắc sẽ hoạt động trên hầu hết mọi bản phân phối sử dụng tập lệnh init.d thích hợp.
#!/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
Sau đó, tập lệnh phải được thêm vào thư mục runlevel thích hợp. Điều này có thể được thực hiện dễ dàng trên Debian với lệnh " update-rc.d ". Ví dụ:update-rc.d reorder-nics start S
Phương pháp thứ hai (Tôi nghĩ tốt hơn):
Tôi cũng tìm thấy một cách thanh lịch hơn một chút (ít nhất là đối với các hệ thống Debian & Ubuntu).
Trước tiên, hãy đảm bảo rằng kernel không tự động tải trình điều khiển NIC. Điều này có thể được thực hiện bằng cách tạo một tệp danh sách đen trong /etc/modprobe.d/
. Tôi đã tạo một tập tin có tên " disable-nics.conf
". Lưu ý rằng các tập tin trong /etc/modprobe.d/
phải có .conf
hậu tố. Ngoài ra, việc đặt tên các mô-đun /etc/modprobe.d/blacklist.conf
không ảnh hưởng đến việc tự động tải các mô-đun bằng kernel, vì vậy bạn phải tạo tệp của riêng mình.
# Disable automatic loading of kernel driver modules
# Disable NIC drivers
blacklist driver_0 # eth0 by default
blacklist driver_1 # eth1 by default
Sau đó chạy ' depmod -ae ' với quyền root
Tái tạo initrd của bạn với ' update-initramfs -u '
Và cuối cùng thêm tên trình điều khiển theo thứ tự đã sửa vào tệp / etc / mô-đun .
# /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
Thay đổi sẽ có hiệu lực sau lần khởi động tiếp theo.
Khởi động lại là không cần thiết mặc dù; thật dễ dàng để chuyển đổi các thiết bị bằng lệnh sau (tất nhiên là root):
modprobe -r driver_0; modprobe -r driver_1; modprobe driver_1; modprobe driver_0
Một số liên kết hữu ích tôi tìm thấy trong khi tìm kiếm giải pháp: