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


12

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


回答:


1

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

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

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

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

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

7

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

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

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

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

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

modprobe.blacklist=modname1,modname2,modname3

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

(おかげで@gertvdijkする  unix.SEこのアウトを指し示すため。)

また、次のメソッドも言及する価値があります

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

$module_name.blacklist=yes

私は彼らがそれをどこから得たのかわかりませんが、他のすべてが失敗した場合でも他の方法を試しても間違いはありません。


「$ module_name.blacklist = yes」が機能する理由についても同じ質問があります。それはカーネルコードのこの部分に関連していると思います:git.kernel.org/pub/scm/linux/kernel/git/stable/linux- stable.git /…
Johnlcf 2017年

1

/etc/modprobe.d/blacklistまたはブラックリスト「モジュール名」に追加できるはずです


これは機能しますが、別のカーネル(利用可能な場合)またはLiveCDシステムで起動する必要があります。
quack quixote、
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.