initramfs und dracut: Wie Linux beim Booten das Root Dateisystem findet
AI generated
$
/etc
Linux
initramfs und dracut
Wie Linux beim Booten das Root Dateisystem findet

Zwischen dem Laden des Kernels und dem eigentlichen Root Dateisystem liegt ein Schritt, der auf den meisten Servern unsichtbar bleibt, bis er fehlschlägt: das initramfs. Wer LVM, LUKS oder ein individuelles Storage Setup betreibt, muss verstehen, wie dracut dieses minimale Vorab System baut, damit ein unable to mount root nicht zur stundenlangen Fehlersuche wird.

10 Min. Lesezeit Linux initramfs dracut

1. Warum der Kernel ein initramfs braucht

Der Linux Kernel selbst enthält beim Booten nur eine begrenzte Auswahl fest eingebauter Treiber und kennt das eigentliche Root Dateisystem zunächst überhaupt nicht. Liegt Root auf einem LVM Volume, hinter LUKS Verschlüsselung, auf einem Software RAID oder gar auf einem entfernten iSCSI Target, fehlt dem Kernel ohne Zusatzschritt schlicht das Wissen, wie er dorthin gelangt.

Das initramfs, ein initiales RAM Dateisystem, löst genau dieses Henne Ei Problem: Es ist ein komprimiertes cpio Archiv, das der Bootloader zusammen mit dem Kernel in den Arbeitsspeicher lädt und das alle Kernel Module sowie Userspace Werkzeuge enthält, die nötig sind, um das echte Root Dateisystem zu finden, zu entschlüsseln und einzuhängen, bevor der Kernel per switch_root dorthin wechselt.

Ohne initramfs müsste jeder benötigte Treiber fest in den Kernel einkompiliert sein, was Distributionen zu einem einzigen, riesigen Kernel für alle denkbaren Hardware und Storage Kombinationen zwingen würde. Das initramfs erlaubt stattdessen einen schlanken Standardkernel, der die tatsächlich benötigten Module erst zur Laufzeit aus dem initramfs nachlädt.

2. Aufbau eines initramfs Images

Ein initramfs Image ist im Kern ein gzip oder zstd komprimiertes cpio Archiv mit einem eigenen, minimalen Wurzeldateisystem: einer kleinen Auswahl an Binärdateien wie busybox oder systemd Komponenten, den relevanten Kernel Modulen für Storage und Dateisysteme, sowie Konfigurationsdateien und Skripten, die den eigentlichen Boot Ablauf steuern.

Beim modernen dracut basierten initramfs übernimmt tatsächlich systemd selbst als PID 1 innerhalb des initramfs die Steuerung, mit spezialisierten Units für Aufgaben wie das Warten auf ein LVM Volume oder das Abfragen einer LUKS Passphrase, statt eines einfachen Shell Skripts wie bei älteren initramfs Generatoren.


# Inhalt eines initramfs Images ohne Entpacken auflisten
lsinitrd /boot/initramfs-$(uname -r).img | head -40

# Enthaltene Kernel Module gezielt anzeigen
lsinitrd /boot/initramfs-$(uname -r).img -m

# Enthaltene dracut Module (Funktionsblöcke) anzeigen
lsinitrd /boot/initramfs-$(uname -r).img | grep dracut-

3. dracut: Modulares Werkzeug zum Bau des initramfs

dracut ersetzt auf RHEL, Fedora, SUSE und mittlerweile auch auf vielen Debian Derivaten die älteren initramfs Generatoren und arbeitet modular: Jedes dracut Modul in /usr/lib/dracut/modules.d kapselt Unterstützung für ein bestimmtes Feature, etwa lvm, crypt, network oder nfs, und wird nur dann eingebunden, wenn es entweder automatisch erkannt oder explizit angefordert wird.

Die Konfiguration erfolgt über /etc/dracut.conf sowie Fragmente in /etc/dracut.conf.d, in denen sich zusätzliche Module, Treiber oder Kernel Befehlszeilen Optionen dauerhaft festlegen lassen, ohne bei jedem Aufruf lange Kommandozeilen Parameter angeben zu müssen.


