Wie Sie bereits sagten, besteht der Zweck von initramfs darin, das "echte" Root-Dateisystem bereitzustellen (es kann auch andere Aufgaben übernehmen, dies ist jedoch die häufigste Aufgabe).
Ohne ein initramfs wird der Kernel normalerweise eine Partition schreibgeschützt mounten und dann die Kontrolle an übergeben /sbin/init
. Ein initramfs übernimmt diese Aufgabe nur vom Kernel, normalerweise, wenn das Root-Dateisystem keine normale Partition ist (mdraid, lvm, encrypted, etc).
Abgesehen vom Hintergrund in initramfs befinden Sie sich jetzt /etc/fstab
in Ihrem Root-Dateisystem. Wenn initramfs gestartet wird, ist das Root-Dateisystem daher nicht vorhanden, sodass es nicht an die fstab gelangen kann (Henne-Ei-Problem).
Stattdessen müssen wir einen Parameter an die Kernel-Boot-Argumente übergeben, damit das initramfs verwendet werden kann. Normalerweise ist das so etwas wie root=/dev/sdX
. Es kann jedoch auch hilfreich sein, um automatisch herauszufinden, wo sich Ihr Root-Gerät befindet. Es gibt also überhaupt keinen Parameter. Da es sich nur um Software (im Allgemeinen ein Skript) handelt, kann es wirklich alles tun, was es zum Mounten des Root-Geräts benötigt.
Wie bereits erwähnt, stellt der Kernel nun die reale Wurzel schreibgeschützt bereit. Die initramfs sollten genau das tun. Sobald die initramfs abgeschlossen sind, fährt das System mit dem Booten genau so fort, als gäbe es überhaupt keine initramfs und /sbin/init
startet. Dieser Init startet dann alle Ihre normalen Boot-Skripte, und es ist die Aufgabe eines dieser Skripte, zu lesen /etc/fstab
, root auf Lese- / Schreibzugriff zu schalten und alle Ihre anderen Dateisysteme bereitzustellen.
mount -o remount,rw /
. Das gemountete Gerät wird nicht geändert, die Optionen für das Mount werden jedoch geändert. Aus der Manpage:After this call mount reads fstab (or mtab) and merges these options with options from command line
lsinitramfs /boot/initrd* | fgrep fstab
und überraschenderweise enthält initramfs fstab-datei, zumindest für mich.Es kann oder es kann nicht. Da das Initramfs auf verschiedene Arten erstellt werden kann (der Kernel lädt es einfach und läuft,
/init
was auch immer funktioniert). Die Verwendung eines Parameters ist jedoch häufiger, da er mehr Flexibilität bietet - dh wenn sich etwas ändert, können Sie einfach den Starteintrag bearbeiten, und die Dinge funktionieren weiter. Mit einer eingebauten, fest codierten Wurzel wäre dies nicht unbedingt möglich.Der fstab-Eintrag ist möglicherweise weiterhin erforderlich, da er auch andere Dinge bestimmt, z. B. Mount-Optionen (von denen einige unterwegs geändert werden können) und die
fsck
Reihenfolge. Auch wenn es völlig überflüssig wäre (und wenn das Initramfs damit fertig wird, könnte es ohne funktionieren), würde ich den Eintrag der Vollständigkeit halber immer noch dort belassen.quelle
Sie können / etc / fstab als statisches Mounten betrachten. Dies ist nur ein Weg, um eine solche Aufgabe auszuführen, aber nicht der einzige, der das Kommando mount ausführt, und Sie sehen viele Dateisysteme, die in fstab fehlen. Service wie udev und udisk verwalten einen Großteil des "automatischen Einbindens" und ignorieren die Datei / etc / fstab ...
Wenn also etwas eingehängt ist oder nicht oft, hat es nichts mit / etc / fstab zu tun.
initramfs ist nur ein temporäres rootfs, das während des Startvorgangs verwendet wird, bis das "wahre" rootfs bereitgestellt wird. Warum sollte initramfs sich also in / etc / fstab befinden?
quelle