web-dev-qa-db-ja.com

起動時にカーネルモジュールをスキップする

カーネルモジュールが壊れているため、OSをロードすることすらできないため、削除または修正できません。カーネルのパラメータなどを使用して、起動時にこのモジュールをスキップすることは可能ですか?

12
Gris

前の回答で述べたようにモジュールをブラックリストに登録することは、カーネルモジュールを完全に回避するための最良の方法です。ブラックリストに登録する以外に、モジュールを無効にする一般的な方法はありません。

一部のLinuxディストリビューションは、このようなことを行うためのカーネルブートパラメーターを提供します。

  • Arch Linuxの場合load_modules=offudevに自動読み込みをスキップさせます。これにより、モジュールをロードせずに起動し、問題の原因となっているモジュールをブラックリストに登録し、問題のあるモジュールをロードせずに通常どおり再起動できます。
  • Knoppixには 追加のブートパラメータ(別名「チートコード」) ;の長いリストがあります。これらは、通常のカーネルブートパラメータとKnoppix固有の追加機能を組み合わせたものです。

詳細については、 カーネルパラメータのドキュメント を参照してください。特定のサブシステムを無効にするためのパラメーターがあります。例えば:

  • nousbはカーネルUSBサポートを無効にします
  • cgroup_disable=[name]特定のコントローラーを無効にします。ただし、特にサポートされているのは「メモリ」だけです。
  • libata.noacpi libata(SATAコントローラー)でのACPIの使用を無効にします。これは、カーネルを介してモジュールパラメータを渡す例です。
1
quack quixote

特定のモジュールを無効にすることはブートローダーから可能ですが、実際にはディストリビューションに依存しているように見えます。

一方では、 Linuxカーネルパラメータ ドキュメントには、2016年8月の時点で次のように記載されています。

module_blacklist= [KNL]モジュールのコンマ区切りリストをロードしないでください。問題のあるモジュールのデバッグに役立ちます。

一方、openSUSE 42.1(Linux 4.1.31)で機能したオプションは、 Arch Kernel modules wikiで説明されています。

ブートローダーからモジュールをブラックリストに登録することもできます。追加するだけです

modprobe.blacklist=modname1,modname2,modname3

カーネルパラメータで説明されているように、ブートローダーのカーネルラインに。複数のモジュールをブラックリストに登録する場合は、コンマのみで区切ることに注意してください。スペースやその他のものは、おそらく構文を壊す可能性があります。

(これを指摘してくれた nix.SE の@gertvdijkに感謝します。)

また、言及する価値があるのは 次の方法

Grubコマンドラインを使用して特定のモジュールがカーネルによってロードされないようにするには、以下の構文を使用して、それらをパラメーターとしてカーネルラインに渡す必要があります。

$module_name.blacklist=yes

彼らがどこからそれを入手したのか、私には考えがありませんが、他のすべてが失敗した場合でも、他の方法を試してみても害はありません。

7
Anton Samsonov

/etc/modprobe.d/blacklistまたはブラックリスト 'modulename'に追加できるはずです。

1
Gnostus