initramfs steht für initial ram filesystem (sinngemäß übersetzt Ausgangsdateisystem im Arbeitsspeicher) und ist der Nachfolger von initrd. Ein initramfs-Archiv ist eine komprimierte Datei, die 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

Bearbeiten

Der Linux-Kernel kann ab Version 2.5.46 von einem initramfs booten.[1] 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-Volume einzuhängen und von 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-Volume (root device) über das Stammverzeichnis einzuhängen und /sbin/init von dort zu starten.

Veränderungen gegenüber initrd

Bearbeiten
  • 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, was das Laden von mehr als einem initramfs-Archiv ermöglicht

Einzelnachweise

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