initrd(4) Device Drivers Manual initrd(4) BEZEICHNUNG initrd - vom Boot-Loader initialisierte RAM-Disk KONFIGURATION /dev/initrd ist ein nur lesbares Blockgerat 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 fur 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 Unterstutzung fur 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 Blockgerat. Dieses Gerat 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 fur 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 zusatzliche Treiber oder andere Module aus dem Inhalt des ersten Wurzelgerats geladen. Nach dem Laden der zusatzlichen Module wird ein neues Wurzeldateisystem (d. h. das normale Wurzeldateisystem) von einem anderen Gerat eingebunden. Der Boot-Vorgang Beim Booten mit initrd startet das System wie folgt: (1) Der Boot-Loader ladt den Kernel und den Inhalt von /dev/initrd in den Speicher. (2) Wenn der Kernel startet, dekomprimiert und kopiert er den Inhalt des Gerates /dev/initrd auf Gerat /dev/ram0 und gibt dann den Speicher frei, den /dev/initrd belegte. (3) Der Kernel bindet dann das Gerat /dev/ram0 schreib- und lesbar als anfangliches Wurzeldateisystem ein. (4) Wenn das angegebene normale Wurzeldateisystem auch das anfangliche Wurzeldateisystem ist (z.B. /dev/ram0), springt der Kernel zum letzten Schritt fur die ubliche Boot-Sequenz. (5) Wenn im anfanglichen Wurzeldateisystem die ausfuhrbare Datei /linuxrc vorhanden ist, wird sie mit UID 0 ausgefuhrt. (Die Datei /linuxrc muss uber Ausfuhrungsrechte verfugen. Sie kann eine beliebige gultige, ausfuhrbare Datei sein, also auch ein Shell-Skript.) (6) Wenn /linuxrc nicht ausgefuhrt oder wenn /linuxrc beendet wird, wird das normale Wurzeldateisystem eingebunden. (Wenn /linuxrc beendet wird, wenn noch Dateisysteme im anfanglichen Wurzeldateisystem eingehangt sind, dann ist das Verhalten des Kernels NICHT FESTGELEGT; siehe den Abschnitt ANMERKUNGEN fur das aktuelle Kernel-Verhalten.) (7) Wenn im normalen Wurzeldateisystem ein Verzeichnis /initrd vorhanden ist, wird das Gerat /dev/ram0 von / auf /initrd gelegt. Wenn das Verzeichnis /initrd nicht vorhanden ist, wird das Gerat /dev/ram0 ausgehangt. (Wenn /dev/ram0 von / nach /initrd verschoben wird, wird /dev/ram0 nicht ausgehangt und damit konnen Prozesse weiterhin von /dev/ram0 ausgefuhrt werden. Wenn das Vorzeichnis /initrd nicht auf dem normalen Wurzeldateisystem existiert und noch weiterhin Prozesse von /dev/ram0 ausgefuhrt werden, wenn /linuxrc sich beendet, ist das Verhalten des Kernels NICHT FESTGELEGT; siehe den Abschnitt ANMERKUNGEN fur das aktuelle Kernel-Verhalten.) (8) Die ubliche Boot-Sequenz (z.B. Aufruf von /sbin/init) wird auf dem normalen Wurzeldateisystem durchgefuhrt. 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. Fur LOADLIN ist das eine Befehlszeilenoption. Fur LILO mussen 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 fuhrt die ubliche 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 ermoglicht, dass der Inhalt von /dev/initrd aus beliebigen Daten bestehen kann und nicht auf Dateisystem-Abbilder beschrankt sein muss. Allerdings ist das Gerat /dev/initrd schreibgeschutzt und kann nur einmal nach dem Systemstart gelesen werden. root=Geratename Gibt das Gerat an, das als normales Wurzeldateisystem verwendet werden soll. Fur LOADLIN ist dies ist eine Befehlszeilen-Option. Fur LILO kann diese Option beim Systemstart oder als Optionszeile in der LILO-Konfigurationsdatei /etc/lilo.config verwendet werden. Das durch diese Option angegebene Gerat muss eingehangt werden konnen und ein geeignetes Wurzeldateisystem enthalten. Wechsel des normalen Wurzeldateisystems Standardmassig 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 fur das normale Wurzeldateisystem verwendet. Fur ein uber NFS eingebundenes normales Wurzeldateisystem mussen die Boot-Optionen nfs_root_name und nfs_root_addrs genutzt werden, um die NFS-Einstellungen zu ubergeben. Fur weitere Informationen uber 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 uber das Einstellen des Wurzeldateisystems finden sich in den Dokumentationen von LILO und LOADLIN. Die ausfuhrbare Datei /linuxrc kann auch das normale Wurzelgerat andern. Damit /linuxrc das normale Wurzelgerat andern kann, muss /proc eingehangt sein. Nach dem Einhangen von /proc andert /linuxrc das normale Wurzelgerat 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 Wurzelgerat wird geandert, indem /linuxrc die Geratenummer des neuen Wurzeldateisystems in /proc/sys/kernel/real-root-dev schreibt. Fur ein NFS-Wurzeldateisystem wird das Wurzelgerat geandert, 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-Geratenummer) in die Datei /proc/sys/kernel/real-root-dev schreibt. Zum Beispiel wurde der folgende Shell-Befehl das normale Wurzelgerat auf /dev/hdb1 andern: echo 0x365 >/proc/sys/kernel/real-root-dev Ein NFS-Beispiel: Die folgenden Shell-Befehlszeilen wurden das normale Wurzelgerat fur 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 andern: 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 fur die Anderung 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 uber das moderne Verfahren zur Anderung des Wurzeldateisystems. Verwendung Die Hauptmotivation fur die Implementierung von initrd war, bei der Installation des Systems eine modulare Kernel-Konfiguration zu ermoglichen. Ein mogliches Szenario fur eine Systeminstallation ist das folgende: (1) Das Ladeprogramm startet von einer Diskette oder einem anderen Medium mit einem minimalen Kernel (beispielsweise mit Unterstutzung fur /dev/ram, /dev/initrd und das ext2-Dateisystem) und ladt /dev/initrd mit einer komprimierten Version des anfanglichen Dateisystems. (2) Die ausfuhrbare Datei /linuxrc bestimmt, was fur (1) das Einhangen des normalen Wurzeldateisystems (z.B. Geratetyp, Geratetreiber, Dateisystem) und (2) der Installationsmedien (z.B. CD-ROM, Netzwerk, Band, ) erforderlich ist. Dies kann durch Befragung des Benutzers, dem Selbstuchen des Gerates oder mit einem hybriden Ansatz erfolgen. (3) Die ausfuhrbare Datei /linuxrc ladt die notwendigen Module aus dem anfanglichen Wurzeldateisystem. (4) Die ausfuhrbare Datei /linuxrc erstellt und fullt das Wurzeldateisystem. (In diesem Stadium muss das normale Wurzeldateisystem noch kein vollstandiges System sein.) (5) Die ausfuhrbare Datei /linuxrc schreibt /proc/sys/kernel/real-root-dev, hangt /proc, das normale Wurzeldateisystem und alle weiteren von ihm eingehangten 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 ladt, die beim Systemstart eingesetzt waren. (z.B. kann das Gerat /dev/ram0 modifiziert, danach ausgehangt und schliesslich sein Abbild (Image) in eine Datei geschrieben werden.) (9) Das System ist nun bootfahig und zusatzliche Installationsaufgaben konnen durchgefuhrt werden. Die Schlusselrolle von /dev/initrd im Vorgehenden ist es, die Konfigurationsdaten wahrend des normalen Betriebs weiter zu verwenden, ohne dass der ursprungliche Kernel ausgewahlt, ein grosser 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 lauft. In solchen Fallen kann es wunschenswert sein, nur eine kleine Gruppe von Kerneln (im Idealfall nur einen) zu verwenden und den systemspezifischen Teil der Konfigurationsinformationen so klein wie moglich zu halten. Erstellen Sie fur diesen Fall eine gemeinsame Datei mit allen benotigten Modulen. Dann muss nur die Datei /linuxrc oder eine von /linuxrc ausgefuhrte 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 Plausibilitatsprufung folgen lassen. Nicht zuletzt konnen Linux-Distributionen auf CD-ROM initrd fur 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 uberflussig zu machen. Die Distribution konnte auch eine LILO-Bootdiskette verwenden und dann uber /dev/initrd eine grossere RAM-Disk von der CD-ROM laden. DATEIEN /dev/initrd /dev/ram0 /linuxrc /initrd ANMERKUNGEN o Beim aktuellen Kernel kann auf Dateisysteme, die wahrend der Verschiebung von /dev/ram0 von / nach /initrd eingehangt waren, weiterhin zugegriffen werden. Die Eintrage in /proc/mounts werden aber nicht aktualisiert. o Mit dem aktuellen Kernel wird bei fehlendem /initrd /dev/ram0 nicht vollig ausgehangt werden, wenn es von einem Prozess verwendet wird oder in /dev/ram0 ein Dateisystem eingehangt ist. Wenn /dev/ram0 nicht vollstandig ausgehangt ist, verbleibt /dev/ram0 im Speicher. o Anwender von /dev/initrd sollten sich nicht auf das in diesen Anmerkungen beschriebene Verhalten verlassen. Das Verhalten kann sich in zukunftigen Kernel-Versionen andern. 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 UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer , Mario Blattermann und Dr. Tobias Quathamer erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 initrd(4)