カーネル・モジュールの管理

ロードされたカーネル・モジュールを検査し、パラメータを調整し、Oracle Linuxにロードするモジュールを制御する方法について説明します。

lsmodコマンドを使用して、実行中のカーネルにロードされているモジュールを表示します。カーネルモジュールに関する情報を調べるには、modinfoコマンドを使用します。modprobeコマンドを使用して、実行中のカーネルにモジュールをロードしたり、カーネルモジュールのパラメータを変更したりします。/etc/modprobe.d/に構成ファイルを作成して、カーネル・モジュールのロード時に使用されるパラメータを制御することもできます。/etc/modules-load.d/の構成を編集して、ブート時にモジュールがロードされるかどうかを構成することもできます。

ロードしたモジュールに関する情報の一覧表示

lsmodコマンドを使用して、カーネルにロードされるモジュールを一覧表示し、modinfoコマンドを使用して各モジュールの詳細を確認します。詳細は、lsmod(5)およびmodinfo(8)の各マニュアル・ページを参照してください。
  1. lsmodコマンドを実行して、カーネルにロードされているモジュールをリストします。
    lsmod
    Module                  Size  Used by
    udp_diag               16384  0
    ib_core               311296  0
    tcp_diag               16384  0
    inet_diag              24576  2 tcp_diag,udp_diag
    nfsv3                  49152  0
    nfs_acl                16384  1 nfsv3
    ...
    dm_mirror              24576  0
    dm_region_hash         20480  1 dm_mirror
    dm_log                 20480  2 dm_region_hash,dm_mirror
    ...

    出力には、モジュール名、使用しているメモリーの量、モジュールを使用しているプロセスの数、およびそのモジュールが依存している他のモジュールの名前が表示されます。たとえば、モジュールdm_logは、dm_region_hashおよびdm_mirrorモジュールによって異なります。この例は、2つのプロセスが3つのモジュールすべてを使用していることも示しています。

  2. modinfoコマンドを使用して、モジュールに関する詳細情報を表示します。
    modinfo ahci
    filename:       /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/drivers/ata/ahci.ko.xz
    version:        3.0
    license:        GPL
    description:    AHCI SATA low-level driver
    author:         Jeff Garzik
    srcversion:     1DC2CDA088C5DC03187A5E0
    alias:          pci:v*d*sv*sd*bc01sc06i01*
    ...
    depends:        libata,libahci
    intree:         Y
    name:           ahci
    retpoline:      Y
    vermagic:       6.12.0-100.28.2.el10uek.x86_64 SMP preempt mod_unload modversions 
    sig_id:         PKCS#7
    signer:         Oracle CA Server
    sig_key:        7B:38:D7:DC:38:51:E7:C7:F1:61:C5:5D:8D:CC:6B:1C:90:82:4D:05
    sig_hashalgo:   sha512
    signature:      64:05:FC:CC:B1:D3:88:91:B6:C9:A2:39:A3:A9:BB:8C:95:11:36:20:
                    62:9C:95:D9:8B:B8:F6:5F:CC:D2:93:4E:7D:59:E1:80:DB:70:FA:4C:
                    9B:8D:75:E3:98:AB:9D:BD:94:93:A7:72:0B:28:3B:15:4E:96:0D:E3:
                    9F:FE:24:1A:09:B5:31:27:F2:EE:45:61:C8:4A:D3:4B:82:07:23:66:
                    A1:06:F4:DF:B9:FF:D2:78:08:1D:AA:EC:DE:3C:E4:17:BD:69:6A:A5:
    
                    ...
                    64:F0:4F:E2:4E:F3:47:A5:40:E8:F7:07:68:3F:58:25:32:BA:13:E9:
                    00:46:7A:2F:30:73:B4:32:48:76:6B:1E
    parm:           marvell_enable:Marvell SATA via AHCI (1 = enabled) (int)
    parm:           mobile_lpm_policy:Default LPM policy for mobile chipsets (int)
    ...

    出力には次の情報が含まれます。

    filename

    カーネル・オブジェクト・ファイルの絶対パス。

    version

    モジュールのバージョン番号。パッチが適用されたモジュールのバージョン番号は更新されない可能性があり、新しいカーソルで見つからないか削除される可能性があることに注意してください。

    license

    モジュールのライセンス情報。

    description

    モジュールの簡単な説明。

    author

    モジュールの作成者クレジット。

    srcversion

    モジュールを作成するために使用されたソース・コードのハッシュ。

    alias

    モジュールの内部別名。

    depends

    このモジュールが依存しているモジュールのカンマ区切りリスト。

    retpoline

    Spectreのセキュリティ脆弱性に対する緩和を含むモジュールが構築されていることを示すフラグ。

    name
    モジュールの名前。
    intree

    モジュールがカーネル内のツリー・ソースから構築され、汚染されないことを示すフラグ。

    vermagic

    モジュールのコンパイルに使用されたカーネル・バージョンであり、モジュールのロード時に現在のカーネルに対してチェックされます。

    sig_id

    セキュア・ブート用のモジュールの署名に使用された可能性がある署名キーの格納に使用されるメソッド(通常はPKCS#7)

    signer

    セキュア・ブートのモジュールに署名するために使用される署名キーの名前。

    sig_key

    モジュールの署名に使用されるキーの署名キー識別子。

    sig_hashalgo

    署名済モジュールの署名ハッシュの生成に使用されるアルゴリズム。

    signature

    署名済モジュールの署名データ。

    parm

    モジュール・パラメータおよび説明。

  3. modinfo -nコマンドを使用して、ファイル・システム上のモジュールへのファイル・パスを検索します。

    モジュールは、カーネル・オブジェクト・ファイル(/lib/modules/kernel_version/kernel/*ko*)からカーネルにロードされます。カーネル・オブジェクト・ファイルの絶対パスを表示するには、-nオプションを指定します。次に例を示します。

    modinfo -n parport
    /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/drivers/parport/parport.ko.xz

モジュールのロードおよびアンロード

モジュールは、modprobeコマンドを使用してロードおよびアンロードされます。詳細は、modprobe(8)およびmodules.dep(5)の各マニュアル・ページを参照してください。
  1. modprobeコマンドを使用してカーネル・モジュールをロードします。

    modprobeコマンドでは、次のようなカーネル・モジュールをロードします。

    sudo modprobe nfs
    sudo lsmod | grep nfs
    nfs                   266415  0 
    lockd                  66530  1 nfs
    fscache                41704  1 nfs
    nfs_acl                 2477  1 nfs
    auth_rpcgss            38976  1 nfs
    sunrpc                204268  5 nfs,lockd,nfs_acl,auth_rpcgss

    -v (詳細)オプションを含めるとともに、依存関係を解決するために他のモジュールがロードされるかどうかが表示されます。

    sudo modprobe -v nfs
    insmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko 
    insmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/nfs_common/nfs_acl.ko 
    insmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/fscache/fscache.ko 
    ...
    ノート

    modprobeコマンドは、すでにロードされているモジュールを再ロードしません。モジュールを再度ロードするには、最初にアンロードする必要があります。

  2. modprobe -rコマンドを使用して、モジュールをアンロードします。

    カーネル・モジュールのアンロードには、-rオプションを使用します。

    sudo modprobe -rv nfs
    rmmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/nfs/nfs.ko
    rmmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/lockd/lockd.ko
    rmmod /lib/modules/6.12.0-100.28.2.el10uek.x86_64/kernel/fs/fscache/fscache.ko
    ...

    モジュールは、最初にロードされた順序と逆にアンロードされます。モジュールは、プロセスまたは別のロード済モジュールで必要な場合はアンロードされません。

カーネル・モジュール・パラメータの変更

ハードウェア・ドライバなどのカーネル・モジュールには、多くの場合、ドライバまたはモジュールの動作を変更するために設定できるカスタム・パラメータがあります。モジュール・パラメータを更新するには、いくつかのメカニズムを使用できます。
  1. sysfsを使用して、モジュール・パラメータを即時に更新します。

    また、/sys/module/module_name/parametersの下のファイルに新しい値を記述して、ロードされたモジュールおよび組込みドライバのパラメータの一部の値を変更することもできます。たとえば:

    echo 0 | sudo tee /sys/module/ahci/parameters/skip_host_reset

    /sys仮想ファイル・システムについておよびsysfsディレクトリ・リファレンスを参照してください。

    変更は永続的ではなく、再起動後に自動的に適用されないことに注意してください。

  2. modprobeコマンドを使用して、モジュールの実行中の構成を変更します。

    モジュールの動作を変更するには、modprobeコマンドでモジュールのパラメータを指定します。

    sudo modprobe module_name parameter=value ...

    パラメータと値のペアをスペースで区切ります。配列値は、カンマ区切りリストで表します。たとえば:

    sudo modprobe foo parm=bar arrayparm=1,2,3,4
  3. modprobe構成を更新して、より永続的なモジュール構成を変更します。
    構成ファイル(/etc/modprobe.d/*.conf)は、モジュール・オプションを指定し、モジュール別名を作成し、特別な要件があるモジュールに対するmodprobeの通常動作をオーバーライドします。以前のバージョンのmodprobeで使用されていた/etc/modprobe.confファイルも有効です(存在する場合)。/etc/modprobe.confファイルと/etc/modprobe.d/*.confファイルのエントリには同じ構文を使用します。詳細は、Modprobe Configuration Referenceを参照してください。

ブート時にロードされるモジュールの指定

ほとんどのモジュールはブート時に自動的にロードされます。/etc/modules-load.dディレクトリにモジュールの構成ファイルを作成することで、ロードするモジュールを追加することもできます。ファイル名の拡張子は.confです。

/etc/modules-load.dディレクトリへの変更は、再起動後も保持されます。

  1. ブート時にモジュールを強制的にロードするには、モジュールの/etc/modules-load.dに構成ファイルを作成します。
    たとえば、ブート時にbnxt_en.confを強制的にロードするには、次のコマンドを実行します。
    echo bnxt_en | sudo tee /etc/modules-load.d/bnxt_en.conf
  2. ファイルが存在し、モジュール名が含まれていることを確認します。
    cat /etc/modules-load.d/bnxt_en.conf

    モジュールがまだロードされていない場合は、modprobeコマンドを使用して手動でロードするか、システムをリブートして、指定した構成を使用して自動的にロードできます。

ブート時のモジュールのロードの防止

ブート時にモジュールがロードされないようにするには、/etc/modprobe.dディレクトリの構成ファイルに拒否ルールを追加し、ブート時にカーネルのロードに使用される初期RAMディスクを再構築します。

警告

モジュールを無効にすると意図しない結果になる可能性があり、システムがブートしなくなったか、ブート後に完全に機能するようになったりすることがあります。ベスト・プラクティスとして、変更を行う前にバックアップRAMディスク・イメージを作成し、構成が正しいことを確認してください。

  1. 構成ファイルを作成して、モジュールがロードされないようにします。

    例:

    sudo tee /etc/modprobe.d/bnxt_en-deny.conf <<'EOF'
    #DENY bnxt_en
    blacklist bnxt_en
    install bnxt_en /bin/false
    EOF
  2. 最初のRAMディスク・イメージを再構築します。
    sudo dracut -f -v
  3. システムをリブートすると、変更内容が有効になります。
    sudo reboot

弱い更新モジュールの削除

場合によっては、出荷済ドライバの問題が新しいカーネルで解決された場合など、新しいカーネルのかわりに弱い更新モジュールを削除する場合があります。この場合、ドライバ更新の一部としてインストールした外部モジュールではなく、新しいドライバを使用することをお薦めします。詳細は、「弱い更新モジュールについて」を参照してください。

弱い更新モジュールを削除するには、2つの異なる方法を使用できます。

  1. シンボリック・リンクを手動で削除してください。

    弱い更新モジュールはシステム上のカーネルバージョンごとにシンボリックリンクされているため、適用しない各カーネルからモジュールのシンボリックリンクを削除できます。例:

    sudo rm -rf /lib/modules/6.12.0-100.28.2.el10uek.x86_64/weak-updates/kmod-kvdo

    この例では、弱い更新モジュールkmod-kvdoがカーネル6.12.0-100.28.2.el10uek.x86_64から削除されています。

  2. weak-modulesコマンドを使用して、モジュールを削除します。

    weak-modulesコマンドを使用すると、互換性のあるすべてのカーネルの指定された弱い更新モジュールを削除したり、このコマンドを使用して現在のカーネルの弱い更新モジュールを削除したりできます。weak-modulesコマンドを使用すると弱い更新モジュールを追加することも同様です。このコマンドの詳細は、次を実行します。

    weak-modules -h

    また、weak-modulesコマンドをdry-runオプションとともに使用して、実際の変更を行わずに結果をテストすることもできます。次に例を示します:

    weak-modules --remove-kernel --dry-run --verbose