# /etc/dracut.conf.d/10-storage.conf: zusätzliche Module und Treiber erzwingen
cat <<'EOF' | sudo tee /etc/dracut.conf.d/10-storage.conf
add_dracutmodules+=" lvm crypt "
force_drivers+=" nvme megaraid_sas "
compress="zstd"
EOF

4. initramfs mit dracut neu bauen

Nach Änderungen an der Storage Konfiguration, etwa einem neuen LVM Volume, einer geänderten LUKS Passphrase Datei oder einem zusätzlichen Kernel Modul, muss das initramfs für den betroffenen Kernel neu gebaut werden, sonst greifen die Änderungen erst nach einem manuellen Eingriff beim nächsten Boot. Der Befehl dracut -f überschreibt das Image für den aktuell laufenden Kernel, während sich mit einem expliziten Kernel Namen auch für einen anderen installierten Kernel neu bauen lässt.

Für Umgebungen mit mehreren installierten Kernel Versionen, etwa nach einem größeren Distributions Update, baut dracut --regenerate-all die initramfs Images für sämtliche installierten Kernel in einem Durchgang neu, was sich besonders nach Änderungen anbietet, die alle Kernel betreffen, wie ein neuer force_drivers Eintrag in der dracut Konfiguration.


# initramfs für den aktuell laufenden Kernel neu bauen
sudo dracut -f

# initramfs für einen bestimmten, bereits installierten Kernel neu bauen
sudo dracut -f /boot/initramfs-5.14.0-570.el9.x86_64.img 5.14.0-570.el9.x86_64

# initramfs für alle installierten Kernel Versionen neu bauen
sudo dracut --regenerate-all -f

5. Debugging bei unable to mount root

Die Meldung dracut Warning: Could not boot beziehungsweise unable to mount root filesystem landet meist in einer minimalen dracut Notfall Shell. Der erste Blick gilt journalctl innerhalb dieser Shell sowie der Ausgabe von lvm vgscan oder cryptsetup status, um festzustellen, ob das erwartete Volume Group oder das verschlüsselte Gerät überhaupt sichtbar ist, bevor der eigentliche Root Mount versucht wird.

Häufige Ursachen sind ein initramfs, das noch die alte UUID nach einer Neuformatierung referenziert, ein fehlendes Storage Treiber Modul nach einem Hardware Wechsel, etwa von virtio auf einen physischen RAID Controller, oder ein LVM Volume, das wegen falscher Filter Konfiguration in lvm.conf innerhalb des initramfs nicht erkannt wird.


# In der dracut Notfall Shell: Volume Groups und Devices prüfen
dracut:/# vgscan
dracut:/# lvm lvs
dracut:/# cryptsetup status luks-root
dracut:/# blkid | grep -i uuid

# Root Filesystem manuell einhängen und Boot fortsetzen
dracut:/# mount /dev/mapper/vg-root /sysroot
dracut:/# exit

6. Debug Optionen über rd Kernel Parameter

dracut bringt eine eigene Familie an Kernel Parametern mit, die mit rd. beginnen und ausschließlich innerhalb der frühen Boot Phase ausgewertet werden. rd.debug schreibt eine ausführliche Log Datei nach /run/initramfs/rdsosreport.txt, rd.break hält den Boot Vorgang an einer bestimmten Stelle an und übergibt eine interaktive Shell, und rd.shell erzwingt bei jedem Fehler automatisch eine Notfall Shell statt eines sofortigen Kernel Panic.

Diese Parameter werden über das GRUB Menü mit der Taste e nur für den aktuellen Boot ergänzt, sollten also nicht dauerhaft in GRUB_CMDLINE_LINUX_DEFAULT landen, weil sie den Boot Vorgang bewusst verlangsamen und in einer Produktionsumgebung ohne aktive Fehlersuche keinen Mehrwert bieten.


# Kernel Zeile im GRUB Menü temporär um Debug Parameter erweitern
rd.debug rd.break=pre-mount

# Nach dem Boot: gesammeltes dracut Debug Log auswerten
less /run/initramfs/rdsosreport.txt

7. Anpassung für benutzerdefinierte Storage Setups

