Skip to main content

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
Wichtig: Wenn 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 root oder ü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
Hinweis: Wenn kein Debian-Standardkernel verwendet wird, müssen die passenden Header oder Build-Verzeichnisse vorhanden sein: /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
Hinweis: Wenn noch kein ZFS-Pool existiert, kann 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
Hinweis: Nicht Stable-Kernel, Backports-Header und Stable-ZFS wild mischen, außer der Grund ist klar. APT ist kein Smoothie-Mixer.

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.

Hinweis: Wenn nach dem Neustart weiterhin der alte Kernel läuft, muss die Bootloader-Auswahl geprüft werden. Dann ist nicht ZFS das Problem, sondern das System bootet schlicht nicht den Kernel, für den das Modul gebaut wurde.

Stand: Juni 2026