Provided by: manpages-de_4.26.0-1_all 

BEZEICHNUNG
initrd - vom Boot-Loader initialisierte RAM-Disk
KONFIGURATION
/dev/initrd ist ein nur lesbares Blockgerät mit der Major-Nummer 1 und der Minor-Nummer 250.
Typischerweise ist der Besitzer von /dev/initrd root.disk; die Zugriffsrechte sind auf 0400 gesetzt
(Lesezugriff nur für root). Wenn /dev/initrd nicht schon im Linux-System eingerichtet wurde, kann sie mit
den folgenden Befehlen erstellt werden:
mknod -m 400 /dev/initrd b 1 250
chown root:disk /dev/initrd
Auch muss Unterstützung für sowohl »RAM-Disk« als auch »Initial RAM Disk« (z. B. CONFIG_BLK_DEV_RAM=y und
CONFIG_BLK_DEV_INITRD=y) direkt in den Linux-Kernel kompiliert werden, um /dev/initrd zu verwenden. Wird
/dev/initrd verwendet, kann der RAM-Disk-Treiber nicht als Modul geladen werden.
BESCHREIBUNG
Die Spezialdatei /dev/initrd ist ein nur lesbares Blockgerät. Dieses Gerät ist eine RAM-Disk, die vom
Boot-Loader initialisiert (z.B. geladen) wird, bevor der Kernel gestartet wird. Der Kernel kann dann den
Inhalt von /dev/initrd für einen zweiphasigen Systemstart verwenden.
In der ersten Phase startet der Kernel und bindet ein erstes Wurzeldateisystem mit Inhalten von
/dev/initrd ein (z. B. die vom Boot-Loader initialisierte RAM-Disk). In der zweiten Phase werden
zusätzliche Treiber oder andere Module aus dem Inhalt des ersten Wurzelgeräts geladen. Nach dem Laden der
zusätzlichen Module wird ein neues Wurzeldateisystem (d. h. das normale Wurzeldateisystem) von einem
anderen Gerät eingebunden.
Der Boot-Vorgang
Beim Booten mit initrd startet das System wie folgt:
(1) Der Boot-Loader lädt den Kernel und den Inhalt von /dev/initrd in den Speicher.
(2) Wenn der Kernel startet, dekomprimiert und kopiert er den Inhalt des Gerätes /dev/initrd auf Gerät
/dev/ram0 und gibt dann den Speicher frei, den /dev/initrd belegte.
(3) Der Kernel bindet dann das Gerät /dev/ram0 schreib- und lesbar als anfängliches Wurzeldateisystem
ein.
(4) Wenn das angegebene normale Wurzeldateisystem auch das anfängliche Wurzeldateisystem ist (z.B.
/dev/ram0), springt der Kernel zum letzten Schritt für die übliche Boot-Sequenz.
(5) Wenn im anfänglichen Wurzeldateisystem die ausführbare Datei /linuxrc vorhanden ist, wird sie mit
UID 0 ausgeführt. (Die Datei /linuxrc muss über Ausführungsrechte verfügen. Sie kann eine beliebige
gültige, ausführbare Datei sein, also auch ein Shell-Skript.)
(6) Wenn /linuxrc nicht ausgeführt oder wenn /linuxrc beendet wird, wird das normale Wurzeldateisystem
eingebunden. (Wenn /linuxrc beendet wird, wenn noch Dateisysteme im anfänglichen Wurzeldateisystem
eingehängt sind, dann ist das Verhalten des Kernels NICHT FESTGELEGT; siehe den Abschnitt
ANMERKUNGEN für das aktuelle Kernel-Verhalten.)
(7) Wenn im normalen Wurzeldateisystem ein Verzeichnis /initrd vorhanden ist, wird das Gerät /dev/ram0
von / auf /initrd gelegt. Wenn das Verzeichnis /initrd nicht vorhanden ist, wird das Gerät /dev/ram0
ausgehängt. (Wenn /dev/ram0 von / nach /initrd verschoben wird, wird /dev/ram0 nicht ausgehängt und
damit können Prozesse weiterhin von /dev/ram0 ausgeführt werden. Wenn das Vorzeichnis /initrd nicht
auf dem normalen Wurzeldateisystem existiert und noch weiterhin Prozesse von /dev/ram0 ausgeführt
werden, wenn /linuxrc sich beendet, ist das Verhalten des Kernels NICHT FESTGELEGT; siehe den
Abschnitt ANMERKUNGEN für das aktuelle Kernel-Verhalten.)
(8) Die übliche Boot-Sequenz (z.B. Aufruf von /sbin/init) wird auf dem normalen Wurzeldateisystem
durchgeführt.
Optionen
Die folgenden Optionen des Boot-Loaders wirken sich auf das Verhalten des Kernels beim Systemstart aus,
wenn sie mit initrd verwendet werden:
initrd=Dateiname
Gibt die Datei an, die als Inhalt von /dev/initrd geladen wird. Für LOADLIN ist das eine
Befehlszeilenoption. Für LILO müssen Sie diesen Befehl in der LILO-Konfigurationsdatei
/etc/lilo.config verwenden. Die mit dieser Option angegebene Datei ist typischerweise ein
komprimiertes Dateisystem-Abbild.
noinitrd
Diese Boot-Option deaktiviert den zweiphasigen Systemstart. Der Kernel führt die übliche
Boot-Sequenz aus, als ob /dev/initrd nicht initialisiert wurde. Mit dieser Option bleiben alle vom
Boot-Loader in den Speicher geladenen Inhalte von /dev/initrd erhalten. Diese Option ermöglicht,
dass der Inhalt von /dev/initrd aus beliebigen Daten bestehen kann und nicht auf
Dateisystem-Abbilder beschränkt sein muss. Allerdings ist das Gerät /dev/initrd schreibgeschützt
und kann nur einmal nach dem Systemstart gelesen werden.
root=Gerätename
Gibt das Gerät an, das als normales Wurzeldateisystem verwendet werden soll. Für LOADLIN ist dies
ist eine Befehlszeilen-Option. Für LILO kann diese Option beim Systemstart oder als Optionszeile
in der LILO-Konfigurationsdatei /etc/lilo.config verwendet werden. Das durch diese Option
angegebene Gerät muss eingehängt werden können und ein geeignetes Wurzeldateisystem enthalten.
Wechsel des normalen Wurzeldateisystems
Standardmäßig werden die Kernel-Einstellungen (z. B. mit rdev(8) in der Kernel-Datei gesetzt oder in die
Kernel-Datei kompiliert) oder die Options-Einstellungen des Boot-Loaders für das normale
Wurzeldateisystem verwendet. Für ein über NFS eingebundenes normales Wurzeldateisystem müssen die
Boot-Optionen nfs_root_name und nfs_root_addrs genutzt werden, um die NFS-Einstellungen zu übergeben. Für
weitere Informationen über via NFS eingebundene Wurzeldateisysteme lesen Sie die Kernel-Dokumentation in
der Datei Documentation/filesystems/nfs/nfsroot.txt (oder Documentation/filesystems/nfsroot.txt vor Linux
2.6.33). Weitere Informationen über das Einstellen des Wurzeldateisystems finden sich in den
Dokumentationen von LILO und LOADLIN.
Die ausführbare Datei /linuxrc kann auch das normale Wurzelgerät ändern. Damit /linuxrc das normale
Wurzelgerät ändern kann, muss /proc eingehängt sein. Nach dem Einhängen von /proc ändert /linuxrc das
normale Wurzelgerät durch das Schreiben in die proc-Dateien /proc/sys/kernel/real-root-dev,
/proc/sys/kernel/nfs-root-name und /proc/sys/kernel/nfs-root-addrs. Ein physisches Wurzelgerät wird
geändert, indem /linuxrc die Gerätenummer des neuen Wurzeldateisystems in /proc/sys/kernel/real-root-dev
schreibt. Für ein NFS-Wurzeldateisystem wird das Wurzelgerät geändert, indem /linuxrc die NFS-Einstellung
in die Dateien /proc/sys/kernel/nfs-root-name und /proc/sys/kernel/nfs-root-addrs schreibt und dann 0xff
(z. B. die NFS-Pseudo-Gerätenummer) in die Datei /proc/sys/kernel/real-root-dev schreibt. Zum Beispiel
würde der folgende Shell-Befehl das normale Wurzelgerät auf /dev/hdb1 ändern:
echo 0x365 >/proc/sys/kernel/real-root-dev
Ein NFS-Beispiel: Die folgenden Shell-Befehlszeilen würden das normale Wurzelgerät für ein System mit der
IP-Nummer 193.8.232.2 und dem Namen »idefix« auf das NFS-Verzeichnis /var/nfsroot auf einem NFS-Server
mit der IP-Nummer 193.8.232.7 im lokalen Netzwerk ändern:
echo /var/nfsroot >/proc/sys/kernel/nfs-root-name
echo 193.8.232.2:193.8.232.7::255.255.255.0:idefix \
>/proc/sys/kernel/nfs-root-addrs
echo 255 >/proc/sys/kernel/real-root-dev
Hinweis: Die Verwendung von /proc/sys/kernel/real-root-dev für die Änderung des Wurzeldateisystems ist
veraltet. Die Linux-Kernel-Quelldatei Documentation/admin-guide/initrd.rst (oder Documentation/initrd.txt
vor Linux 4.10) sowie pivot_root(2) und pivot_root(8) informieren über das moderne Verfahren zur Änderung
des Wurzeldateisystems.
Verwendung
Die Hauptmotivation für die Implementierung von initrd war, bei der Installation des Systems eine
modulare Kernel-Konfiguration zu ermöglichen.
Ein mögliches Szenario für eine Systeminstallation ist das folgende:
(1) Das Ladeprogramm startet von einer Diskette oder einem anderen Medium mit einem minimalen Kernel
(beispielsweise mit Unterstützung für /dev/ram, /dev/initrd und das ext2-Dateisystem) und lädt
/dev/initrd mit einer komprimierten Version des anfänglichen Dateisystems.
(2) Die ausführbare Datei /linuxrc bestimmt, was für (1) das Einhängen des normalen Wurzeldateisystems
(z.B. Gerätetyp, Gerätetreiber, Dateisystem) und (2) der Installationsmedien (z.B. CD-ROM, Netzwerk,
Band, …) erforderlich ist. Dies kann durch Befragung des Benutzers, dem Selbstuchen des Gerätes oder
mit einem hybriden Ansatz erfolgen.
(3) Die ausführbare Datei /linuxrc lädt die notwendigen Module aus dem anfänglichen Wurzeldateisystem.
(4) Die ausführbare Datei /linuxrc erstellt und füllt das Wurzeldateisystem. (In diesem Stadium muss das
normale Wurzeldateisystem noch kein vollständiges System sein.)
(5) Die ausführbare Datei /linuxrc schreibt /proc/sys/kernel/real-root-dev, hängt /proc, das normale
Wurzeldateisystem und alle weiteren von ihm eingehängten Dateisysteme aus und beendet sich dann.
(6) Der Kernel bindet dann das normale Wurzeldateisystem ein.
(7) Nachdem das System intakt ist und darauf zugegriffen werden kann, kann der Boot-Loader installiert
werden.
(8) Der Boot-Loader ist so konfiguriert, dass er in /dev/initrd ein Dateisystem mit dem Satz von Modulen
lädt, die beim Systemstart eingesetzt waren. (z.B. kann das Gerät /dev/ram0 modifiziert, danach
ausgehängt und schließlich sein Abbild (Image) in eine Datei geschrieben werden.)
(9) Das System ist nun bootfähig und zusätzliche Installationsaufgaben können durchgeführt werden.
Die Schlüsselrolle von /dev/initrd im Vorgehenden ist es, die Konfigurationsdaten während des normalen
Betriebs weiter zu verwenden, ohne dass der ursprüngliche Kernel ausgewählt, ein großer generischer
Kernel eingesetzt oder ein Kernel neu kompiliert werden muss.
Ein zweites Szenario sind Netzwerk-Installationen, in denen Linux auf Systemen mit verschiedenen
Hardware-Konfigurationen läuft. In solchen Fällen kann es wünschenswert sein, nur eine kleine Gruppe von
Kerneln (im Idealfall nur einen) zu verwenden und den systemspezifischen Teil der
Konfigurationsinformationen so klein wie möglich zu halten. Erstellen Sie für diesen Fall eine gemeinsame
Datei mit allen benötigten Modulen. Dann muss nur die Datei /linuxrc oder eine von /linuxrc ausgeführte
Datei individuell angepasst werden.
Ein drittes Szenario sind komfortable Reparatur-CDs. Weil Informationen wie die Position der
Wurzeldateisystem-Partition zur Boot-Zeit nicht erforderlich sind, kann das aus /dev/initrd geladene
System einen Dialog und/oder eine automatische Erkennung verwenden und dem eine Plausibilitätsprüfung
folgen lassen.
Nicht zuletzt können Linux-Distributionen auf CD-ROM initrd für die einfache Installation von der CD-ROM
verwenden. Die Distribution kann LOADLIN verwenden, um /dev/initrd direkt von der CD-ROM zu laden und
Disketten überflüssig zu machen. Die Distribution könnte auch eine LILO-Bootdiskette verwenden und dann
über /dev/initrd eine größere RAM-Disk von der CD-ROM laden.
DATEIEN
/dev/initrd
/dev/ram0
/linuxrc
/initrd
ANMERKUNGEN
• Beim aktuellen Kernel kann auf Dateisysteme, die während der Verschiebung von /dev/ram0 von / nach
/initrd eingehängt waren, weiterhin zugegriffen werden. Die Einträge in /proc/mounts werden aber nicht
aktualisiert.
• Mit dem aktuellen Kernel wird bei fehlendem /initrd /dev/ram0 nicht völlig ausgehängt werden, wenn es
von einem Prozess verwendet wird oder in /dev/ram0 ein Dateisystem eingehängt ist. Wenn /dev/ram0
nicht vollständig ausgehängt ist, verbleibt /dev/ram0 im Speicher.
• Anwender von /dev/initrd sollten sich nicht auf das in diesen Anmerkungen beschriebene Verhalten
verlassen. Das Verhalten kann sich in zukünftigen Kernel-Versionen ändern.
SIEHE AUCH
chown(1), mknod(1), ram(4), freeramdisk(8), rdev(8)
Documentation/admin-guide/initrd.rst (oder Documentation/initrd.txt vor Linux 4.10) im
Linux-Kernelquelltext-Verzeichnis und die Dokumentationen von LILO, LOADLIN und SYSLINUX
ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer
<Martin.E.Schauer@gmx.de>, Mario Blättermann <mario.blaettermann@gmail.com> und Dr. Tobias Quathamer
<toddy@debian.org> erstellt.
Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer
bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.
Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die
Mailingliste der Übersetzer.
Linux man-pages 6.9.1 15. Juni 2024 initrd(4)