Kernelmodul beim Booten überspringen


12

Es gibt ein defektes Kernelmodul, aufgrund dessen ich das Betriebssystem nicht einmal laden kann, sodass ich es nicht löschen oder reparieren kann. Ist es möglich, dieses Modul beim Booten mit den Kernel-Parametern oder etwas anderem zu überspringen?


Antworten:


1

Das Blacklisting des Moduls wie in der vorherigen Antwort erwähnt ist der beste Weg, um ein Kernelmodul vollständig zu vermeiden. Abgesehen von der schwarzen Liste gibt es keine generische Möglichkeit, ein Modul zu deaktivieren.

Einige Linux-Distributionen bieten Kernel-Boot-Parameter, um solche Dinge zu tun.

  • load_modules=offErzwingt unter Arch Linux , dass udev das automatische Laden überspringt. Auf diese Weise können Sie starten, ohne Module zu laden, ein Modul auf die schwarze Liste setzen, das Probleme verursacht, und normal neu starten, ohne dass das problematische Laden des Moduls erforderlich ist.
  • Knoppix hat eine lange Liste zusätzlicher Boot-Parameter (auch bekannt als "Cheatcodes") ; Dies ist eine Mischung aus normalen Kernel-Boot-Parametern und Knoppix-spezifischen Extras.

Weitere Informationen finden Sie in der Dokumentation zu den Kernelparametern . Es gibt Parameter zum Deaktivieren bestimmter Subsysteme. Zum Beispiel:

  • nousb Deaktiviert die USB-Unterstützung des Kernels
  • cgroup_disable=[name]deaktiviert einen bestimmten Controller; "Speicher" ist jedoch das einzige Beispiel, das speziell unterstützt wird
  • libata.noacpiDeaktiviert die Verwendung von ACPI in libata (SATA-Controller). Dies ist ein Beispiel für die Übergabe eines Modulparameters über den Kernel

7

Das Deaktivieren bestimmter Module ist über den Bootloader möglich, scheint jedoch tatsächlich von der Distribution abhängig zu sein.

Einerseits heißt es in den Dokumentationen zu Linux-Kernelparametern ab August 2016:

module_blacklist= [KNL] Laden Sie keine durch Kommas getrennte Liste von Modulen. Nützlich zum Debuggen von Problemmodulen.

Andererseits wird die Option, die für mich mit openSUSE 42.1 (Linux 4.1.31) funktioniert hat, im  Wiki der Arch Kernel-Module beschrieben :

Sie können Module auch vom Bootloader aus auf die schwarze Liste setzen. Einfach hinzufügen

modprobe.blacklist=modname1,modname2,modname3

an die Kernel-Zeile Ihres Bootloaders, wie unter Kernel-Parameter beschrieben. Wenn Sie mehr als ein Modul auf die schwarze Liste setzen, beachten Sie, dass diese nur durch Kommas getrennt sind. Leerzeichen oder irgendetwas anderes könnten vermutlich die Syntax brechen.

(Vielen Dank an @gertvdijk unter  unix.SE für den Hinweis.)

Erwähnenswert ist auch die folgende Methode :

Um zu verhindern, dass bestimmte Module über die Befehlszeile grub vom Kernel geladen werden, müssen Sie sie mithilfe der folgenden Syntax als Parameter an die Kernelzeile übergeben.

$module_name.blacklist=yes

Ich habe keine Ahnung, woher sie das haben, aber es wird definitiv nicht schaden, eine andere Methode auszuprobieren, wenn alles andere fehlschlägt.


Ich habe die gleiche Frage, warum "$ module_name.blacklist = yes" funktioniert, und ich denke, dass es mit diesem Teil des Kernel-Codes zusammenhängt: git.kernel.org/pub/scm/linux/kernel/git/stable/linux- Stable.git /…
Johnlcf

1

Sie sollten es entweder zu /etc/modprobe.d/blacklist oder zur Blacklist 'modulename' hinzufügen können.


Dies funktioniert, erfordert jedoch das Booten auf einem anderen Kernel (falls verfügbar) oder einem LiveCD-System.
Quacksalber Quijote
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.