initramfs

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 17. Juli 2016 um 21:12 Uhr durch Xqbot (Diskussion | Beiträge) (Bot: Korrigiere problematische HTML-Tags der Kategorie:Wikipedia:Seite mit problematischem HTML-Tag). Sie kann sich erheblich von der aktuellen Version unterscheiden.
Zur Navigation springen Zur Suche springen

initramfs steht für initial ram filesystem (sinngemäß übersetzt Ausgangsdateisystem im Arbeitsspeicher) und ist der Nachfolger von initrd. Das initramfs ist ein komprimiertes Archiv, das für den Systemstart benötigte Dateien enthält. Es kann vom Linux-Kernel beim Booten als Stammverzeichnis eingehängt werden. Anschließend wird ein auf dem initramfs vorhandenes Programm (init) gestartet. Das gestartete Programm kann unterschiedliche Aufgaben erfüllen. Bei eingebetteten Systemen kann die ganze Funktionalität des Systems im initramfs enthalten sein. Personal Computer nutzen das initramfs oft nur als einen Zwischenschritt, um Treiber zu laden und andere Vorbereitungen für den Start des eigentlichen Systems zu treffen. Durch das initramfs bzw. initrd wurde es möglich, den Bootprozess unter Linux flexibler zu gestalten und Funktionalität aus dem Kernel in den Userspace auszulagern.

Bootvorgang

Der Linux-Kernel kann seit Version 2.5.46 [1] von einem initramfs booten. Das initramfs-Archiv kann im Kernel selbst enthalten sein oder vom Bootloader aus einer Datei in den Arbeitsspeicher geladen werden. Der Kernel dekomprimiert das initramfs-Archiv und hängt das entpackte Archiv dann als Stammverzeichnis ein. Als Nächstes wird versucht, das Programm /init aus dem initramfs zu starten. Schlägt das Starten fehl, versucht der Kernel, das eigentliche Root-Device einzuhängen und dort /sbin/init zu starten.

Das initramfs selbst ist ein cpio-Archiv, das meist eine Unix-Shell (oft BusyBox) und andere grundlegende Programme enthält. In diesem Fall ist /init ein einfaches Shellskript, das die im initramfs enthaltenen Programme auf die gewünschte Weise verknüpft. Es ist aber auch möglich, dass /init ein C-Programm ist, das gegen eine kleine Variante der libc gelinkt wurde. Die letzte Aufgabe von /init ist es meist, das eigentliche Root-Device über das Stammverzeichnis einzuhängen und /sbin/init zu starten.

Veränderungen gegenüber initrd

  • Im Kernel muss kein Dateisystem-Treiber fest einkompiliert sein
  • Die Größe des initramfs unterliegt keiner festen Obergrenze
  • Zugriffe auf das initramfs werden nicht gepuffert, wodurch Arbeitsspeicher gespart wird
  • Verschiedene cpio-Archive können verkettet werden

Siehe auch

Quellen

  1. Linux Weekly News. 7. November 2002, http://lwn.net/Articles/14776/

Weblinks