RHEL6でドライバ(カーネルモジュール)のロード順を固定化する方法

  • 4
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

先に書いておくと、ここに書いた方法はあまりやる意味無いです。

互換デバイス名を用いて動作するプログラムが既にあったので、互換デバイス名を固定化しようと暫定対処でこの方法をとりましたが、この方法だとディスク故障時のズレなどの場合、結局対処出来ないため、互換デバイス名を完全に固定することは出来ません。

本来はby-id名などを用い、デバイスのロード順などで名称がずれる互換デバイス名を用いないように実装すべきです。
ただ、古いシステムなどで互換デバイス名が結構問題になる場合はあるので、そういうシステムを触る機会が多い人は知っておいても良いかもしれまえん。本来は、システム更改などがある場合、プログラムなどを更改後のOSの仕様に合わせるべきですが。。。

とはいえ、他に何かしらの用途で利用するかもしれませんので、RHEL6でドライバ(カーネルモジュール)のロード順を固定化する方法を書きます。

で、どうやる?

カーネルオプションの「rdloaddriver」を使用することで、ドライバの読み込み順を制御(固定化)出来ます。

rdloaddriver=<ロードしたいモジュール名> というように指定します。

例えば、ブート時に module1、module2 という順序でカーネルモジュールをロードするように指定したい場合は、/boot/grub/grub.conf のカーネルオプション指定行(※ kernel 行) に以下のように追加します。

/boot/grub/grub.conf
kernel XXXX rdloaddriver=module1 rdloaddriver=module2

注意です

上記の方法で正常動作するのは、初期 RAM ディスク(initramfs)に rdloaddriver で指定したカーネルモジュールが含まれていることが前提です。
一般的な SCSI ドライバのカーネルモジュールはデフォルトで含まれてるのであまり気にする必要はないと思います。
が、含まれてない場合困るので、その方法も以下に書いておきます。

dract —add-drivers コマンドで初期RAMディスクに利用モジュールを追加する

初期RAMディスクに利用したいモジュールが含まれてない場合は、dractコマンドを用いて初期RAMディスクを再生成します。
dracutコマンドを実行する時に--add-driversオプションを用います。
その時に、追加したいカーネルモジュール名を指定し、初期RAMディスク(initramfs)を再作成することで、利用モジュールを initramfs に組み込むことが出来ます。

以下は、module1と、module2を組み込む例です。

# dracut --add-drivers module1 module2 /boot/initramfs-<カーネルver>.img <カーネルver>

特定のモジュールが初期RAMディスクに組み込まれているか確認する方法

現在の初期RAMディスクに、これから利用しようとするモジュールが含まれているか確認した場合があります。

特定のカーネルモジュールが、初期RAMディスク(initramfs) に組み込まれているかどうか、以下のような方法で確認出来ます。以下は、module1が組み込まれているか確認する例です。

# mkdir temp
# cd temp
# gunzip < /boot/initramfs-<カーネルver>.img | cpio -id
# find . -name "module1.ko"
./lib/modules/<カーネルver>/kernel/drivers/aaa/module1.ko

RHEL5系では?

ちなみに、RHEL5系であれば「modprobe.conf」の記載順でドライバのロード順序を制御できます。

RHEL5、6では、この辺のドライバ周りが結構違うので注意です。
現場では、まだまだRHEL5系触るので。。