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.

Once created, the bootloader configuration will need adjusted to inform it an initramfs is to be used. For instance, if the initramfs file is stored as, then the configuration in could look like the following:

Using genkernel
Gentoo's kernel building utility,, can be used to generate an initramfs, even if was not used to configure and build the kernel.

To use for generating an initramfs, it is recommended all necessary drivers and code that is needed to mount the  and  file systems be included in the kernel (not as modules). Then, call as follows:

Depending on the system, one or more of the following options may be needed:

When finished, the resulting initramfs file will be stored in.

Using dracut
The utility is created for the sole purpose of managing initramfs files. It uses a highly modular approach on what support is to be included and what is not to be included.

To install, make special care to include support for the correct value(s) in the DRACUT_MODULES variable. This variable can be set in to include support for system specific setups:

It is advisable to set (or unset) the modules needed. After configuring the DRACUT_MODULES variable in, to install the Dracut utility.

The next step is to configure by editing. In the configuration file, which is well commented, in order to add support for needed modules.

Once configured, create an initramfs by calling as follows:

The resulting image supports generic system boots based on the configuration in. It is also possible to generate an initramfs specifically tailored to your system (which tries to detect the needed tools, drivers, etc. from the existing system). If the modules and drivers are built into the kernel (not as separate modules and references to the firmware), then the  option can be added:

For more information, check out the dracut and dracut.cmdline manual pages:

External resources

 * The ramfs-rootfs-initramfs.txt file within the Linux kernel documentation.