Kernel Modules: modprobe & DKMS (Artikel 366)
Beherrschung der Kernel-Module unter Linux. Erfahren Sie alles über das dynamische Laden von Treibern, das Blacklisting problematischer Module und den Einsatz von DKMS für Drittanbieter-Software.
# Kernel Modules Mastery: Hardware-Unterstützung im laufenden Betrieb
TL;DR / Management Summary Ein moderner Kernel ist modular. Treiber für Grafikkarten, Dateisysteme oder Netzwerkkarten liegen als separate Dateien (
.ko) vor und werden erst geladen, wenn sie gebraucht werden. Ein Senior Admin muss wissen, wie er Module mitmodprobesicher lädt, wie er problematische Treiber über Blacklisting deaktiviert und wie er mit DKMS sicherstellt, dass Drittanbieter-Treiber (z.B. Nvidia oder ZFS) auch nach einem Kernel-Update automatisch neu gebaut werden.
# 1. Einführung & Architektur
Der Baukasten des Kernels.
Kernel-Module (.ko - Kernel Objects) leben unter /lib/modules/$(uname -r)/. Sie erweitern die Funktionalität des Kernels, ohne dass ein Reboot nötig ist.
# Die Modul-Hierarchie (Mermaid)
graph TD
A[Linux Kernel] --> B[lsmod: List running modules]
B --> C[Module: ext4]
B --> D[Module: virtio_net]
B --> E[Module: i915 - GPU]
F[modprobe] -->|Load / Unload| A
G[DKMS] -->|Auto-Build| B
H[/etc/modprobe.d/] -->|Blacklist / Options| F
# 2. Management-Tools
Laden, Entladen, Finden.
# lsmod: Was läuft?
lsmod | grep kvm
# Zeigt Module, deren Größe und Abhängigkeiten (Used by).
# modprobe: Der intelligente Lader
Nutzen Sie immer modprobe statt insmod, da es Abhängigkeiten automatisch auflöst.
# Modul laden
sudo modprobe wireguard
# Modul entfernen (nur wenn unbenutzt!)
sudo modprobe -r wireguard
# 3. Persistenz & Konfiguration
Einstellungen zementieren.
# Module beim Booten laden
Legen Sie eine Datei in /etc/modules-load.d/ an:
# /etc/modules-load.d/networking.conf
bonding
8021q
# Blacklisting (Module verbieten)
Wenn ein Treiber Probleme macht (z.B. der freie nouveau Treiber statt nvidia):
Datei: /etc/modprobe.d/blacklist.conf
blacklist nouveau
install nouveau /bin/false
# 4. Day-2 Operations: DKMS
Überleben nach dem Update.
Wenn Sie Treiber nutzen, die nicht im Standard-Kernel sind (z.B. ZFS oder Broadcom), nutzen Sie DKMS (Dynamic Kernel Module Support).
# Funktionsweise
DKMS überwacht Kernel-Updates. Sobald ein neuer Kernel installiert wird, triggert DKMS automatisch das Neukompilieren des Treibers gegen die neuen Kernel-Header.
# Status prüfen
sudo dkms status
# 5. Troubleshooting & “War Stories”
Wenn der Treiber klemmt.
# Story 1: “Der hängende Modprobe”
Symptom: Ein modprobe -r Befehl hängt ewig und lässt sich nicht beenden.
Ursache: Das Modul wird noch von einem Prozess oder einer Hardware-Ressource benutzt. Der Ref-Count in lsmod ist > 0.
Lösung: Finden Sie die Abhängigkeit: lsmod | grep <name>. Beenden Sie den Dienst, der das Modul nutzt (z.B. Docker für Overlay-Module). Erzwingen Sie niemals einen Unload eines benutzten Moduls (-f), da dies fast immer zu einer Kernel-Panic führt.
# Story 2: “Das verschwundene Modul nach Update”
Symptom: Nach einem Reboot sind ZFS-Pools weg. modprobe zfs meldet “Module not found”.
Ursache: Das System hat einen neuen Kernel erhalten, aber die passenden Header-Dateien fehlten, sodass DKMS den Treiber nicht bauen konnte.
Lösung: Installieren Sie die kernel-devel (RHEL) oder linux-headers (Arch), die exakt zur laufenden Version passen, und führen Sie dkms autoinstall manuell aus.
# 6. Fazit & Empfehlung
- Pflicht: Nutzen Sie
modprobefür alle täglichen Aufgaben. - Wahl: Nutzen Sie Blacklisting für alle unnötigen Features (z.B. Firewire, PC-Speaker), um die Angriffsfläche zu verringern.
- Wartung: Prüfen Sie nach jedem Kernel-Update den Status Ihrer DKMS-Module.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Liste laufender Module | lsmod |
| Modul laden | modprobe <name> |
| Modul entfernen | modprobe -r <name> |
| Modul-Info | modinfo <name> |
| Modul-Abhängigkeiten | modprobe --show-depends <name> |
| DKMS Status | dkms status |
| Alle installierten Mods | find /lib/modules/$(uname -r) -type f -name "*.ko*" |
| Blacklist Pfad | /etc/modprobe.d/ |
| Autostart Pfad | /etc/modules-load.d/ |
| Modul Parameter | cat /sys/module/<name>/parameters/<param> |