Initramfs/Guide/it

Più e più sistemi richiedono un initramfs per essere avviati correttamente. In questa guida tratteremo il concetto di initramfs, nonchè come crearlo e gestirlo correttamente.

Introduzione
Per molti utenti, un sistema initramfs non è importante. Il loro sistema utilizza uno schema di partizionamento semplice senza drivers o impostazioni particolari (tipo file systems criptati), così il kernel Linux è interamente capace di gestire il controllo del binario nel loro sistema. Ma per molti sistemi, un initramfs è obbligatorio.

Il concetto chiave per comprendere cos'è un initramfs (o per cosa è necessario) è di capire come lavora il processo di avvio del Linux, anche in un approccio di alto livello.

Processo di avvio del linux
Da quando il kernel Linux ha il controllo sul sistema (dopo essere stato caricato dal boot loader), esso prepara la sua struttura di memoria e i drivers. Esso poi passa il controllo a un'applicazione (generalmente ) il cui compito è quello di preparare ulteriormente il sistema e assicurarsi che, alla fine del processo di avvio, tutti i servizi necessari siano attivi e l'utente sia in grado di accedere. L'applicazione lo fa lanciando, tra gli altri servizi, il demone  che caricherà e preparerà ulteriormente il sistema in base ai dispositivi rilevati. Quando viene lanciato, tutti i file systems rimanenti che non sono stati montati vengono montati e i restanti servizi vengono avviati.

Per i sistemi in cui tutti i necessari files e strumenti risiedono nello stesso file system, l'applicazione  può controllare perfettamente il successivo processo di avvio. Ma quando ci sono multipli file systems (o sono presenti più installazioni), questo potrebbe diventare un pò più complicato.


 * Quando la partizione è in un file system separato, i tools e i drivers che hanno files memorizzati all'interno di tale partizione  non possono essere utilizzati a meno che  non viene resa disponibile. Non è possibile, quindi, avviare il sistema senza questi necessari tools.


 * Se il file system root è criptato, il kernel Linux non sarà in grado di trovare l'applicazione, risultando un sistema inavviabile.

La soluzione a questo problema è da tempo quella di utilizzare un "initrd" (initial root device).

L'initial root disk
L'initrd è una struttura disco in-memory (ramdisk) che contiene i tools e gli script necessari per montare i file systems occorrenti "prima" che il controllo passi all'applicazione nel file system root. Il kernel Linux avvia lo script setup (generalmente chiamato, ma questo nome non è obbligatorio) in tale root disk, il quale prepara il sistema, passa al file system radice reale e chiama.

Sebbene il metodo initrd era proprio quello necessario, esso aveva alcuni inconvenienti:


 * Si tratta di un dispositivo a blocchi a tutti gli effetti, che richiede il sovraccarico di un intero file system; ha una dimensione fissa. La scelta di un initrd troppo piccolo comporta che tutti gli script necessari non possono essere eseguiti correttamente. Renderlo troppo grande, invece, sprecherà solo memoria.


 * Poiché si tratta di un vero e proprio dispositivo statico, esso consuma memoria cache nel kernel Linux ed è attivo nei metodi di gestione dei file in uso (come il paging) e questo rende initrd un consumatore di memoria.

Per risolvere questo problema (che per alcuni forse è fortemente chiamato problema), è stato creato l'initramfs.

L'initial ram file system
Un initramfs ' un initial ram file system situato su "tmpfs" (un file system in memoria leggero e di dimensione flessibile), il quale non utilizza un dispositivo di blocco separato (cosicchè non viene fatta nessuna attività di caching e tutte le attività mensionate prima scompaiono). Proprio come initrd, esso contiene i tools e gli script necessari per montare i file systems prima del binario nel file system radice reale. Questi tools possono essere strati di astrazione di decrittazione (per i file systems crittografati), gestori di volume logico, software RAID, driver bluetooth situati su file system loader, etc.

