Wie wird auf / etc / fstab zugegriffen, bevor root gemountet wird?

21

Ich habe einige Änderungen vorgenommen /etc/fstab, als mir diese Henne-Ei-Frage einfiel. Wenn sie /etc/fstabdie Anweisungen zum Mounten der Dateisysteme einschließlich der Root-Partition enthält, wie liest das Betriebssystem diese Datei dann überhaupt?

Sashoalm
quelle

Antworten:

18

Wenn der Bootloader den Kernel aufruft, wird ihm ein Parameter mit dem Namen übergeben root. Sobald der Kernel die Initialisierung abgeschlossen hat, wird die angegebene Root-Partition gemountet /und anschließend aufgerufen /sbin/init(sofern dies nicht durch andere Parameter überschrieben wurde).

Anschließend initstartet der Prozess den Rest des Systems, indem alle Dienste geladen werden, die für den Start in Ihrem Standard-Runlevel definiert sind.

Abhängig von Ihrer Konfiguration und dem von Ihnen verwendeten Init-System kann es mehrere andere Schritte zwischen den von mir erwähnten geben. Derzeit sind SysVInit (das traditionelle), Upstart und Systemd die beliebtesten Init-Systeme unter Linux. Weitere Informationen zum Startvorgang finden Sie in diesem Wikipedia-Artikel .

Hier ist ein vereinfachtes Beispiel meiner Grub-Konfiguration. Der wichtige Teil, um Ihre Frage zu beantworten, ist in der vorletzten Zeile root=/dev/sda3:

menuentry 'Gentoo GNU/Linux' --class gentoo --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-40864544-2d0f-471a-ab67-edd7e4754dae' {
    set root='hd0,msdos1'
    echo    'Loading Linux 3.12.6-gentoo-c2 ...'
    linux   /kernel-3.12.6-gentoo-c2 root=/dev/sda3 ro  
}

In vielen Konfigurationen wird der Kernel /im schreibgeschützten Modus bereitgestellt und alle anderen Optionen werden auf die Standardeinstellungen gesetzt. In können /etc/fstabSie Dateisystemparameter angeben, die dann angewendet werden, wenn init sie erneut anhängt.

Wiederholung
quelle
2
Die Root-Partition wird anfänglich vom Kernel schreibgeschützt gemountet. Ein initProzess hängt dann die Dinge /etc/fstabgemäß den dortigen Parametern ein, was normalerweise bedeutet, dass die Root-Partition mit Lese- und Schreibzugriff neu eingebunden wird .
Goldlöckchen
1
Der Kernel kann auch mit fest codierten Routinen kompiliert werden, die nach bestimmten Dateien auf der aktiven Partition suchen, die noch nicht gemountet sind. So funktioniert der FreeBSD-Loader.
Kondybas
@Kondybas LILO unter Linux ist auch hartcodiert, um den Kernel bei einigen festen Blocknummern zu laden
phuclv
3

Ein Eintrag in fstabist erforderlich, wenn Sie einige nicht standardmäßige Mount-Optionen angeben möchten. Heutzutage mit systemdeinem korrekten Kernel-Gerät und fstype in fstabsind jedoch unnötig. Sie können den Stammeintrag durch Folgendes ersetzen:

#UUID=8f74237d-b689-4beb-9d1f-f60b426c9969 /            ext4        rw,relatime,data=ordered    0 1
dummy /             auto        rw,relatime,data=ordered,debug  0 1

und die Einhängeoptionen werden weiterhin von systemd berücksichtigt.

Sie können einen beliebigen falschen Gerätenamen verwenden, z. B. /dev/sdz1mit Ausnahme einer falschen UUID. Mit einer falschen UUID wird die Nachricht beim Booten gedruckt:, Failed to start Remount Root and Kernel File Systemsaber das System bootet trotzdem.

Becken
quelle