Zuerst will ich einige grundlegende Prinzipien erläutern, die beim Erstellen eines Dateisystems auf einem Loop-Device verwendet werden.
Ein Loop-Device ist ein virtuelles Laufwerk, das wie alle anderen Laufwerke unter Linux verwendet werden kann.
Beispiele für gewöhnliche Laufwerke sind: einzelne Festplattenpartitionen wie
/dev/hda1
, /dev/hda2
, /dev/sda1
oder komplette
Laufwerke wie die Diskettenlaufwerke /dev/fd0
usw.. Sie alle können
verwendet werden, um Dateien oder Verzeichnisse zu speichern. Sie können mit
dem benötigten Dateisystem formatiert (Ext2, MSDOS, NTFS usw.) und dann in
die Verzeichnisstruktur von Linux eingefügt werden (mount
).
Das Loop-Device verwendet eine Datei in einem anderen Dateisystem
als ein virtuelles Laufwerk, welches dann genauso angesprochen werden
kann wie die bereits oben aufgelisteten Medien. Hierfür wird die Gerätedatei
/dev/loop0
oder /dev/loop1
usw. mit der Datei verbunden und
dann dieses neue virtuelle Laufwerk gemountet.
Unter Linux ist es auch möglich, ein anderes virtuelles Laufwerk als Dateisystem zu mounten, die sog. RAM-Disk.
In diesem Fall verweist das Gerät nur auf einen Teil des RAM-Speichers, der hierfür zur Verfügung gestellt wurde. Der zugewiesene Speicher wird nicht auf die Festplatte (Swap Device) ausgelagert. Das Laufwerk wird aber im Cache-Speicher gepuffert.
Eine RAM-Disk kann jederzeit erstellt werden, indem auf die Gerätedatei
/dev/ram0
oder /dev/ram1
geschrieben wird. Sie kann genau
wie ein Loop-Devivce formatiert und gemountet werden.
Wenn eine RAM-Disk verwendet wird, um davon zu booten, wie es oft bei Installations- oder Rescue-Disketten von Linux getan wird, kann das Disk-Image (der komplette Inhalt der Diskette in einer einzelnen Datei) komprimiert auf der Boot-Diskette gespeichert werden. Beim Booten wird dies automatisch vom Kernel erkannt und die Datei auf eine RAM-Disk entpackt, bevor diese dann gemountet wird.
Die Initial-RAM-Disk unter Linux ist ein weiterer wichtiger Mechanismus, den wir benötigen, um ein Loop-Device als Root-Dateisystem zu verwenden.
Bei Verwendung einer Initial-RAM-Disk wird zunächst das Disk-Image in den
Speicher geladen und dann gemountet, damit die Dateien darauf ausgeführt
werden können. Ein Programm, genauer gesagt die Skript-Datei
/linuxrc
, auf der RAM-Disk wird ausgeführt und wenn es fertig
ist, wird ein anderes Speichermedium in das Root-Dateisystem gemountet.
Die alte RAM-Disk ist aber noch verfügbar und im Verzeichnis
/initrd
gemountet, sofern es vorhanden ist, oder sie ist über die
Geräte-Datei /dev/initrd
erreichbar.
Das ist ein ungewöhnliches Verhalten, weil normalerweise der Boot-Vorgang nur von der vorbestimmten Root-Partition gestartet und weiter ausgeführt wird. Mit der Initial-RAM-Disk kann man die Root-Partition aber ändern, bevor die eigentliche Boot-Sequenz startet.
Das Root-Dateisystem wird als erstes gemountet, damit es als das Verzeichnis
/
nach dem Booten erscheint.
Es gibt eine Reihe von Komplikationen beim Root-Dateisystem, die auf die
Tatsache zurück zu führen sind, daß es alle Dateien beinhaltet. Beim Booten
werden die rc-
Skripte gestartet. Das sind die Dateien /etc/rc.d
oder /etc/rc?.d
, je nach Version des Init-Programmes /etc/init
.
Wenn das System gebootet hat, ist es nicht mehr möglich, die Root-Partition zu entfernen oder zu wechseln, da alle Programme sie zu einem gewissem Grad verwenden. Darum ist die Initial-RAM-Disk so nützlich, denn sie kann benützt werden, um am Ende des Bootens eine andere Root-Partition zu haben als am Anfang.
Um zu zeigen, wie die Initial-RAM-Disk arbeitet, sind die einzelnen Vorgänge beim Booten unten aufgelistet.
LILO
oder LOADLIN
bewerkstelligt wird. Wenn das geschieht,
können Sie die Meldung Loading...
sehen.
LILO
oder LOADLIN
und Sie können erneut die
Meldung Loading...
sehen.
/linuxrc
auf der Initial-RAM-Disk wird ausgeführt.
/etc/init
wird gestartet, welches
die durch den Benutzer konfigurierbare Boot-Sequenz durchführt.
Das ist nur eine vereinfachte Darstellung, aber sie reicht aus, um zu erläutern, wie der Kernel gestartet und wo die Initial-RAM-Disk verwendet wird.