Die anfängliche Ramdisk (initrd) ist normalerweise eine abgespeckte Version des Root-Dateisystems, die nur das enthält, was zum Mounten des eigentlichen Root-Dateisystems und zum Übergeben des Bootens erforderlich ist.
Die initrd existiert, weil in modernen Systemen der Bootloader nicht intelligent genug gemacht werden kann, um das Root-Dateisystem zuverlässig zu finden. Es gibt einfach zu viele Möglichkeiten für ein so kleines Programm wie den Bootloader. Berücksichtigen Sie NFS-Root, nicht standardmäßige RAID-Karten usw. Der Bootloader muss seine Arbeit nur mit dem BIOS und dem Code erledigen, der in den Bootsektor gepackt werden kann.
Die initrd wird an einem Ort gespeichert, den der Bootloader finden kann , und sie ist klein genug, damit der zusätzliche Speicherplatz normalerweise niemanden stört. (In kleinen eingebetteten Systemen gibt es normalerweise keine "echte" Wurzel, nur die initrd.)
Die initrd ist wertvoll: Ihr Inhalt muss unter allen Bedingungen erhalten bleiben, denn wenn die initrd kaputt geht, kann das System nicht booten. Eine Designentscheidung, die die Designer getroffen haben, um dies sicherzustellen, besteht darin, dass der Bootloader das initrd schreibgeschützt lädt. Es gibt auch andere Prinzipien, die darauf hinarbeiten, wie zum Beispiel bei kleinen Systemen, bei denen es keine "echte" Wurzel gibt, die Sie immer noch separat bereitstellen /tmp
, /var/cache
und solche zum Speichern von Dingen. Das Ändern der initrd wird nur selten durchgeführt und sollte dann sehr sorgfältig durchgeführt werden.
Kommen sie zurück zu dem normalen Fall , wo es ist ein echtes Root - Dateisystem, wird es zunächst angebracht schreibgeschützt , da initrd war. Es wird dann aus den gleichen Gründen so lange wie möglich schreibgeschützt gehalten. Jegliches Schreiben in das eigentliche Stammverzeichnis, das durchgeführt werden muss, wird verschoben, bis das System vorzugsweise hochgefahren wird, oder zumindest bis spät im Startvorgang, wenn diese Voreinstellung nicht erfüllt werden kann.
Das Wichtigste in dieser schreibgeschützten Phase ist, dass das Root-Dateisystem überprüft wird, um festzustellen, ob es ordnungsgemäß bereitgestellt wurde. Das könnte der Bootloader sicherlich tun, anstatt es der initrd zu überlassen, aber was passiert dann, wenn das Root-Dateisystem nicht sauber abgemeldet wurde? Dann muss es anrufen fsck
, um es zu überprüfen und möglicherweise zu beheben. Also, wo würde es initrd
herkommen fsck
, wenn es für diesen Schritt verantwortlich wäre , anstatt auf die Übergabe an die "echte" Wurzel zu warten? Man könnte sagen, dass Sie beim Erstellen fsck
in das kopieren müssen initrd
, aber jetzt ist es größer. Und obendrein, welche fsck
werden Sie kopieren? Linux-Systeme verwenden regelmäßig etwa ein Dutzend verschiedene Dateisysteme. Kopieren Sie nur diejenige, die zum Zeitpunkt desinitrd
geschaffen? Erhöhen Sie die Größe, initrd
indem Sie alle verfügbaren fsck.foo
Programme in das Programm kopieren , falls das Root-Dateisystem später auf einen anderen Dateisystemtyp migriert wird und jemand vergisst, die initrd neu zu erstellen?
Die Architekten des Linux-Boot-Systems haben sich mit Bedacht dafür entschieden, den initrd nicht mit diesen Problemen zu belasten. Sie haben die Überprüfung des realen Root-Dateisystems an das reale Root-Dateisystem delegiert, da dies besser möglich ist als die initrd.
Sobald der Startvorgang so weit fortgeschritten ist, dass dies sicher möglich ist, wird die initrd unter dem realen Stamm mit ausgetauscht pivot_root(8)
, und das Dateisystem wird im Lese- / Schreibmodus erneut bereitgestellt.