Comprendre et savoir modifier le fichier initrd
Cet article permet de comprendre le rôle du fichier
initrd et éventuellement de le modifier. La stratégie initrd est souvent
utilisée dans Linux. Même si le besoin de modifier le fichier
initrd est très rarissime, la connaissance de ce qui suit permet
d'acquérir une bonne connaissance du démarrage de linux. L'exemple présenté a été réalisé avec un
système Linux Fedora Core 8.
1) Le rôle du fichier initrd dans le fichier de configuration
grub.conf de grub, chaque strophe qui définit le chargement d'un système Linux contient
essentiellement deux clauses, la clause
kernel qui nomme le fichier noyau Linux à charger et la clause
initrd qui définit
le fichier
initrd associé à ce noyau. Quel est son rôle ?
initrd signifie "INITial Ram Disk". C'est un système de fichiers compressé, au format cpio. IL contient des biblothèques,
des modules, des commandes. Après que le noyau l'ait installé en RAM, ce dernier exécute le script
init ou, dans les
versions plus anciennes de Linux,
linuxrc. Ce script est écrit en shell
nash (man nash). Il contient essentiellement des
commandes
insmod qui chargent des modules ("drivers") dans le noyau et ensuite bascule vers un foctionnement normal
en montant le véritable "root file system".
Le cas emblématique est celui de ext3. Le pilote du système de fichiers ext3 n'est pas défini en statique dans le noyau.
C'est un pilote qui est chargé à la demande. Le montage du système fichiers root, le plus souvent de type ext3, n'est
possible que si son pilote est dans le noyau. Le pilote se trouve sur le système de fichiers root qui n'est pas encore monté.
C'est un cercle vicieux, n'est-ce pas ? Heureusement le script
init du fichier
initrd procède au chargement du pilote avant
même que le système de fichiers root soit monté.
Vous comprenez qu'il ne vous sera nécessaire de modifier le fichier
initrd que dans de très rares cas, dont celui où un
pilote est nécessaire avant même que le système de fichiers root soit monté et que ne soit exécutés les scripts RC qui,
généralement, se chargent du travail.
1) Découvrons les fichiers mis en oeuvre
Notre système possède deux images de noyau et il y a un fichier
initrd par noyau. Notre cobaye dans la suite des
manipulations sera
initrd-2.6.23.9-85.fc8.img.
Faisons sconnaissance avec initrd