Bei ungewöhnlichen Storage Kombinationen, etwa Root über iSCSI, Root auf einem Software RAID mit mdadm oder Root über Multipath auf einem SAN, reicht die automatische Erkennung von dracut oft nicht aus und benötigt zusätzliche Kernel Parameter sowie explizit aktivierte Module wie network, iscsi, mdraid oder multipath.

Für solche Umgebungen lohnt sich ein dediziertes Konfigurationsfragment, das die benötigten Module dauerhaft festschreibt, statt sich bei jedem Kernel Update erneut auf die automatische Erkennung von dracut zu verlassen, die insbesondere bei Netzwerk Storage nicht immer zuverlässig alle Abhängigkeiten findet.


# /etc/dracut.conf.d/20-iscsi-root.conf: Root über iSCSI dauerhaft unterstützen
cat <<'EOF' | sudo tee /etc/dracut.conf.d/20-iscsi-root.conf
add_dracutmodules+=" network iscsi "
EOF

sudo dracut -f --kver $(uname -r)

8. dracut im Vergleich zu initramfs-tools

Debian und Ubuntu setzen historisch auf initramfs-tools statt dracut, mit einem eigenen Satz an Befehlen: update-initramfs -u zum Neubau des aktuellen Images und /etc/initramfs-tools/modules zum expliziten Ergänzen von Kernel Modulen. Funktional decken beide Werkzeuge dieselbe Aufgabe ab, unterscheiden sich aber deutlich in Architektur, Konfigurationssyntax und der Frage, ob systemd innerhalb des initramfs läuft.

Wer zwischen Debian und RHEL basierten Servern wechselt, sollte die unterschiedliche Kommandozeile im Kopf behalten: dracut -f entspricht in etwa update-initramfs -u, während lsinitrd kein direktes Gegenstück bei initramfs-tools hat und dort stattdessen ein manuelles Entpacken des cpio Archivs nötig ist.

9. Best Practices für den produktiven Einsatz

Nach jedem Kernel Update lohnt sich eine kurze Kontrolle, ob tatsächlich ein neues initramfs für den neuen Kernel existiert, denn ein fehlendes oder veraltetes Image führt beim nächsten Boot zuverlässig zu einem unable to mount root Fehler. Die meisten Paketmanager rufen dracut automatisch über einen Kernel Post Install Hook auf, ein manueller Kontrollblick schadet trotzdem nicht.

Vor größeren Storage Änderungen, etwa dem Wechsel von einem einzelnen Datenträger auf ein LVM Setup, sollte ein aktuelles initramfs gebaut und im Idealfall über eine Rescue Konsole getestet werden, bevor der produktive Server neu gestartet wird. Ein Backup des vorherigen initramfs Images unter einem anderen Dateinamen ist dabei eine günstige Absicherung gegen einen fehlgeschlagenen Neubau.

Befehl Zweck Wann einsetzen Hinweis
dracut -f initramfs für laufenden Kernel neu bauen Nach Änderungen an Storage oder Konfiguration Überschreibt vorhandenes Image ohne Rückfrage
dracut --regenerate-all -f initramfs für alle installierten Kernel neu bauen Nach distributionsweiten Änderungen Kann bei vielen Kernel Versionen etwas dauern
lsinitrd Inhalt eines Images ohne Entpacken ansehen Prüfen, ob ein Modul enthalten ist Auch mit -m nur für Kernel Module nutzbar
rd.break / rd.debug Boot Vorgang anhalten oder ausführlich loggen Fehlersuche bei unable to mount root Nur temporär über GRUB Menü setzen
update-initramfs -u Debian/Ubuntu Äquivalent zu dracut -f Auf Systemen mit initramfs-tools Andere Konfigurationssyntax als dracut

Mironsoft

Server-Administration, Docker-Hosts und Performance-Tuning

Linux-Server, die niemand im Team richtig versteht?

Wir übernehmen Setup, Absicherung und Performance-Tuning von Linux-Servern und Docker-Hosts für Magento-Deployments, dokumentiert und nachvollziehbar statt gewachsen und unklar.

Server-Audit

Bestehende Server-Konfiguration auf Sicherheitslücken und Performance-Bremsen prüfen.

Docker-Host-Setup

Produktionsreife Docker-Umgebungen für Magento sauber aufsetzen und absichern.

Monitoring & Tuning

