6 euros le mémento de 110 pages,
vous trouvez cela cher !!!


30 articles, on y est presque

WinkUn nouvel article
Le service cron et anacron

 

 

 

 

Identifiez-vous






Mot de passe oublié ?
Pas encore de compte ? Enregistrez-vous

Sondage

Votre opinion sur le site
 

Syndication

powered_by.png, 1 kB
Accueil arrow Scripts et recettes arrow recettes pour UNIX et Linux arrow Comprendre et modifier un fichier initrd
Comprendre et modifier un fichier initrd Convertir en PDF Version imprimable
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                  
# cd /boot
# cat /boot/grub/grub.conf
title Fedora (2.6.23.9-85.fc8)
root (hd0,5)
kernel /boot/vmlinuz-2.6.23.9-85.fc8 ro root=LABEL=/ rhgb quiet ramdisk_size=32000
initrd /boot/initrd-2.6.23.9-85.fc8.img
# ls initrd-2.6.2*
initrd-2.6.23.9-85.fc8.img initrd-2.6.24.3-12.fc8.img
# ls -l initrd-2.6.23.9-85.fc8.img
-rw------- 1 root root 2991065 jan 21 17:19 initrd-2.6.23.9-85.fc8.img
# file initrd-2.6.23.9-85.fc8.img
initrd-2.6.23.9-85.fc8.img: gzip compressed data, from Unix, last modified: Mon Jan 21 17:19:03 2008, max compression
# gunzip <initrd-2.6.23.9-85.fc8.img >initrd-2.6.23.9-85.fc8
# file initrd-2.6.23.9-85.fc8*
initrd-2.6.23.9-85.fc8: ASCII cpio archive (SVR4 with no CRC)
initrd-2.6.23.9-85.fc8.img: gzip compressed data, from Unix, last modified: Mon Jan 21 17:19:03 2008, max compression

2) Déployer l'arborescence contenue dans l'archive cpio

Il faut déployer l'arborescence cpio. Pour cela, nous créons un répertoire de travail pour_initrd, et exécutons la commande
cpio
de restauration des fichiers. Nous commencerons par visualiser le contenu de l'archive. Vous noterez que le script init
demande le chargement du module ext3.ko, le pilote du système de fichiers ext3.

Exécution del a commande cpio
# cpio -itv < initrd-2.6.23.9-85.fc8
drwx------ 2 root root      0 Jan 21 17:18 proc
-rwx------ 1 root root 2043 Jan 21 17:19 init
drwx------ 3 root root      0 Jan 21 17:19 dev
crw------- 1 root root 4, 65 Jan 21 17:19 dev/ttyS1
crw------- 1 root root 4, 0 Jan 21 17:19 dev/systty
...
# mkdir pour_initrd
# cd pour_initrd/
# cpio -iv < ../initrd-2.6.23.9-85.fc8
proc
init
dev
dev/ttyS1
...
# cat init
#!/bin/nash
mount -t proc /proc /proc
setquiet
echo Mounting proc filesystem
echo Mounting sysfs filesystem
mount -t sysfs /sys /sys
echo Creating /dev
mount -o mode=0755 -t tmpfs /dev /dev
mkdir /dev/pts
mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts
mkdir /dev/shm
mkdir /dev/mapper
echo Creating initial device nodes
mknod /dev/null c 1 3
mknod /dev/zero c 1 5
...
echo "Loading ext3.ko module"
insmod /lib/ext3.ko

3) Modification du fichier init et reconstruction du fichier initrd....img.


Vous aurez évidemment pris soin de sauvegarder le fichier initrd....img en initrd....img.old, sait-on jamais ce qui peut arriver !.
Vous opérez toujours à partir du répertoire de travail pour_initrd. Vous noterez, et c'est capital, l'option -H newc de la
commande cpio. Si vous omettez cette option, vous obtiendrez un plantage lors du démarrage, un "kernel panic".
L'argument newc de l'option -H désigne un format pour accepter les systèmes de fichiers de plus de 65535 inodes.

Création du fichier initrd..img
# vi init
Vous modifiez le fichier init
# find * | cpio -o -H newc > ../initrd-2.6.23.9-85.fc8
proc
init
dev
dev/ttyS1
dev/systty
dev/tty8
dev/null
dev/tty7
dev/tty3
dev/tty1
dev/tty4
dev/mapper
dev/ttyS0
...
# gzip -9 < ../initrd-2.6.23.9-85.fc8 > ../initrd-2.6.23.9-85.fc.img

4) Redémarrage de Linux



En espérant que cet article vous a apporté l'aide attendue, bonne chance !

Gilles GOUBET
 
< Précédent   Suivant >
© 2010 aasoftware
Joomla! est un logiciel libre distribué sous licence GNU/GPL.