Il contenuto dell'initramfs è realizzato con la creazione di un archivio cpio. è una vecchia (ma testata) soluzione di archivio dei file (e i suoi files di archivio risultanti sono chiamati files cpio). cpio è comparabile all'archiviatore. La scelta di, però, è stata fatta perchè è più semplice da implementare (code-wise) e supporta i files di dispositivo che invece non supporta.

Tutti i files, tools, le librerie, le impostazioni di sistema (se applicabili), etc. sono messi all'interno dell'archivio cpio. Questo archivio viene quindi compresso utilizzando l'utilità e memorizzato accanto al kernel Linux. Il boot loader, quindi, lo passerà al kernel Linux all'atto dell'avvio così che il kernel saprà che è necessario un initramfs.

Una volta individuato, il kernel Linux creerà un file system tmpfs, estrarrà il contenuto dell'archivio su di esso, e lancerà lo script collocato nella radice del file system tmpfs. Questo script monterà il file system radice reale (dopo essersi accertato di poterlo montare, per esempio caricando moduli aggiuntivi, preparando la crittografia, etc.) come pure altri file system vitali (ad esempio e ).

Una volta montati il file system root e gli altri file systems vitali, lo script dalla initramfs passerà la radice verso il file system root reale e finalmente chiamerà il binario  in questo sistema per continuare il processo di avvio.

Introduzione e configurazione del bootloader
Per creare un initramfs è importante conoscere quali drivers addizionali, scripts e tools saranno necessari per avviare il sistema. Per esempio, se viene utilizzato LVM, LVM tools è necessario che sia presente su initramfs. Allo stesso modo, se il software RAID viene utilizzato, l'utilità sarà richiesta, etc.

Alcuni strumenti esistono per aiutare gli utenti a creare un initramfs (compreso l'archiviatore ) per i loro sistemi. Ma per coloro che cercano totale controllo può pure essere facile creare initramfs personalizzati.

Una volta creato, la configurazione del bootloader dovrà essere aggiustata per informarlo che dovrà essere utilizzato un initramfs. Per esempio, se l'initramfs è memorizzato come, la configurazione in può essere come la seguente:

Utilizzare genkernel
L'utilità di costruzione del kernel di Gentoo,, può essere usata per generare un initramfs, anche se non è stato utilizzato per configurare e costruire il kernel.

Per utilizzare per generare l'initramfs, è consigliato che tutti i drivers e codici necessari per montare i file systems  e  siano inclusi nel kernel (non come moduli). Quindi, invocare come segue:

A seconda del sistema, possono essere necessarie una o più delle seguenti opzioni:

Uns volta terminato, il risultante file initramfs sarà memorizzato in.

Utilizzando dracut
L'utilità è creata al solo scopo di gestire i files initramfs. Essa utilizza un approccio altamente modulare su quale supporto deve essere incluso e su quale non deve essere incluso.

E' consigliabile impostare (o disimpostare) i moduli necessari. Dopo aver configurato la variabile DRACUT_MODULES in, eseguire per installare l'utilità Dracut.

Il passo successivo è di configurare editando il file. Nella configurazione del file, il quale è ben commentato, al fine di aggiungere il supporto per i moduli necessari.

Una volta configurato, creare un initramfs eseguendo come segue:

L'immagine risultante supporta sistemi di avvio generici basati sulla configurazione che si trova in. E' anche possibile generare un initramfs specificatamente su misura per il "proprio" sistema (lo stesso prova ad individuare i tools necessari, drivers, ecc... dal sistema esistente). Se i moduli e i drivers sono costruiti dentro al kernel (non come moduli separati e riferimenti al firmware), può essere aggiunta l'opzione :

Per maggiori informazioni consultare il manuale dracut e il manuale dracut.cmdline:

Vedi anche

 * Initramfs nel Wiki officiale di Gentoo.
 * Dracut nel Wiki officiale di Gentoo.

Risorse esterne
File ramfs-rootfs-initramfs.txt all'interno della documentazione del kernel del Linux.