Comment extraire et reconditionner le disque RAM initial (initrd)
Le disque RAM initial (initrd) et le système de fichiers RAM initial (initramfs) sont des composants cruciaux dans le processus de démarrage de Linux. Ils contiennent un système de fichiers racine temporaire chargé en mémoire lors du démarrage du système, ce qui permet au noyau de charger les pilotes et modules nécessaires avant que le système de fichiers racine réel ne soit disponible. Alors que initrd.img et initramfs.img ont des objectifs similaires, initramfs est un successeur d’initrd et utilise un format plus flexible. Ce guide vous guidera à travers les étapes d’extraction, de modification et de reconditionnement d’un initrd, ce qui peut être utile pour le dépannage, la personnalisation du processus de démarrage ou l’ajout de nouveaux pilotes. Notez que cela s’applique aux systèmes plus anciens, et pas seulement aux anciennes versions de RHEL.
Dans ce tutoriel, vous allez apprendre :
- Comment extraire le contenu d’un fichier initrd
- Comment modifier le contenu extrait
- Comment reconditionner le contenu modifié dans un nouveau fichier initrd
Extraction et reconditionnement d’initrd
L’extraction et le reconditionnement du fichier initrd impliquent une série d’étapes qui nécessitent une manipulation minutieuse du système de fichiers et des outils utilisés. Vous trouverez ci-dessous des étapes détaillées pour vous guider tout au long du processus. Notez que ces étapes s’appliquent aux systèmes plus anciens tels que Red Hat Enterprise Linux 5 et 6, ainsi qu’à d’autres distributions Linux plus anciennes. Pour RHEL 7 et 8, reportez-vous aux guides spécifiques à ces versions.
Créez un répertoire de travail temporaire : tout d’abord, créez un répertoire temporaire et basculez-y devant. Ce sera l’endroit où le contenu initrd sera affiché, édité et recompressé si nécessaire.
mkdir /tmp/initrd cd /tmp/initrdIdentifier le format de compression : utilisez la commande
filesur l’initrd pour identifier le format de compression.file /boot/initrd-$(uname -r).imgCela affichera le format de l’initrd. Par exemple:
/boot/initrd-2.6.31-653.el6.x86_64.img: gzip compressed dataOu:
/boot/initrd-2.6.31-653.el6.x86_64.img: LZMA compressed dataExtraire le fichier initrd : Selon le format identifié, utilisez les commandes appropriées pour extraire le contenu. Pour les données compressées gzip :
zcat /boot/initrd-$(uname -r).img | cpio -idmvPour les données compressées LZMA :
xz -dc < /boot/initrd-$(uname -r).img | cpio -idmvModifier le contenu extrait : Une fois le contenu extrait, vous pouvez le modifier selon vos besoins. Cela peut impliquer l’ajout de nouveaux pilotes, scripts ou fichiers de configuration. Par exemple, pour ajouter un nouveau module du noyau, vous devrez peut-être créer les répertoires nécessaires et y placer vos fichiers :
mkdir -p ./lib/modules/$(uname -r) cp /path/to/module.ko ./lib/modules/$(uname -r)/Assurez-vous que toutes les modifications apportées conservent les autorisations et la structure de fichiers correctes.
COMPARAISON DES FICHIERS DE DÉMARRAGE : INITRD. IMG CONTRE INITRAMFS. IMG
initrd.imgetinitramfs.imgsont tous deux utilisés pendant le processus de démarrage de Linux pour fournir un système de fichiers racine initial, mais ils diffèrent considérablement dans leurs implémentations et leur utilisation.initrd.img, abréviation de « disque RAM initial », est un format plus ancien qui utilise une image de système de fichiers, nécessitant un périphérique de bouclage pour le montage et contenant généralement un système de fichiers minimal avec les pilotes et exécutables nécessaires. En revanche,initramfs.img, ou « système de fichiers RAM initial », est une approche plus moderne qui utilise une archive cpio compressée, que le noyau décompresse directement dans un système de fichiers temporaire en mémoire. Cette méthode n’a pas besoin d’un dispositif de bouclage et offre une plus grande flexibilité et simplicité, ce qui fait deinitramfs.imgle choix préféré dans la plupart des distributions Linux contemporaines.
Repackager le fichier initrd : Après avoir apporté les modifications nécessaires, vous devez repackager le fichier initrd. Accédez au répertoire contenant le contenu extrait et exécutez la commande suivante. Pour le format gzip :
find . | cpio -o -c -R root:root | gzip -9 > /boot/new.imgPour le format LZMA :
find . 2>/dev/null | cpio -o -c -R root:root | xz -9 --format=lzma > /boot/new.imgMettre à jour la configuration du chargeur d’amorçage : Enfin, mettez à jour la configuration du chargeur d’amorçage pour utiliser le nouveau fichier initrd.
update-grub
Cette commande extrait le contenu de l’image initrd dans le répertoire courant, en préservant la structure du fichier et les autorisations.
Cette commande crée une nouvelle image initrd à partir du contenu modifié et la compresse en utilisant le format approprié.
Cette commande met à jour la configuration du chargeur d’amorçage GRUB pour inclure le nouveau fichier initrd, garantissant ainsi qu’il sera utilisé lors du prochain démarrage du système.
Conclusion
En suivant ces étapes, vous pouvez extraire, modifier et repackager le fichier initrd dans un système Linux plus ancien. Ce processus peut être particulièrement utile pour personnaliser le processus de démarrage, ajouter de nouveaux pilotes ou résoudre des problèmes liés au démarrage. Assurez-vous toujours d’avoir une sauvegarde du fichier initrd d’origine et de comprendre les modifications que vous apportez pour éviter tout échec de démarrage potentiel.
