INITRD(4) | Linux-Programmierhandbuch | INITRD(4) |
initrd - vom Boot-Loader initialisierte RAM-Disk
/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.
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.
Beim Booten mit initrd startet das System wie folgt:
Die folgenden Optionen des Boot-Loaders wirken sich auf das Verhalten des Kernels beim Systemstart aus, wenn sie mit initrd verwendet werden:
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.
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:
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.
/dev/initrd
/dev/ram0
/linuxrc
/initrd
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
Diese Seite ist Teil der Veröffentlichung 5.10 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.
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.
6. März 2019 | Linux |