Ajouter des modules dans l’inird

Pour une quelconque raison, vous pouvez être amener à inclure des modules supplémentaires dans l’image de boot afin que des pilotes (modules) soit chargés dès le démarrage de la machine (module de carte raid par exemple).

Cette opération est relativement simple.

Contexte

 

  • Linux Debain Edth
  • Kernel 2.6.16 (kernel 2.6.16-1-686-smp)
  • PIV @3Ghz , 1Go de RAM, Chipset I865P
  • Controleur RAID 3WARE SATA-RAID 8500
  • Controleur SATA intel
  • Grub

Méthode

1 – Installation de l’outil nécessaire

 

Pour générer une image RAMFS, nous avons besoin du binaire mkinitramfs.

Vous pouvez l’installer grâce à l’outil apt-get pour debian ou up2date ou yum pour RedHat ES ou bien urpmi pour mandrake :)

Bref l’outil d’installation de votre distribution préférée.

2 – Ajout des modules souhaités

 

Pour ajouter un module, il suffit d’éditer le fichier /etc/initramfs-tools/modules et d’y ajouter le nom du pilote à charger

Note : 1 module par ligne

Dans cette exemple, nous allons ajouter le module concernant la carte RAID 3ware.

Cette carte utilise le module (pilote) 3w_xxxx.

Nous allons également ajouter le module ata_piix servant au contrôleur SATA de la carte mère.

Le module ata_piix sera mis en 1er car il s’agit du disque système, les partitions se nommant /dev/sdaX (et non sdb).

Si on le mettait en 2ème position, elles se nommeraient sdb et cela poserait un problème au linux pour booter (nommage des partitions dans les fichiers de conf. ie: /etc/fstab)

Donc éditez ce fichier avec votre éditeur préféré (emacs pour ma part) et ajoutez les modules :

emacs /etc/initramfs-tools/modules

 

Puis dedans :

# List of modules that you want to include in your initramfs.
#
# Syntax: module_name [args ...]

ata_piix
3w_xxxx

 

3 – Génération de l’image

 

Pour générer l’image, nous utiliserons donc mkinitramfs qui prend 2 arguments (ou options) :

  • l’image à créer (son nom avec son chemin) => option -o
  • le chemin vers les modules

Le chemin vers les modules se trouve généralement dans /lib/modules/le-nom-du-noyau

Pour savoir quel noyau vous utilisez :

sambanux:~# uname -r
2.6.16-1-686-smp

 

Exemple pour un noyau 2.6.16-1-686-smp et le fichier image qui s’appellera initrd.img-2.6.16-1-RAID et se situra dans le répertoire /boot :

 

sambanux:~# mkinitramfs -o /boot/initrd.img-2.6.16-1-RAID /lib/modules/2.6.16-1-686-smp

 

Vérifier ensuite que l’image à bien été créé :

 

sambanux:~# file /boot/initrd.img-2.6.16-1-RAID
/boot/initrd.img-2.6.16-1-RAID: gzip compressed data, from Unix, last modified: Sun Jul 30 15:04:02 2006, max compression

 

4 – Configuration du BootLoader ( GRUB )

 

Ensuite il ne reste plus qu’a configurer le gestionnaire de démarrage (ici GRUB) pour qu’il prenne en compte notre nouvelle image.

Choisissez l’ajout d’une nouvelle entrée plutôt que de modifier l’existante au cas ou votre nouvelle image ne soit pas bonne.

Donc voici la section concerné de mon entrée GRUB (/boot/grub/menu.lst):

 

title Debian GNU/Linux, kernel 2.6.16-1-686-RAID
root (hd0,0)
kernel /boot/vmlinuz-2.6.16-1-686-smp root=/dev/sda1 ro
initrd /boot/initrd.img-2.6.16-1-RAID
savedefault
boot

 

La ligne modifiée est :

 

initrd /boot/initrd.img-2.6.16-1-RAID

 

Il ne reste plus qu’à rebooter et le tour est joué.

note : n’oubliez pas que si vous utilisez lilo, il faut regénérer le lilo grâce à la commande…. ba … lilo :)

Conclusion

 

Cette manipulation est nécessaire pour le Dell 2950 par exemple car le driver megaraid_sas n’a pas le temps de s’initialiser assez rapidement et donc linux ne trouve pas la partition /dev/sda1.

Si vous êtes amené à jouer avec plusieurs images je vous conseille de faire pointer le bon noyau avec un lien symbolique :)

N’hésitez pas à me laisser vos commentaires ou remarque : wimpy chez freenux.fr :)

Ce tuto est plutôt orienté Debian mais il doit pouvoir s’adapter à une autre distrib.


Article lu 1645 fois

One comment

  1. Serge dit :

    Bonjour,

    Peut-on avoir l’équivalent de cette procédure avec {{open suse}}. Apparement la commande {{mkinitramfs}} y est inconnue

Laisser un commentaire