Verwendet initramfs / etc / fstab?

20

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

Nun gibt es zwei Orte, an denen wir diese Wurzel definieren. Zuerst setzen wir einen Eintrag in /etc/fstab. Zweitens setzen wir das Gerät auf die Kernel-Boot-Befehle, z root=/dev/sda1.

Welches verwendet initramfs, um festzustellen, wo sich das Root-Dateisystem befindet? Wenn es den Root-Kernel-Parameter verwendet, warum haben wir einen Eintrag in /etc/fstab? Die zweite Option (sie lautet /etc/fstab) ist ziemlich unlogisch, da sich die /etc/fstabDatei genau auf dem Root-Gerät befindet, das initramfs überhaupt bereitzustellen versucht.

Sehr verwirrendes Zeug.

Ahmed Ghonim
quelle

Antworten:

14

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/fstabin 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/initstartet. 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.

Patrick
quelle
Sie sagen also, dass / sbin / init im realen Root-Dateisystem root erneut mit den Optionen in / etc / fstab einbinden würde?
Ahmed Ghonim
3
Ja. In der Regel über eine einfache 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
Patrick
Wie übergeben wir einen Parameter an die Kernel-Boot-Argumente, wenn wir die Befehlszeile grub2 verwenden? Mein System zeigt das Grub-Menü aus irgendeinem Grund nicht an.
intuited
@intuited Sie sollten eine neue Frage stellen. Kommentare sind nicht der
Patrick
lsinitramfs /boot/initrd* | fgrep fstabund überraschenderweise enthält initramfs fstab-datei, zumindest für mich.
Sie
2

Es kann oder es kann nicht. Da das Initramfs auf verschiedene Arten erstellt werden kann (der Kernel lädt es einfach und läuft, /initwas 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 fsckReihenfolge. 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.

Frostschutz
quelle
1

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?

sebelk
quelle