Ressourcenverbrauch messen und Systemd, Kernel und Dienste gezielt optimieren.

10. Zusammenfassung

initramfs und dracut

Zweck

Vorab System lädt Storage Treiber, bevor der Kernel das echte Root findet

Werkzeug

dracut auf RHEL/SUSE, initramfs-tools auf Debian/Ubuntu

Neubau nach Änderungen

dracut -f beziehungsweise dracut --regenerate-all -f

Fehlersuche

dracut Notfall Shell, rd.break und rd.debug Kernel Parameter

11. FAQ: initramfs und dracut

1Wofür wird ein initramfs überhaupt benötigt?
Der Kernel kennt beim Start das eigentliche Root Dateisystem nicht, besonders wenn es auf LVM, LUKS, Software RAID oder Netzwerk Storage liegt. Das initramfs lädt die dafür nötigen Kernel Module und Werkzeuge vorab, bevor der Kernel per switch_root ins echte System wechselt.
2Wie baue ich das initramfs für den aktuellen Kernel neu?
Mit dem Befehl dracut -f wird das Image für den aktuell laufenden Kernel überschrieben. Für einen anderen installierten Kernel lässt sich Ziel Image und Kernel Version explizit als Parameter angeben.
3Was bedeutet unable to mount root filesystem?
Das initramfs konnte das erwartete Root Gerät nicht finden oder einhängen, oft wegen einer veralteten UUID, eines fehlenden Storage Treibers oder einer falschen LVM Filter Konfiguration. Die dracut Notfall Shell erlaubt eine manuelle Fehlersuche mit vgscan, lvm lvs und blkid.
4Wie debugge ich den Boot Vorgang im initramfs ausführlich?
Über den Kernel Parameter rd.debug wird ein ausführliches Log nach /run/initramfs/rdsosreport.txt geschrieben, während rd.break den Boot an einer bestimmten Stelle anhält und eine interaktive Shell übergibt. Beide Parameter werden nur temporär im GRUB Menü ergänzt.
5Muss ich dracut nach jedem Kernel Update manuell aufrufen?
In der Regel nicht, weil die meisten Paketmanager dracut automatisch über einen Post Install Hook des Kernel Pakets aufrufen. Ein manueller Kontrollblick mit lsinitrd ist dennoch sinnvoll, um ein fehlendes oder veraltetes Image auszuschließen.
6Wie unterstütze ich Root über iSCSI oder Multipath im initramfs?
Über ein dediziertes Konfigurationsfragment in /etc/dracut.conf.d, das die passenden Module wie network, iscsi oder multipath dauerhaft ergänzt. Anschließend muss das initramfs mit dracut -f neu gebaut werden, damit die Module tatsächlich enthalten sind.
7Was ist der Unterschied zwischen dracut und initramfs-tools?
Beide erfüllen dieselbe Aufgabe, unterscheiden sich aber in Architektur und Kommandozeile. dracut ist auf RHEL, Fedora und SUSE Standard und nutzt oft systemd innerhalb des initramfs, während Debian und Ubuntu auf initramfs-tools mit update-initramfs setzen.
8Wie prüfe ich, ob ein bestimmtes Kernel Modul im initramfs enthalten ist?
Mit lsinitrd und der Option -m lässt sich die Liste der enthaltenen Kernel Module eines Images anzeigen, ohne es manuell entpacken zu müssen. Fehlt das benötigte Modul, hilft ein Eintrag in force_drivers gefolgt von einem Neubau.
9Warum sollte rd.debug nicht dauerhaft aktiv bleiben?
Der Parameter erzeugt bei jedem Boot ausführliche Log Ausgaben und verlangsamt den Startvorgang spürbar. Er gehört deshalb nur temporär über das GRUB Menü gesetzt und nicht dauerhaft in GRUB_CMDLINE_LINUX_DEFAULT.
10Was passiert, wenn ich ein initramfs für den falschen Kernel baue?
dracut schreibt dann ein Image, das nicht zu den tatsächlich installierten Kernel Modulen passt, was beim Boot dieses Kernels zu fehlenden Treibern und im schlimmsten Fall zu unable to mount root führt. Die Kernel Version sollte deshalb bei manuellen Aufrufen immer explizit geprüft werden.