Un fichier initramfs n’est pas une archive à ouvrir au hasard dans votre dossier courant. Selon la distribution, il peut être compressé avec gzip, xz, zstd ou un autre format, puis contenir une archive cpio. Une extraction mal préparée peut mélanger ses fichiers avec ceux du répertoire actuel ou vous faire modifier l’original.
La méthode sûre consiste à identifier la compression, travailler dans un dossier vide, lister le contenu avant extraction, puis ne reconstruire l’image qu’après vérification. Les commandes ci-dessous sont adaptées à une analyse locale, sans remplacer directement le fichier utilisé au démarrage.
Commencez par préserver l’initramfs original
Repérez d’abord l’image concernée. Les fichiers se trouvent souvent dans /boot et portent un nom lié à la version du noyau :
ls -lh /boot/initrd* /boot/initramfs* 2>/dev/null
uname -r
Ne travaillez pas directement dans /boot. Copiez l’image vers un espace de travail et créez un dossier d’extraction dédié :
mkdir -p "$HOME/tmp/initramfs-cpio"
cp --preserve=all /boot/initrd.img-$(uname -r) "$HOME/tmp/initramfs-cpio/original.img"
cd "$HOME/tmp/initramfs-cpio"
file original.img
Le nom de l’image varie selon la distribution. Si le chemin proposé n’existe pas, utilisez le fichier exact trouvé avec ls. La copie est importante : une reconstruction prématurée de l’initramfs peut rendre le démarrage plus difficile à diagnostiquer.
Identifiez la compression avant d’utiliser cpio
cpio lit l’archive interne, mais il ne décompresse pas automatiquement toutes les couches qui peuvent l’entourer. La commande file donne généralement le premier format à traiter :
file original.img
Vous pouvez rencontrer notamment gzip compressed data, Xz compressed data, Zstandard compressed data ou une image déjà détectée comme archive cpio. Décompressez vers un nouveau fichier et gardez l’original intact :
# gzip
cp original.img initramfs.cpio.gz
gzip -dc initramfs.cpio.gz > initramfs.cpio
# xz
cp original.img initramfs.cpio.xz
xz -dc initramfs.cpio.xz > initramfs.cpio
# zstd
cp original.img initramfs.cpio.zst
zstd -dc initramfs.cpio.zst > initramfs.cpio
Ne lancez qu’un seul bloc, selon le résultat de file. Si l’image est déjà une archive cpio, utilisez directement original.img comme entrée.
Listez l’archive avant de l’extraire
Créez un second dossier vide. L’option -t demande à cpio de lister les fichiers sans les extraire. L’option -F lui indique où se trouve l’archive :
mkdir extracted
cpio -itv -F initramfs.cpio | less
La liste permet de vérifier que vous avez bien affaire à l’archive attendue : répertoires bin, etc, lib, scripts d’initramfs et modules éventuels. Si vous obtenez une erreur de format, revenez à l’étape file : vous avez peut-être utilisé cpio avant de retirer la compression externe, ou choisi le mauvais fichier.
Extrayez dans le dossier prévu
Depuis le dossier de travail, extrayez maintenant l’archive dans extracted :
cd extracted
cpio -idmuv --no-absolute-filenames < ../initramfs.cpio
-i active l’extraction, -d crée les répertoires nécessaires, -m conserve les dates quand c’est possible et -v affiche les fichiers traités. L’option --no-absolute-filenames évite de recréer des chemins absolus hors du dossier de travail.
Vérifiez ensuite quelques éléments sans modifier le contenu :
find . -maxdepth 2 -type d | sort | head -30
ls -l ./init ./bin ./sbin 2>/dev/null
find . -type f -name '*.ko*' | head
Pour une inspection plus complète, utilisez find, grep ou diff sur cette copie. Ne supprimez pas un script d’initramfs simplement parce qu’il paraît inhabituel : son rôle dépend de la distribution, du stockage racine et des modules chargés au démarrage.
Reconstruire seulement après vérification
Si vous avez réellement modifié le contenu, la reconstruction doit se faire depuis la racine du dossier extrait, avec le format attendu par l’image d’origine :
cd "$HOME/tmp/initramfs-cpio/extracted"
find . -print0 | cpio --null -o -H newc > ../initramfs-rebuilt.cpio
Cette commande produit une archive cpio au format newc, fréquent pour les initramfs Linux. Il reste à remettre la compression utilisée par l’image d’origine, puis à vérifier le résultat avant toute installation. Pour un système Debian ou Ubuntu, unmkinitramfs est souvent plus pratique pour inspecter une image complète, tandis que update-initramfs est préférable pour régénérer proprement l’image à partir de la configuration du système.
Je vous conseille de tester l’extraction sur une copie et de conserver au moins une version fonctionnelle dans /boot. Une archive cpio valide ne garantit pas, à elle seule, que le noyau pourra démarrer avec les modules et scripts qu’elle contient.
