Différences entre les versions de « Initrd »

De BlaxWiki
Aller à la navigationAller à la recherche
Ligne 9 : Ligne 9 :
Cela suppose toutefois qu'à l'issue de l'initialisation du noyau, le système de fichiers racine est disponible pour être monté. C'est généralement le cas, car ce système de fichiers  
Cela suppose toutefois qu'à l'issue de l'initialisation du noyau, le système de fichiers racine est disponible pour être monté. C'est généralement le cas, car ce système de fichiers  
se trouve la plupart du temps sur une partition du disque dur local, et le noyau possède toutes les informations pour le monter : pilote de disque dur, pilote IDE, pilote système de  
se trouve la plupart du temps sur une partition du disque dur local, et le noyau possède toutes les informations pour le monter : pilote de disque dur, pilote IDE, pilote système de  
fichiers (ext2 par exemple). Mais il existe des situations où une préparation supplémentaire est nécessaire avant que le système de fichiers racine soit accessible.
fichiers (ext2 par exemple). Mais il existe des situations où une préparation supplémentaire est nécessaire avant que le système de fichiers racine soit accessible :
 
     - / est un partage NFS, auquel cas il faut auparavant initialiser l'interface réseau
     / est un partage NFS, auquel cas il faut auparavant initialiser l'interface réseau
     - / se trouve sur un volume logique LVM, qui ne sera visible qu'après avoir exécuté un vgscan dans le cas d'un noyau complètement modulaire, les pilotes nécessaires pour monter /  
     / se trouve sur un volume logique LVM, qui ne sera visible qu'après avoir exécuté un vgscan
ne sont pas intégrés au noyau, il faut donc les insérer avant de procéder au montage
    dans le cas d'un noyau complètement modulaire, les pilotes nécessaires pour monter / ne sont pas intégrés au noyau, il faut donc les insérer avant de procéder au montage


Dans tous ces cas de figure, on se trouve dans une situation où les outils nécessaires pour monter un système de fichiers se trouvent sur ce même système de fichiers. Impasse ? Non.  
Dans tous ces cas de figure, on se trouve dans une situation où les outils nécessaires pour monter un système de fichiers se trouvent sur ce même système de fichiers. Impasse ? Non.  
Ligne 23 : Ligne 22 :
</pre>
</pre>


==== Configuration du noyeau ====
<pre>
Voici les options qui doivent impérativement être sélectionnées lors de la configuration du noyau pour que celui-ci puisse faire usage de l'initramfs :


Section Device drivers/Block devices:
<*>    RAM disk support
(4096) Default RAM disk size (kbytes)
[*]    Initial RAM disk (initrd) support
Section File systems/Pseudo filesystems:
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)
</pre>





Version du 3 décembre 2012 à 16:40

Initramfs

Définition

La version 2.6 du noyau linux a introduit le concept d'initramfs, une amélioration de l'initrd déjà présent dans les versions prédédentes. Qu'est-ce qu'un initramfs ?
Dans le processus de démarrage d'un système Linux, tout commence par le chargement du noyau. Après s'être initialisé, celui-ci monte le système de fichiers racine (/), puis exécute le 
programme /sbin/init qui prend en charge la suite des opérations : initialisation du hostname, des interfaces réseau, lancement des divers services, etc...

Cela suppose toutefois qu'à l'issue de l'initialisation du noyau, le système de fichiers racine est disponible pour être monté. C'est généralement le cas, car ce système de fichiers 
se trouve la plupart du temps sur une partition du disque dur local, et le noyau possède toutes les informations pour le monter : pilote de disque dur, pilote IDE, pilote système de 
fichiers (ext2 par exemple). Mais il existe des situations où une préparation supplémentaire est nécessaire avant que le système de fichiers racine soit accessible :
    - / est un partage NFS, auquel cas il faut auparavant initialiser l'interface réseau
    - / se trouve sur un volume logique LVM, qui ne sera visible qu'après avoir exécuté un vgscan dans le cas d'un noyau complètement modulaire, les pilotes nécessaires pour monter / 
ne sont pas intégrés au noyau, il faut donc les insérer avant de procéder au montage

Dans tous ces cas de figure, on se trouve dans une situation où les outils nécessaires pour monter un système de fichiers se trouvent sur ce même système de fichiers. Impasse ? Non. 
C'est précisément à cela que sert l'initramfs !

L'initramfs est donc ceci : un mini système de fichiers, contenant tous les outils nécessaires au montage du véritable système racine. Egalement connu sous le nom "early userspace", 
il existe depuis la version 2.6 de Linux. Il remplace un mécanisme similaire nommé initrd qui existait dans les versions 2.4. initrd est toujours supporté par les noyaux 2.6, mais il 
est destiné à être progressivement remplacé par initramfs.

Configuration du noyeau

Voici les options qui doivent impérativement être sélectionnées lors de la configuration du noyau pour que celui-ci puisse faire usage de l'initramfs :

Section Device drivers/Block devices:
<*>    RAM disk support
(4096) Default RAM disk size (kbytes)
[*]    Initial RAM disk (initrd) support
Section File systems/Pseudo filesystems:
[*] /proc file system support
[*] Virtual memory file system support (former shm fs)


Un fichier initrd contient l'image compressée, au format gzip, d'un système de fichiers racine. Lors du démarrage, il est directement installé en mémoire dans un disque RAM par le chargeur grub. L'utilisation d'un fichier initrd est optionnel. Son intérêt principal est de charger les modules du noyau nécessaires durant les premiers stades du démarrage, principalement des modules SCSI, des modules de gestion de systèmes de fichiers (ext3, xfs, etc.) ou autres. Si le noyau possède statiquement ces modules, on peut se passer d'un fichier initrd.

Depuis le kernel 2.6 initrd est remplacé par initramfs.

 Pour créer une image initrd,il suffit de donner en paramètre le chemin et le nom du fichier initrd à produire ainsi que l'emplacement des modules du noyau /lib/modules/version_du_noyau :

mkinitramfs -o /boot/initrd.img-$(uname -r) /lib/modules/$(uname -r)
ou plus simplement
mkinitramfs -o /boot/initrd.img-$(uname -r)

Pour mettre à jour un initrd :

sudo update-initramfs -u -v

Pour rajouter des modules dans un initrd, inscrire le nom du module dans /etc/initramfs-tools/modules puis mettre à jour l'initrd :

sudo nano /etc/initramfs-tools/modules

Pour décompresser une image initrd :

cp /boot/initrd.xxx /tmp
cd /tmp
gunzip -c initrd.xxx > initrd
cat initrd | cpio -idv
rm initrd
vdir

Initrd

Génération & modification manuel de initrd.img

# Generer un initrd
mkinitrd /boot/initrd.img 2.6.xxxx
Options pour du ajouter un module (en plus de ceux dans modprobe.conf
mkinitrd --preload=raid1 /boot/initrd.img 2.6.

# Decompresser un initrd.img :
gzip -dc initrd.img | cpio -ivd

# Recompresser un initrd
Dans le rep ou est décompressé l initrd :
find ./ | cpio -H newc -o > ../initrd.cpio
gzip initrd.cpio
mv initrd.cpio.gz initrd.cpio.img

Pour grub :

# Mettre /boot si il n y a pas de partition pour /boot, sinon on met juste /
title           Debian GNU/Linux, kernel 2.6.29
root            (hd0,0)
kernel          /boot/vmlinuz-2.6.29 root=/dev/hda1 ro quiet
initrd          /boot/initrd.img-2.6.29