BEZEICHNUNG¶
initrd - vom Boot-Loader initialisierte RAM-Disk
KONFIGURATION¶
Die Initrd (
/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 Root-Dateisystem
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 Root-Geräts
geladen. Nach dem Laden der zusätzlichen Module wird ein neues
Root-Dateisystem (d. h. das normale Root-Dateisystem) 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 Root-Dateisystem ein.
- 4.
- Wenn das angegebene normale Root-Dateisystem auch das anfängliche
Root-Dateisystem ist (z.B. /dev/ram0), springt der Kernel zum
letzten Schritt für die übliche Boot-Sequenz.
- 5.
- Wenn im anfänglichen Root-Dateisystem 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 Root-Dateisystem eingebunden. (Wenn
/linuxrc beendet wird, wenn noch Dateisysteme im
anfänglichen Root-Dateisystem 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 Root-Dateisystem 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 Root-Dateisystem
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 Root-Dateisystem 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 Root-Dateisystem 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 Root-Dateisystem enthalten.
Wechsel des normalen Root-Dateisystems¶
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 Root-Dateisystem verwendet. Für ein über NFS
eingebundenes normales Root-Dateisystem 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 Root-Dateisysteme lesen Sie die
Kernel-Dokumentation in der Datei
Documentation/filesystems/nfsroot.txt. Weitere Informationen
über das Einstellen des Root-Dateisystems finden sich in den
Dokumentationen von
LILO und
LOADLIN.
Die ausführbare Datei
/linuxrc kann auch das normale
Root-Gerät ändern. Damit
/linuxrc das normale
Root-Gerät ändern kann, muss
/proc eingehängt
sein. Nach dem Einhängen von
/proc ändert
/linuxrc
das normale Root-Gerä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 physikalisches
Root-Gerät wird geändert, indem
/linuxrc die
Gerätenummer des neuen Root-Dateisystems in
/proc/sys/kernel/real-root-dev schreibt. Für ein
NFS-Root-Dateisystem wird das Root-Gerä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 Root-Gerät auf
/dev/hdb1
ändern:
echo 0x365 >/proc/sys/kernel/real-root-dev
Ein NFS-Beispiel: Die folgenden Shell-Befehlszeilen würden das normale
Root-Gerä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 Root-Dateisystems ist veraltet. Die
Linux-Kernel-Quelldatei
Documentation/initrd.txt sowie
pivot_root(2) und
pivot_root(8) informieren über das
moderne Verfahren zur Änderung des Root-Dateisystems.
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 Root-Dateisystems (z.B.
Gerätetyp, Gerätetreiber, Dateisystem) und (2) der
Installationsmedien (z.B. CD-ROM, Netzwerk, Band, ...) erforderlich ist.
Sie kann den Benutzer danach fragen, die Geräte selbst suchen oder
einen hybriden Ansatz verfolgen.
- 3.
- Die ausführbare Datei /linuxrc lädt die notwendigen
Module aus dem anfänglichen Root-Dateisystem.
- 4.
- Die ausführbare Datei /linuxrc erstellt und füllt das
Root-Dateisystem. (In diesem Stadium muss das normale Root-Dateisystem
noch kein vollständiges System sein.)
- 5.
- Die ausführbare Datei /linuxrc schreibt
/proc/sys/kernel/real-root-dev, hängt /proc, das
normale Root-Dateisystem und alle weiteren von ihm eingehängten
Dateisysteme aus und beendet sich dann.
- 6.
- Der Kernel bindet dann das normale Root-Dateisystem 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 /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 Root-Dateisystem-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¶
- 1.
- 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.
- 2.
- 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.
- 3.
- 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/initrd.txt im Linux-Kernelquelltext-Verzeichnis und die
Dokumentationen von LILO, LOADLIN und SYSLINUX
KOLOPHON¶
Diese Seite ist Teil der Veröffentlichung 3.74 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
http://www.kernel.org/doc/man-pages/.
ÜBERSETZUNG¶
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard
Schauer <Martin.E.Schauer@gmx.de> und Mario Blättermann
<mario.blaettermann@gmail.com> 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 <debian-l10n-german@lists.debian.org>.