ZFS modules cannot be auto-loaded
ZFS-DKMS – Schritt-für-Schritt-Anleitung für Debian 13 (Trixie)
Diese Anleitung fasst die notwendigen Schritte zusammen, um OpenZFS als DKMS-Modul auf Debian 13 zu installieren, nach Kernel-Updates neu zu bauen und typische Fehler zu beheben. Besonders wichtig ist der Fall, dass ZFS zwar erfolgreich für einen neuen Kernel gebaut wurde, das System aber noch mit einem alten Kernel läuft.
0 Wichtig: Laufender Kernel und DKMS-Modul müssen zusammenpassen
DKMS baut Kernelmodule immer für bestimmte Kernelversionen. modprobe lädt Module aber nur für den aktuell laufenden Kernel. Der aktuell laufende Kernel wird so angezeigt:
uname -r
Der DKMS-Status wird so angezeigt:
dkms status
uname -r einen anderen Kernel zeigt als dkms status, dann ist ZFS nicht für den aktuell laufenden Kernel installiert. In diesem Fall hilft oft kein weiterer Build, sondern ein Neustart in den Kernel, für den DKMS das Modul bereits gebaut hat.Beispiel:
uname -r
6.12.74+deb13+1-amd64
dkms status
zfs/2.3.2, 6.12.90+deb13.1-amd64, x86_64: installed
In diesem Beispiel läuft das System noch mit Kernel 6.12.74+deb13+1-amd64, ZFS wurde aber für 6.12.90+deb13.1-amd64 gebaut. modprobe zfs muss dann fehlschlagen, weil es im falschen Modulverzeichnis sucht.
1 Voraussetzungen
- Root-Zugriff, entweder direkt als
rootoder über eine Root-Shell. - Netzwerkzugang zu den Debian-Repositories.
- Aktiviertes
contrib-Repository, da ZFS in Debian dort liegt. - Optional bei Secure Boot: MOK-Schlüssel müssen importiert und bestätigt werden.
2 Repositories einrichten
ZFS liegt in Debian in contrib. Stelle daher sicher, dass contrib aktiv ist. Optional können non-free und non-free-firmware ergänzt werden, wenn das System entsprechende Firmware benötigt.
Beispiel für /etc/apt/sources.list oder eine passende Datei unter /etc/apt/sources.list.d/:
deb http://deb.debian.org/debian trixie main contrib non-free non-free-firmware
deb http://security.debian.org/debian-security trixie-security main contrib non-free non-free-firmware
deb http://deb.debian.org/debian trixie-updates main contrib non-free non-free-firmware
Optional für Backports:
deb http://deb.debian.org/debian trixie-backports main contrib non-free non-free-firmware
Danach die Paketlisten aktualisieren:
apt update
3 Benötigte Pakete installieren
Empfohlen ist die Installation der Kernel- und Header-Metapakete. Dadurch werden Kernel und Header gemeinsam aktuell gehalten, statt dass man irgendwann mit einem Kernel ohne passende Header herumsteht. Das ist ungefähr so sinnvoll wie ein Fahrrad ohne Vorderrad, nur mit mehr Fehlermeldungen.
apt install linux-image-amd64 linux-headers-amd64
Danach ZFS und die Build-Werkzeuge installieren:
apt install build-essential dkms zfs-dkms zfsutils-linux
Falls DKMS wegen pahole oder BTF-Erzeugung fehlschlägt:
apt install dwarves
/lib/modules/$(uname -r)/build und /lib/modules/$(uname -r)/source.4 Nach Kernel- oder Header-Update neu starten
Wenn ein neuer Kernel installiert wurde, läuft das System nicht automatisch mit diesem Kernel. Der neue Kernel wird erst nach einem Neustart verwendet.
Vor dem Neustart kann man prüfen, welche Kernelmodul-Verzeichnisse vorhanden sind:
ls /lib/modules
Außerdem den DKMS-Status prüfen:
dkms status
Wenn ZFS für einen neuen Kernel gebaut wurde, aber uname -r noch den alten Kernel zeigt:
reboot
Nach dem Neustart erneut prüfen:
uname -r
dkms status
Der laufende Kernel aus uname -r sollte jetzt zu einem ZFS-Eintrag aus dkms status passen.
5 ZFS-Modul laden und prüfen
Wenn der laufende Kernel und der DKMS-Eintrag zusammenpassen, kann das ZFS-Modul geladen werden:
modprobe zfs
Danach prüfen:
lsmod | sed -n '/^zfs/p'
zpool status -v
zpool status melden, dass keine Pools vorhanden sind. Das ist dann kein Fehler des Kernelmoduls.6 ZFS gezielt für den laufenden Kernel bauen
Diesen Schritt nur verwenden, wenn dkms status keinen installierten ZFS-Eintrag für den aktuell laufenden Kernel zeigt.
ZFS-Version aus dem installierten Paket ermitteln:
ZFS_VER="$(dpkg-query -W -f='${Version}\n' zfs-dkms | sed 's/-.*//')"
echo "$ZFS_VER"
ZFS für den aktuell laufenden Kernel bauen und installieren:
dkms install -m zfs -v "$ZFS_VER" -k "$(uname -r)"
Danach laden:
modprobe zfs
Wenn der Build fehlschlägt, das DKMS-Log ansehen:
less /var/lib/dkms/zfs/"$ZFS_VER"/build/make.log
7 Häufiger Fehler: Header für den aktuell laufenden Kernel fehlen
Typisches Fehlerbild:
apt install linux-headers-$(uname -r)
Fehler: Paket linux-headers-6.12.74+deb13+1-amd64 kann nicht gefunden werden.
Fehler: Mittels des Musters »linux-headers-6.12.74+deb13+1-amd64« konnte kein Paket gefunden werden.
Das bedeutet meistens: Der aktuell laufende Kernel ist nicht mehr der Kernel, für den die Repositories aktuell Header anbieten. Statt ewig nach alten Headern zu suchen, sollte man die Kernel- und Header-Metapakete installieren:
apt install linux-image-amd64 linux-headers-amd64
Wenn DKMS dabei ZFS erfolgreich für den neuen Kernel baut, danach neu starten:
reboot
Nach dem Neustart:
uname -r
dkms status
modprobe zfs
8 Backports nur bei Bedarf verwenden
Backports sind sinnvoll, wenn ein neuerer Kernel verwendet wird oder wenn die ZFS-Version aus Stable zu alt für den verwendeten Kernel ist.
ZFS aus Backports installieren:
apt install -t trixie-backports zfs-dkms zfsutils-linux
Wenn auch der Kernel aus Backports verwendet werden soll:
apt install -t trixie-backports linux-image-amd64 linux-headers-amd64
Danach neu starten:
reboot
Nach dem Neustart prüfen:
uname -r
dkms status
modprobe zfs
zpool status -v
9 Secure Boot prüfen
Wenn Secure Boot aktiv ist, können nicht korrekt signierte oder nicht akzeptierte Module blockiert werden.
Typische Fehlermeldungen:
modprobe: ERROR: could not insert 'zfs': Key was rejected by service
Required key not available
Secure-Boot-Status prüfen:
mokutil --sb-state
Wenn Secure Boot aktiv ist, gibt es zwei saubere Möglichkeiten:
- Secure Boot im UEFI deaktivieren.
- Den DKMS/MOK-Schlüssel importieren und beim nächsten Boot bestätigen.
Beim DKMS-Build sieht man häufig Hinweise wie:
Signing key: /var/lib/dkms/mok.key
Public certificate (MOK): /var/lib/dkms/mok.pub
Dann kann der öffentliche Schlüssel importiert werden:
mokutil --import /var/lib/dkms/mok.pub
Danach neu starten und im MOK-Menü bestätigen.
10 Alte Kernel nicht vorschnell entfernen
Alte Kernel sollten erst entfernt werden, wenn ZFS mit dem neuen Kernel erfolgreich geladen wurde.
uname -r
dkms status
modprobe zfs
zpool status -v
Wenn alles funktioniert, können alte nicht mehr benötigte Pakete später bereinigt werden:
apt autoremove
11 Problemlösung und häufige Stolperfallen
| Symptom | Wahrscheinliche Ursache | Lösung |
|---|---|---|
modprobe: FATAL: Module zfs not found in directory /lib/modules/<kernel> |
ZFS wurde nicht für den aktuell laufenden Kernel gebaut. | uname -r und dkms status vergleichen. |
linux-headers-$(uname -r) kann nicht gefunden werden. |
Der laufende Kernel ist älter oder stammt nicht mehr aus den aktuell verfügbaren Repositories. | linux-image-amd64 und linux-headers-amd64 installieren, danach neu starten. |
DKMS zeigt ZFS für einen neueren Kernel als uname -r. |
Der neue Kernel wurde installiert, aber noch nicht gebootet. | System neu starten und danach erneut prüfen. |
DKMS-Build schlägt wegen pahole fehl. |
Das Paket dwarves fehlt. |
apt install dwarves |
| Modul wird wegen Schlüssel abgelehnt. | Secure Boot blockiert das Modul. | Secure Boot deaktivieren oder MOK-Schlüssel enrollen. |
| Build bricht mit Kernel-API-Fehlern ab. | Die installierte ZFS-Version passt nicht zum verwendeten Kernel. | ZFS aus trixie-backports nutzen oder auf den Debian-Stable-Kernel wechseln. |
12 Schnellreferenz
Standardfall Debian 13 Stable
apt update
apt install linux-image-amd64 linux-headers-amd64
apt install build-essential dkms zfs-dkms zfsutils-linux
reboot
Nach dem Neustart:
uname -r
dkms status
modprobe zfs
zpool status -v
Wenn ZFS für den laufenden Kernel fehlt
ZFS_VER="$(dpkg-query -W -f='${Version}\n' zfs-dkms | sed 's/-.*//')"
dkms install -m zfs -v "$ZFS_VER" -k "$(uname -r)"
modprobe zfs
Wenn ein neuerer Backports-Kernel genutzt wird
apt install -t trixie-backports linux-image-amd64 linux-headers-amd64
apt install -t trixie-backports zfs-dkms zfsutils-linux
reboot
Danach:
uname -r
dkms status
modprobe zfs
zpool status -v
13 Praxisbeispiel: ZFS wurde gebaut, aber der alte Kernel läuft noch
Ausgangslage:
uname -r
6.12.74+deb13+1-amd64
Die Header für diesen Kernel sind nicht installierbar:
apt install linux-headers-6.12.74+deb13+1-amd64
Fehler: Paket linux-headers-6.12.74+deb13+1-amd64 kann nicht gefunden werden.
Fehler: Mittels des Musters »linux-headers-6.12.74+deb13+1-amd64« konnte kein Paket gefunden werden.
Danach werden die Metapakete installiert:
apt install linux-image-amd64 linux-headers-amd64
DKMS baut ZFS erfolgreich für den neuen Kernel:
Autoinstall of module zfs/2.3.2 for kernel 6.12.90+deb13.1-amd64 (x86_64)
Building module(s)................................................. done.
Installing /lib/modules/6.12.90+deb13.1-amd64/updates/dkms/zfs.ko.xz
Autoinstall on 6.12.90+deb13.1-amd64 succeeded for module(s) zfs.
Trotzdem schlägt modprobe zfs fehl:
modprobe: FATAL: Module zfs not found in directory /lib/modules/6.12.74+deb13+1-amd64
Der Grund ist simpel: Das System läuft noch mit 6.12.74+deb13+1-amd64. ZFS wurde aber für 6.12.90+deb13.1-amd64 gebaut. Der Build ist also erfolgreich, aber der falsche Kernel ist aktiv.
Korrekte Lösung:
reboot
Nach dem Neustart:
uname -r
dkms status
modprobe zfs
Wenn uname -r jetzt 6.12.90+deb13.1-amd64 oder einen anderen Kernel mit passendem ZFS-DKMS-Eintrag zeigt, sollte modprobe zfs funktionieren.
No Comments