Certains réglages ne s'appliquent qu'au tout début du démarrage, avant que le moindre service ne tourne : ils passent par la ligne de commande du noyau. C'est le cas d'un durcissement comme audit=1, d'un contournement matériel, ou du passage en mode secours. Ce guide montre comment ajouter un tel paramètre de façon persistante, sur RHEL et dérivées comme sur Debian et Ubuntu, et surtout pourquoi la méthode que l'on lit partout, éditer /etc/default/grub puis régénérer, échoue en silence sur la famille Red Hat. Toutes les sorties viennent d'un test sur AlmaLinux 10.2, redémarrage réel inclus.
Ce que vous allez apprendre
Section intitulée « Ce que vous allez apprendre »- Lire la ligne de commande du noyau en cours avec
/proc/cmdline - Ajouter un paramètre persistant avec
grubby(RHEL) ouupdate-grub(Debian) - Comprendre ce qu'est le BLS et pourquoi il change la méthode
- Prouver le résultat après un redémarrage réel
- Retirer proprement un paramètre, sans laisser de trace
Prérequis
Section intitulée « Prérequis »- Un accès root (ou
sudo) sur une VM jetable, jamais une machine de production pour un premier essai - Savoir redémarrer proprement une machine
- Un accès console de secours (console cloud, hyperviseur) : un paramètre fautif peut empêcher le démarrage
Lire la ligne de commande en cours
Section intitulée « Lire la ligne de commande en cours »Avant de modifier quoi que ce soit, regardez ce que le noyau a réellement reçu. Cette information vit dans un fichier virtuel :
cat /proc/cmdlineBOOT_IMAGE=(hd0,gpt3)/vmlinuz-6.12.0-211.34.1.el10_2.x86_64root=UUID=1f5fce98-2902-4ac3-b784-b4f10857f44e ro console=tty0console=ttyS0,115200n8 no_timer_check biosdevname=0 net.ifnames=0C'est la seule source de vérité. Tout ce que vous écrirez dans des fichiers de configuration n'a de valeur que si le paramètre finit par apparaître ici, après un redémarrage. Gardez ce réflexe : à la fin de toute manipulation, on relit /proc/cmdline.
Le piège : quatre emplacements, un seul compte
Section intitulée « Le piège : quatre emplacements, un seul compte »Sur RHEL 8 et suivantes, AlmaLinux et Rocky, la ligne de commande du noyau peut apparaître dans quatre fichiers différents, et un seul est lu au démarrage. C'est ce qui rend le sujet confus.
La cause est le BLS, pour Boot Loader Specification, activé par défaut :
grep '^GRUB_ENABLE_BLSCFG' /etc/default/grubGRUB_ENABLE_BLSCFG=trueSous BLS, chaque noyau installé possède son propre fichier d'entrée sous /boot/loader/entries/, et c'est la ligne options de ce fichier qui est réellement lue :
ls /boot/loader/entries/553eb47a42cb4c30822993b5a845ff06-6.12.0-211.34.1.el10_2.x86_64.conf8516cfdc80ee46979f9d40b76524701f-6.12.0-211.7.3.el10_2.x86_64.confDeux noyaux installés, donc deux fichiers, chacun avec sa propre ligne de paramètres. Toute méthode qui n'écrit pas dans ces fichiers ne changera rien au prochain démarrage.
Ajouter un paramètre, la bonne méthode
Section intitulée « Ajouter un paramètre, la bonne méthode »La commande diffère selon la famille de distribution. Choisissez le bon onglet, les deux ne sont pas interchangeables.
L'outil qui agit sur les noyaux déjà installés est grubby, présent d'office.
-
Ajouter le paramètre sur tous les noyaux installés.
Fenêtre de terminal sudo grubby --update-kernel=ALL --args="audit=1"La commande ne dit rien quand elle réussit : c'est normal, elle rend 0 en silence.
-
Vérifier ce qui a été écrit, avant tout redémarrage.
Fenêtre de terminal sudo grubby --info=ALL | grep '^args'args="ro console=tty0 console=ttyS0,115200n8 no_timer_check biosdevname=0net.ifnames=0 $tuned_params audit=1"Le paramètre figure bien en fin de ligne, sur chaque entrée.
-
Redémarrer, puis prouver le résultat.
Fenêtre de terminal sudo systemctl rebootFenêtre de terminal grep -o 'audit=1' /proc/cmdlineaudit=1
Pas de BLS ici, donc la méthode classique est la bonne : le fichier /etc/default/grub alimente directement les entrées générées.
-
Éditer la variable
GRUB_CMDLINE_LINUX.Fenêtre de terminal sudo nano /etc/default/grubGRUB_CMDLINE_LINUX="audit=1"Deux variables coexistent :
GRUB_CMDLINE_LINUXs'applique à toutes les entrées,GRUB_CMDLINE_LINUX_DEFAULTseulement aux entrées normales, pas au mode secours. Pour un durcissement, utilisez la première. -
Régénérer la configuration.
Fenêtre de terminal sudo update-grubGenerating grub configuration file ...Found linux image: /boot/vmlinuz-6.8.0-136-genericdone -
Redémarrer, puis vérifier dans
/proc/cmdline.Fenêtre de terminal sudo systemctl rebootgrep -o 'audit=1' /proc/cmdline
grubby n'existe pas sur Debian et Ubuntu : n'y cherchez pas la commande.
Comprendre /etc/kernel/cmdline
Section intitulée « Comprendre /etc/kernel/cmdline »Ce fichier passe souvent inaperçu, alors qu'il explique pourquoi éditer /etc/default/grub finit quand même par compter sur RHEL.
cat /etc/kernel/cmdlineroot=UUID=1f5fce98-2902-4ac3-b784-b4f10857f44e ro console=tty0console=ttyS0,115200n8 no_timer_check biosdevname=0 net.ifnames=0C'est le modèle appliqué aux futurs noyaux. Lors de l'installation d'un nouveau noyau, le script /usr/lib/kernel/install.d/20-grub.install le lit pour composer la ligne options de la nouvelle entrée BLS, en le resynchronisant depuis /etc/default/grub si celui-ci est plus récent.
La conséquence est utile à connaître : un paramètre écrit uniquement dans /etc/default/grub n'aura aucun effet aujourd'hui, mais apparaîtra au prochain noyau installé. C'est ce décalage qui donne l'impression que « ça a fini par marcher », des semaines plus tard, après une mise à jour.
| Ce que vous voulez | Ce qu'il faut écrire |
|---|---|
| Le paramètre maintenant, sur les noyaux installés | grubby --update-kernel=ALL |
| Le paramètre sur les futurs noyaux | /etc/default/grub, qui alimente /etc/kernel/cmdline |
| Les deux, cas le plus courant | grubby --update-kernel=ALL, qui fait tout |
Vérifier qu'un paramètre est bien pris en compte
Section intitulée « Vérifier qu'un paramètre est bien pris en compte »Un paramètre peut arriver jusqu'au noyau sans que celui-ci le comprenne, par exemple à cause d'une faute de frappe ou d'une option retirée d'une version à l'autre. Le noyau le signale au démarrage :
journalctl -k -b | grep -i 'unknown kernel command line'kernel: Unknown kernel command line parameters "BOOT_IMAGE=(hd0,gpt3)/vmlinuz-…biosdevname=0", will be passed to user space.Lisez bien cette ligne avant de vous inquiéter : elle est normale sur la plupart des machines. BOOT_IMAGE est posé par GRUB, et biosdevname est traité par l'espace utilisateur, pas par le noyau. La mention will be passed to user space indique que ces paramètres ne sont pas perdus, simplement transmis plus loin.
Ce qui doit vous alerter, c'est votre propre paramètre dans cette liste : cela signifie que le noyau ne le connaît pas, et qu'il ne fera rien.
Retirer un paramètre
Section intitulée « Retirer un paramètre »Le retrait suit la même logique que l'ajout, et il faut le vérifier partout.
sudo grubby --update-kernel=ALL --remove-args="audit=1"Contrôlez les trois emplacements que grubby avait touchés :
sudo grubby --info=ALL | grep -c 'audit=1'grep -c 'audit=1' /etc/default/grub /etc/kernel/cmdlineLes trois compteurs doivent retomber à 0. Si l'un d'eux résiste, corrigez-le à la main : grubby ne nettoie que ce qu'il a lui-même écrit, et un paramètre ajouté auparavant à l'éditeur peut subsister.
Retirez le paramètre de la variable dans /etc/default/grub, puis régénérez :
sudo nano /etc/default/grubsudo update-grubDans les deux cas, le retrait n'est effectif qu'après un redémarrage : la ligne de commande d'un noyau en cours d'exécution ne peut pas être modifiée.
Tester sans rien casser
Section intitulée « Tester sans rien casser »Sur une machine à laquelle vous tenez, il existe une méthode sans persistance : éditer l'entrée au menu GRUB. Au démarrage, sélectionnez l'entrée, pressez e, ajoutez le paramètre en fin de ligne linux, puis démarrez avec Ctrl+X. Le changement ne vaut que pour ce démarrage-là.
C'est le bon réflexe pour valider qu'un paramètre produit l'effet attendu avant de le rendre permanent. Notez toutefois deux limites : cette édition demande un accès console, et elle est bloquée si un mot de passe GRUB a été posé, ce qui est justement recommandé en production.
Une variante intermédiaire consiste à ne modifier qu'un seul noyau, en gardant l'autre intact comme filet de secours :
sudo grubby --update-kernel=/boot/vmlinuz-$(uname -r) --args="essai=1"Si la machine ne démarre plus, le menu GRUB permet de choisir l'autre noyau, resté sain.
Dépannage
Section intitulée « Dépannage »Ces symptômes couvrent l'essentiel de ce qui coince, classés par ce que vous observez.
| Symptôme | Cause probable | Solution |
|---|---|---|
Le paramètre n'apparaît pas dans /proc/cmdline après redémarrage | Sur RHEL, /etc/default/grub + grub2-mkconfig n'écrit pas dans les entrées BLS | sudo grubby --update-kernel=ALL --args="…" |
grubby: command not found | Vous êtes sur Debian ou Ubuntu, où l'outil n'existe pas | Éditer /etc/default/grub puis sudo update-grub |
| Le paramètre apparaît chez un noyau mais pas chez l'autre | --update-kernel=DEFAULT ne touche qu'une entrée | Utiliser ALL |
Unknown kernel command line parameters "<le vôtre>" au démarrage | Faute de frappe, ou option absente de cette version du noyau | Vérifier l'orthographe et la documentation du noyau installé |
| Le paramètre apparaît des semaines plus tard, sans intervention | Il n'était que dans /etc/default/grub, et un nouveau noyau a été installé | Comportement normal de /etc/kernel/cmdline |
| La machine ne démarre plus après ajout | Paramètre incompatible avec le matériel ou le stockage | Au menu GRUB, choisir un autre noyau, ou presser e et retirer le paramètre pour ce démarrage |
| Impossible d'éditer l'entrée au menu GRUB | Un mot de passe GRUB protège l'édition | S'authentifier avec le superuser déclaré, voir le guide de durcissement GRUB |
À retenir
Section intitulée « À retenir »/proc/cmdlineest la seule preuve : tout le reste n'est que configuration.- Sur RHEL, AlmaLinux et Rocky, le BLS est actif : c'est la ligne
optionsde/boot/loader/entries/*.confqui est lue au démarrage. /etc/default/grub+grub2-mkconfigne touche pas les noyaux installés sur ces distributions. La commande rend 0, et rien ne change.- L'outil correct y est
grubby --update-kernel=ALL --args="…", qui écrit à la fois dans les entrées BLS,/etc/default/grubet/etc/kernel/cmdline. - Sur Debian et Ubuntu, pas de BLS :
GRUB_CMDLINE_LINUXpuisupdate-grubest la bonne méthode, etgrubbyn'existe pas. /etc/kernel/cmdlineest le modèle des futurs noyaux : c'est lui qui fait qu'un réglage oublié finit par s'appliquer après une mise à jour.- Un paramètre inconnu du noyau est signalé par
Unknown kernel command line parametersdansjournalctl -k -b. - Pour tester sans risque, éditez l'entrée au menu GRUB (non persistant), ou ne modifiez qu'un seul noyau et gardez l'autre en secours.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Protéger GRUB par mot de passe : durcir le bootloader, et l'effet de ce mot de passe sur l'édition des entrées.
- Durcir le noyau avec sysctl : les réglages noyau modifiables à chaud, complémentaires de ceux du démarrage.
- Notions fondamentales Linux : la séquence de démarrage complète, du firmware à systemd.