Come si accede a / etc / fstab prima di montare root?


21

Stavo apportando alcune modifiche a /etc/fstab, quando mi è venuta questa domanda su pollo e uova: se /etc/fstabcontiene le istruzioni per montare i file system, inclusa la partizione di root, come fa il sistema operativo a leggere quel file?

Risposte:


18

Quando il boot loader chiama il kernel, gli passa un parametro chiamato root. Quindi una volta che il kernel ha terminato l'inizializzazione continuerà montando la partizione di root data /e poi chiamando /sbin/init(a meno che questo non sia stato sostituito da altri parametri).

Quindi il initprocesso avvia il resto del sistema caricando tutti i servizi definiti per essere avviati nel runlevel predefinito.

A seconda della configurazione e del sistema init in uso, possono esserci più passaggi tra quelli che ho citato. Attualmente i sistemi init più popolari su Linux sono SysVInit (quello tradizionale), Upstart e Systemd. Puoi trovare maggiori dettagli sul processo di avvio in questo articolo di Wikipedia .

Ecco un esempio semplificato della mia configurazione di Grub. La parte importante per rispondere alla tua domanda è dalla seconda all'ultima riga, c'è un 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 molte configurazioni il kernel si monta /in modalità di sola lettura e tutte le altre opzioni sono impostate sui valori predefiniti. In /etc/fstabpotresti specificare i parametri del file system che verranno poi applicati una volta che init lo rimonta.


2
La partizione di root è inizialmente montata in sola lettura dal kernel. Un initprocesso quindi monta le cose in /etc/fstabbase ai parametri lì, il che di solito significa re-montare la partizione di root read-write.
Riccioli d'oro

1
Inoltre il kernel può essere compilato con routine hardcoded che cercano alcuni file speciali sulla partizione attiva che non è già montata. Il caricatore di FreeBSD funziona in questo modo.
Kondybas

@Kondybas LILO su Linux è anche hardcoded per caricare il kernel ad alcuni numeri di blocco fissi
phuclv

3

È fstabnecessaria una voce se si desidera specificare alcune opzioni di montaggio non predefinite. Tuttavia, al giorno d'oggi con systemd, un dispositivo kernel corretto e fstype in fstabsono inutili. Puoi sostituire la voce di root con qualcosa del tipo:

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

e le opzioni di mount sono ancora onorate da systemd.

È possibile utilizzare qualsiasi nome di dispositivo errato, ad es /dev/sdz1. Tranne l'UUID errato. Con un UUID errato il messaggio verrà stampato all'avvio:, Failed to start Remount Root and Kernel File Systemsma il sistema si avvia comunque.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.