Linux Filesystem Hierarchy: Versione 0.65 | ||
---|---|---|
Indietro | Capitolo 1. La gerarchia del filesystem Linux | Avanti |
initrd [initial ram disk] rende possibile il caricamento di un disco RAM (RAM disk) da parte del bootloader. Questo disco RAM può essere poi montato come se fosse il file system root e da questo filesystem possono essere eseguiti i programmi. In seguito può essere montato un nuovo file system root da un dispositivo diverso. Il filesystem root precedente (derivante da initrd) viene quindi spostato su una directory e può essere successivamente smontato. initrd è progettato principalmente per consentire che l'avvio del sistema avvenga in due fasi, durante le quali prima viene avviato il kernel con una dotazione minima di driver precompilati, poi vengono caricati ulteriori moduli da initrd. Funzionamento ------------- Usando initrd, il sistema si avvia tipicamente in questo modo: 1) il bootloader carica il kernel e il disco RAM iniziale 2) il kernel converte initrd in un disco RAM "normale" e libera la memoria usata da initrd 3) initrd viene montato in modalità di lettura\scrittura come root 4) viene eseguito /linuxrc (che può essere qualsiasi eseguibile valido inclusi gli script di shell, viene eseguito con uid 0 e può fare sostanzialmente tutto ciò che può fare init) 5) linuxrc monta il file system root "reale" 6) linuxrc assegna il file system root alla directory root usando la chiamata di sistema pivot_root 7) viene eseguita la sequenza di avvio ordinaria (p.es. chiamata di /sbin/init) sul file system root 8) viene rimosso il file system initrd Si noti che per cambiare la directory root non è necessario smontarla. È quindi possibile lasciare i processi in esecuzione su initrd durante questa procedura. Si noti inoltre che i file system montati sotto initrd continuano ad essere accessibili. Possibili scenari d'uso ----------------------- La motivazione principale per implementare initrd è stata quella di considerare la configurazione modulare del kernel durante l'installazione del sistema. La procedura dovrebbe funzionare così: 1) il sistema viene avviato da un disco floppy o da altri supporti con un kernel minimale (p.es. supporto per dischi RAM, initrd, a.out e il FS Ext2) e viene caricato initrd 2) /linuxrc determina cosa è necessario per (1) montare il FS root "reale" (cioè tipo di dispositivo, driver, file system) e (2) i supporti della distribuzione (p.es. CD-ROM, rete, nastri, ...). Questo può essere fatto chiedendo all'utente, mediante il riconoscimento automatico, o con un approccio ibrido. 3) /linuxrc carica i moduli del kernel necessari 4) /linuxrc crea e "popola" il file system root (questo non sarà ancora un sistema completamente utilizzabile) 5) /linuxrc chiama pivot_root per cambiare il file system root e execs, attraverso chroot, un programma che prosegue l'installazione 6) il boot loader è installato 7) il boot loader è configurato per caricare un initrd con la serie di moduli usati per l'avvio del sistema (p.es. /initrd può essere modificato, quindi smontato, infine l'immagine viene scritta da /dev/ram0 o /dev/rd/0 in un file) 8) ora il sistema è avviabile e possono essere eseguiti ulteriori processi d'installazione Il ruolo chiave di initrd è quello di riusare i dati della configurazione durante il normale funzionamento del sistema senza richiedere l'uso di un kernel "generico" dilatato, o dover ricompilare o ricreare un collegamento al kernel. Un secondo scenario riguarda le installazioni dove Linux viene eseguito su sistemi con diverse configurazioni hardware in un singolo dominio di amministrazione. In questi casi sarebbe meglio generare solo un piccolo gruppo di kernel (idealmente solo uno) e prendere la parte più piccola possibile delle informazioni di configurazione specifiche per il sistema. In questo caso potrebbe essere generato un normale initrd con tutti i moduli necessari. Quindi dovrebbe essere diverso solo /linuxrc, o un file letto da questo. Un terzo scenario è più indicato per il recupero di dischi, perché informazioni come la posizione della partizione del FS root non devono essere fornite al momento dell'avvio, ma il sistema caricato da initrd può chiamare una finestra di dialogo intuitiva, che può anche effettuare alcuni controlli di integrità (o anche alcune forme di autorilevmento). Da ultimo, ma non meno importante, i distributori di CD-ROM possono usarlo per una migliore installazione da CD, p.es. usando un floppy di avvio e caricando nel SO un disco RAM più grande attraverso initrd da CD, o avviando mediante un "caricatore" come LOADLIN o direttamente dal CD-ROM, e caricando il disco RAM da CD senza bisogno di floppy.