Utente:Lorenzo/initramfs

Da LinuxVar, il LUG della provincia di Varese.

Initramfs è un'immagine di un file system caricata nella memoria ram al momento del boot in modo tale che il sistema possa eseguire le primissime operazioni senza dover accedere alla vera partizione root. (Di solito, la partizione root o principale è una partizione dell'hard disk del computer, ma può essere un hard disk remoto montato tramite NFS o una partizione RAID o una partizione LVM o un partizione criptata ...) Il file system, inteso come insieme di file disposti secondo la classica struttura ad albero dei file system UNIX, è scompattato, caricato nella memoria RAM e montato come partizione root. Il file system può essere completo, cioè contenere tutti i file necessari per il normale lavoro del computer. Di solito, però, initramfs contiene solo i file (di configurazione, dati, di configurazione...) necessari ad eseguire le prime operazioni di configurazioni. Una volta terminate queste operazioni, il sistema cambia partizione root passando da initramfs a quella vera.

Per molti aspetti è simile a initRD, cioé Init Ram Disk. La differenza sostanziale è che Linux accede alla ramfs tramite le api della gestione della memoria mentre accede alla initRD tramite i driver che gestiscono i dispositivi di memorizzazione di massa, cioé gli hard disk, chiavette USB, .... L'uso della initramfs permette, quindi, di accedere alla memoria senza gli overhead necessari per la gestione dei dispositivi di massa.

Contenuti

Initramfs

Il supporto a initramfs è stata introdotto nel kernel 2.6.x da Linus Torlvalds stesso. Prima si poteva usare solo initRD. Vista la somiglianza, si fa confusione tra initramfs e initRD e in alcuni casi si indica con initRD quello che in realtà è una initramfs. In lilo e grub, d'altra parte, non bisogna specificare se si sta usando o una cosa o l'altra.

Perché usare Init Ram FS?

Le opzioni in fase di boot root= e init non sono più sufficienti per i computer moderni. C'è la necessità di usare programmi in user space subito dopo il caricamento del kernel e prima del montaggio della partizione root. Questo è vero quando la root del sistema risiede su partizioni RAID,RAID, LVM, criptate, NFS... Il sistema deve assolutamente cercare la partizione root da cui far partire tutti i servizi.

Initramfs permette di lanciare i programmi di configurazione in userspace, i programmi che normalmente si usano su un sistema Linux. L'initramfs è caricata subito dopo il caricamento del kernel, lancia tutti i programmi contenuti nel proprio file init e, quando è sono stati attiviti tutti i servizi base e attivata la partizione root, cede il controllo al processo 0 del sistema, il padre di tutti i processi del sistema.

L'initRamFs fu introdotta a partire dal kernel 2.5.46 (Novembre 2002)


Modificare un initramfs esistente

Creare initramFS è semplicissimo si prende un file system, lo si archivia usando cpio e lo compatta usando gzip. Una volta creato il file compresso gli si da un nome tipo initramfs<mia versione>.img oppure initrd.img, per aumentare la confusione. Basta usare cpio, un programma di archiviazione come il famoso tar, e gzip, un programma di compressione. Il problema è creare un file system contente i file giusti per fare quello che ci si aspetta. Per questo motivo è buona cosa iniziare da un initramfs esistente. Io, personalmente, uso l'initramfs generata da genkernel, il tool di Gentoo per la compilazione del kernel, leggermente modificato da me.


Bibliografia

  1. un documento scritto da Rob Landley e facente parte della documentazione ufficiale del kernel.
Strumenti personali