Alléger son "initrd"




1. Décompression
2. Modification
3. Re-construction



L'initrd( Initial RAM Disk) est un disque RAM initialisé par le chargeur du système avant le démarrage du noyau. Beaucoup de distributions l'utilisent (Mandriva, Fedora et Debian entre autres), mais ont tendances à le surcharger. Il sera donc souvent intéressant de modifier l'image initrd présente sur votre ditribution, et c'est ce qui est expliqué dans ce didactiel.

L'initrd va automatiquement charger un certains nombre de modules qui ne sont souvent d'aucune utilité, et qui, au contraire peuvent entrer en conflit avec le matériel. Par exemple, ma Debian me chargeait une dizaine de modules pour la gestion de l'IDE et réduisait ainsi les performances de mes Disques Durs de moitié, et aurait très bien pu entrainer un problème matériel !! Modifier son image initrd peut donc être plus qu'un gadget pour Geek en mal d'activité.

La technique utilisée a par ailleurs l'avantage de ne pas nécessiter les sources de son noyau, ce qui est non négligeable, surtout si vous êtes en bas débit, ou que les sources de votre noyau ne sont plus dans les dépendances de votre distribution. Voici donc, les étapes à suivre:



1. Décompression :

  1. Il faut d'abord localiser le fichier "initrd" ( situé à priori dans /boot/ ) utilisé pour votre noyau :

    #Pour connaître le noyau utilisé
    $ uname -r
    #Pour trouver les images initrd
    $ ls /boot/*initrd*


  2. Déterminez le format de l'image grâce à la commande file. Ce qui peut donner par exemple :

    $ file /boot/initrd.img-2.6.12-1-k7
    /boot/initrd.img-2.6.12-1-k7: Linux Compressed ROM File System data, little endian size 1712128 version #2 sorted_dirs CRC 0x7ac34bb3, edition 0, 1117 blocks, 146 files

    ou encore :

    $ file /boot/initrd-2.6.8.1-12mdk.img
    /boot/initrd-2.6.8.1-12mdk.img: gzip compressed data, from Unix, max compression


  3. Décompressez l'image dans un répertoire temporaire. Pour le format GZIP (ou autre format de compression usuel), faites comme d'habitude, et pour le format CRAMFS, tapez :

    $ fsck.cramfs initrd.img-2.6.12-1-k7 -x repertoire_temp


2. Modification :

  1. Modifiez le fichier "loadmodules", qui correspond à la liste des moduleschargés au boot de la machine.. Par exemple :

    modprobe -k capability
    modprobe -k vesafb > /dev/null 2>&1
    modprobe -k fbcon 2> /dev/null
    modprobe -k unix 2> /dev/null
    modprobe -k ata_piix
    modprobe -k sd_mod
    etc..


  2. Si c'est nécessaire, modifiez aussi le fichier linuxrc.conf pour supprimer le support inutile de certains systèmes de fichier (ext2 dans mon cas).. exemple :

    RESUME=
    DELAY=0
    BUSYBOX=
    FSTYPES=ext2,ext3,reiserfs,iso9660,cramfs
    IDE_CORE=ide-core
    VERSION=0.1.82


  3. Allégez l'image initrd en supprimant les modules qui viennent d'être supprimés a la liste. Ils se trouvent dans les sous-répertoires de repertoire_temp/lib/modules/`uname -r`/kernel/.. exemple :

    $ rm lib/modules/2.6.12-1-k7/kernel/drivers/ide/pci/piix.ko


3. Re-construction :

  1. Re-créez une image valide du fichier "initrd", à son format d'origine. C'est à dire qu'il faut recompresser repertoire_temp au format CRAMFS, GZIP ou autre. Ce qui pour moi, donne :

    $ mkcramfs repertoire_temp/ /boot/initrd.img-2.6.12-1-k7-modif


  2. Mettez à jour votre bootloader ( lilo ou grub) pour qu'il utilise votre image modifiée à la place de celle d'origine.. Veuillez vous reporter au didactiel de lilo ou grub pour savoir comment faire.







J'espère avoir été suffisament clair, et que cela pourra servir a certains. Pour une utilisation optimal, et un certains confort, Linux nécessite parfois de mettre la main à la pâte, mais, même si l'on y perd un peu de temps au début, n'est-ce pas agréable d'avoir réussi à dompter son OS pour lui faire faire ce que l'on désire. :)

Par ailleurs, alléger son image "initrd" aura aussi comme conséquence de réduire le temps de démarrage de Linux, mais au cas ou l'image que vous venez de créer ne soit pas valide et ne permette pas à Linux de se lancer, je vous conseille très vivement d'avoir encore une configuration de boot de votre ancienne image "initrd" dans votre bootloader. Cela pourrait éviter quelques mauvaises surprises.