Initramfs usa / etc / fstab?


20

Per come lo capisco, initramfs è responsabile del caricamento del filesystem di root "reale".

Ora, ci sono due posti in cui definiamo quella radice. Per prima cosa inseriamo una voce /etc/fstab. In secondo luogo, inseriamo il dispositivo nei comandi di avvio del kernel, ad es root=/dev/sda1.

Quale utilizza initramfs per determinare dov'è il filesystem di root? Se utilizza il parametro del kernel root, perché abbiamo una voce /etc/fstab? La seconda opzione, (si legge /etc/fstab), è piuttosto illogica perché il /etc/fstabfile si trova sul dispositivo root che initramfs sta provando a montare in primo luogo.

Roba molto confusa.

Risposte:


14

Come hai detto, lo scopo di initramfs è di montare il "vero" filesystem di root (può fare anche altre cose, ma questo è il compito comune).

Senza un initramfs, il kernel normalmente monterà una partizione in sola lettura e quindi passerà il controllo a /sbin/init. Un initramfs prende semplicemente questo compito dal kernel, di solito quando il filesystem di root non è una partizione normale (mdraid, lvm, crittografato, ecc.).

Ora, a parte lo sfondo di initramfs, il tuo /etc/fstabrisiede sul tuo filesystem di root. Come tale, quando viene avviato initramfs, quel filesystem di root non c'è, e quindi non riesce ad arrivare al fstab (problema di pollo e uova).
Invece, dobbiamo passare un parametro negli argomenti di avvio del kernel per l'utilizzo da parte di initramfs. Normalmente questo è qualcosa del genere root=/dev/sdX. Tuttavia, potrebbe anche fare qualcosa per capire automaticamente dove si trova il tuo dispositivo root e quindi non ci sono parametri. Dal momento che è solo un software (generalmente uno script), può davvero fare tutto ciò che vuole per montare il dispositivo root.

Ora, come affermato in precedenza, il kernel monterà la radice reale in sola lettura. Initramfs dovrebbe fare esattamente questo. Una volta terminato initramfs, il sistema procede all'avvio esattamente come se non ci fossero affatto initramfs e si /sbin/initavvia. Questo init avvia quindi tutti i normali script di avvio ed è compito di uno di questi script leggere /etc/fstab, passare da root a lettura-scrittura e montare tutti gli altri filesystem.


Quindi, stai dicendo che / sbin / init all'interno del vero filesystem di root rimonterà nuovamente root usando le opzioni in / etc / fstab?
Ahmed Ghonim,

3
Sì. Di solito tramite un semplice mount -o remount,rw /. Non cambierà il dispositivo che è montato, ma cambierà le opzioni sul supporto. Dalla pagina man:After this call mount reads fstab (or mtab) and merges these options with options from command line
Patrick,

Come passiamo un parametro negli argomenti di avvio del kernel se stiamo usando la riga di comando grub2? Il mio sistema non mostra il menu di grub per qualche motivo.
intuito il

@intuited Dovresti fare una nuova domanda. I commenti non sono il luogo per domande e risposte
Patrick,

lsinitramfs /boot/initrd* | fgrep fstabe sorpresa, initramfs contiene file fstab, almeno per me.
youfu

2

Potrebbe o no. Dato che Initramfs può essere costruito in vari modi (il kernel lo carica e gira /initche fa qualunque cosa). Tuttavia, l'utilizzo di un parametro è più comune, in quanto consente una maggiore flessibilità, ad esempio se qualcosa cambia, è sufficiente modificare la voce di avvio e le cose continuano a funzionare. Con una radice hardcoded integrata, ciò non sarebbe necessariamente possibile.

La voce fstab può ancora essere richiesta in entrambi i modi poiché determina anche altre cose, come le opzioni di mount (alcune delle quali possono essere cambiate in movimento) e l' fsckordine. Inoltre, anche se fosse del tutto superfluo (e se Initramfs lo gestisse, potrebbe funzionare anche senza), terrei comunque l'entrata lì semplicemente per completezza.


1

Puoi considerare / etc / fstab come montaggio statico, è solo un modo per fare un simile compito, ma non l'unico, infatti, eseguire il comando mount e vedi molti filesystem che mancano in fstab. Servizio come udev e udisk gestisce gran parte dell '"automounting" ignorando il file / etc / fstab ...

Quindi, se qualcosa è montato o non spesso non ha nulla a che fare con / etc / fstab.

initramfs è solo un rootfs temporaneo usato durante il processo di avvio fino a quando non viene montato il "vero" rootfs, quindi perché initramfs dovrebbe essere su / etc / fstab?

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.