Verwendet initramfs /etc/fstab?

Verwendet initramfs /etc/fstab?

So wie ich es verstehe, ist initramfs für das Laden des „echten“ Root-Dateisystems verantwortlich.

Nun gibt es zwei Stellen, an denen wir diese Root definieren. Zuerst fügen wir einen Eintrag in ein /etc/fstab. Zweitens fügen wir das Gerät in die Kernel-Boot-Befehle ein, z. B. root=/dev/sda1.

Welchen Parameter verwendet initramfs, um zu bestimmen, wo sich das Root-Dateisystem befindet? Wenn es den Root-Kernel-Parameter verwendet, warum haben wir dann einen Eintrag in /etc/fstab? Die zweite Option (sie lautet /etc/fstab) ist völlig unlogisch, da sich die /etc/fstabDatei auf genau dem Root-Gerät befindet, das initramfs überhaupt erst zu mounten versucht.

Sehr verwirrendes Zeug.

Antwort1

Wie Sie sagten, besteht der Zweck von initramfs darin, das „echte“ Root-Dateisystem zu mounten (es kann auch andere Dinge tun, aber das ist die allgemeine Aufgabe).

Ohne ein Initramfs mountet der Kernel eine Partition normalerweise schreibgeschützt und übergibt dann die Kontrolle an /sbin/init. Ein Initramfs übernimmt diese Aufgabe einfach vom Kernel, normalerweise dann, wenn das Root-Dateisystem keine normale Partition ist (mdraid, lvm, verschlüsselt usw.).

Abgesehen vom Hintergrund zu initramfs /etc/fstabbefindet sich Ihr System auf Ihrem Root-Dateisystem. Wenn initramfs gestartet wird, ist dieses Root-Dateisystem daher nicht vorhanden und kann daher nicht auf die fstab zugreifen (Henne-Ei-Problem).
Stattdessen müssen wir einen Parameter an die Kernel-Boot-Argumente übergeben, den initramfs verwenden soll. Normalerweise ist das so etwas wie root=/dev/sdX. Es kann jedoch auch etwas tun, um automatisch herauszufinden, wo sich Ihr Root-Gerät befindet, und daher gibt es überhaupt keinen Parameter. Da es sich nur um Software handelt (im Allgemeinen ein Skript), kann es wirklich alles tun, was es will, um das Root-Gerät zu mounten.

Wie bereits erwähnt, wird der Kernel nun das echte Root-Verzeichnis schreibgeschützt mounten. Das initramfs sollte genau dies tun. Sobald das initramfs fertig ist, fährt das System mit dem Booten fort, als ob es überhaupt kein initramfs gäbe, und /sbin/initstartet. Dieses init startet dann alle Ihre normalen Boot-Skripte, und es ist die Aufgabe eines dieser Skripte, zu lesen /etc/fstab, Root auf Lesen/Schreiben umzustellen und alle Ihre anderen Dateisysteme zu mounten.

Antwort2

Das kann sein oder auch nicht. Da Initramfs auf verschiedene Arten aufgebaut werden kann (der Kernel lädt es einfach und führt es aus, /initwas auch immer passiert). Die Verwendung eines Parameters ist jedoch üblicher, da dies mehr Flexibilität ermöglicht - d. h. wenn sich etwas ändert, können Sie einfach den Starteintrag bearbeiten und alles funktioniert weiter. Mit einem integrierten, fest codierten Root wäre dies nicht unbedingt möglich.

Der fstab-Eintrag kann in jedem Fall erforderlich sein, da er auch andere Dinge bestimmt, wie z. B. Mount-Optionen (von denen einige unterwegs geändert werden können) und fsckdie Reihenfolge. Selbst wenn er völlig überflüssig wäre (und wenn Initramfs damit umgeht, funktioniert es möglicherweise auch ohne), würde ich den Eintrag der Vollständigkeit halber trotzdem dort belassen.

Antwort3

Sie können /etc/fstab als statisches Mounten betrachten. Es ist nur eine Möglichkeit, eine solche Aufgabe auszuführen, aber nicht die einzige. Tatsächlich sehen Sie, wenn Sie den Befehl mount ausführen, viele Dateisysteme, die in fstab fehlen. Dienste wie udev und udisk verwalten einen Großteil des „Automountens“ und ignorieren dabei die Datei /etc/fstab …

Wenn also etwas häufig gemountet wird oder nicht, hat das nichts mit /etc/fstab zu tun.

initramfs ist nur ein temporäres Root-FS, das während des Bootvorgangs verwendet wird, bis das „echte“ Root-FS gemountet ist. Warum sollte sich initramfs also in /etc/fstab befinden?

verwandte Informationen