Aller au contenu

Linux avancé : noyau et démarrage

Fenêtre de terminal
uname -r # noyau en cours (6.8.x sur Ubuntu 24.04, 7.0.x sur 26.04)
uname -a
cat /proc/version
cat /etc/os-release
hostnamectl
lscpu
lspci -k # matériel PCI et pilote utilisé
lsusb
sudo dmidecode -t system -t bios # informations du constructeur

Ubuntu LTS suit un noyau récent à l’installation ; le noyau HWE (hardware enablement) apporte les noyaux plus récents des versions suivantes pendant la vie de la LTS : apt policy linux-generic linux-generic-hwe-24.04.

Le noyau charge à la demande des modules (pilotes, systèmes de fichiers, protocoles).

Fenêtre de terminal
lsmod | head
modinfo e1000e # description et paramètres d'un module
sudo modprobe br_netfilter # charger
sudo modprobe -r br_netfilter # décharger
sudo dmesg -T | tail # messages du chargement

Chargement au démarrage : /etc/modules-load.d/reseau.conf (un nom de module par ligne). Paramètres et interdictions : /etc/modprobe.d/.

/etc/modules-load.d/conteneurs.conf
overlay
br_netfilter
# /etc/modprobe.d/blocage.conf
blacklist nouveau
options snd_hda_intel power_save=1
Fenêtre de terminal
sudo update-initramfs -u # après modification des modules « précoces »

blacklist n’empêche pas le chargement par dépendance : install nom /bin/false l’interdit complètement.

Fenêtre de terminal
sysctl -a | less
sysctl vm.swappiness
sudo sysctl -w vm.swappiness=10 # temporaire
echo 'vm.swappiness=10' | sudo tee /etc/sysctl.d/99-memoire.conf
sudo sysctl --system # recharge tous les fichiers
sysctl -p /etc/sysctl.d/99-memoire.conf

Fichiers lus : /usr/lib/sysctl.d/, /etc/sysctl.d/ (préfixe numérique = ordre ; le dernier gagne), /etc/sysctl.conf. Nommer ses fichiers 99-quelquechose.conf pour passer après ceux du système.

Paramètre Rôle Valeurs courantes
vm.swappiness Propension à échanger 60 (défaut), 10 pour un serveur de base de données
vm.overcommit_memory Politique de sur-allocation 1 conseillé pour Redis (voir Redis : expiration et mémoire)
vm.max_map_count Zones mémoire par processus 262144 pour Elasticsearch, certaines bases
fs.inotify.max_user_watches Fichiers surveillés 524288 pour les outils de développement (Vitest : dépannage)
fs.file-max Fichiers ouverts (système) Rarement à changer
net.core.somaxconn File d’acceptation Voir Réseau avancé
kernel.pid_max Nombre maximal de PID Machines avec énormément de processus
kernel.panic Redémarrage automatique après un plantage du noyau (secondes) 10 pour un serveur distant

Ne modifier que ce qu’on comprend et qu’on a mesuré : les valeurs par défaut sont raisonnables ; copier des « optimisations » trouvées en ligne dégrade parfois les performances.

Fenêtre de terminal
cat /proc/cmdline
grep -E "^GRUB_" /etc/default/grub

Modifier les paramètres de démarrage : /etc/default/grub

GRUB_TIMEOUT=5
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
GRUB_CMDLINE_LINUX="console=tty0 console=ttyS0,115200n8"
Fenêtre de terminal
sudo cp /etc/default/grub /etc/default/grub.sauvegarde
sudo nano /etc/default/grub
sudo update-grub # régénère /boot/grub/grub.cfg
Paramètre Effet
quiet splash Démarrage discret (retirer pour voir les messages en cas de panne)
console=ttyS0,115200 Console série (serveurs, machines virtuelles)
nomodeset Désactiver le pilote graphique (écran noir au démarrage)
fsck.mode=force Vérifier les systèmes de fichiers au prochain démarrage
systemd.unit=rescue.target Démarrer en mode secours
init=/bin/bash Shell direct (récupération)
net.ifnames=0 Anciens noms d’interface (eth0)
transparent_hugepage=never Désactiver les grandes pages transparentes (recommandé pour certaines bases)
Fenêtre de terminal
systemd-analyze # durée totale (noyau + espace utilisateur)
systemd-analyze blame | head -15 # unités les plus lentes
systemd-analyze critical-chain # chaîne critique
systemd-analyze plot > demarrage.svg # diagramme
journalctl -b -p warning # avertissements de ce démarrage
journalctl -b -1 -p err # erreurs du démarrage précédent
systemctl --failed # unités en échec
dmesg -T --level=err,warn

Voir aussi systemd : dépendances et cibles (cibles de démarrage et ordre).

Situation Solution
Service en échec bloquant le démarrage systemctl --failed, journalctl -xb
Mode d’urgence (fstab erroné) Entrer le mot de passe de root (ou Ctrl+D), corriger /etc/fstab, mount -o remount,rw /, reboot
Mot de passe root ou utilisateur perdu Démarrer avec init=/bin/bash, mount -o remount,rw /, passwd, exec /sbin/init (accès physique ou console requis)
Noyau défectueux Menu GRUB > « Advanced options » > choisir un noyau précédent
Système qui ne démarre plus Démarrer sur un système live (clé USB ou ISO de l’hébergeur), monter, chroot, réparer
Fenêtre de terminal
sudo mount /dev/sdX2 /mnt # racine (remplacer sdX2)
sudo mount /dev/sdX1 /mnt/boot/efi # partition EFI
for d in dev proc sys run; do sudo mount --bind /$d /mnt/$d; done
sudo chroot /mnt
# dans le chroot :
update-grub
grub-install /dev/sdX # BIOS ; en EFI : grub-install --target=x86_64-efi
update-initramfs -u -k all
exit

Les accès console de l’hébergeur (KVM, console série, mode secours) servent à cela : les repérer avant d’en avoir besoin.

L’initramfs est une petite image chargée en mémoire au démarrage qui contient les pilotes nécessaires pour monter la racine (disque, LVM, RAID, chiffrement).

Fenêtre de terminal
lsinitramfs /boot/initrd.img-$(uname -r) | head
sudo update-initramfs -u # régénérer pour le noyau courant
sudo update-initramfs -u -k all
ls -lh /boot/initrd.img-*

À régénérer après un changement de configuration de disque (LVM, mdadm, crypttab) : sinon le système peut ne plus trouver sa racine au démarrage suivant.

Fenêtre de terminal
dpkg -l 'linux-image-*' | grep ^ii
uname -r
df -h /boot # une petite partition /boot se remplit de vieux noyaux
sudo apt autoremove --purge # supprime les anciens noyaux inutiles (en gardant le courant et le précédent)
apt policy linux-image-generic
sudo apt install linux-generic-hwe-24.04 # noyau HWE (24.04)

Garder toujours au moins un noyau précédent fonctionnel pour pouvoir revenir en arrière. Un /boot plein (mise à jour interrompue) se règle par apt autoremove --purge, puis sudo apt -f install.

Fenêtre de terminal
cat /var/run/reboot-required.pkgs 2>/dev/null
sudo needrestart -r l # services à redémarrer
sudo systemctl reboot
sudo shutdown -r +5 "redémarrage de maintenance"
sudo shutdown -c # annuler
last reboot | head -5

Livepatch (service d’Ubuntu Pro, gratuit pour un usage personnel limité) applique des correctifs de sécurité du noyau sans redémarrer :

Fenêtre de terminal
sudo pro attach <jeton> # jeton fourni par le compte Ubuntu Pro
sudo pro status
canonical-livepatch status

Il retarde les redémarrages urgents mais ne les supprime pas : prévoir un redémarrage régulier (voir Ubuntu Server : actions après l’installation).

Fenêtre de terminal
journalctl -k -b -1 | tail -50 # messages du noyau avant le dernier arrêt
sudo journalctl -b -1 -p crit
ls /var/crash/ # rapports (apport, selon la configuration)
sudo apt install linux-crashdump # kdump : capture de la mémoire lors d'un plantage
cat /proc/sys/kernel/panic
echo 'kernel.panic=10' | sudo tee /etc/sysctl.d/99-panic.conf

Un redémarrage sans trace (journal vide avant l’arrêt) évoque une coupure matérielle (alimentation, surchauffe, hyperviseur) plutôt qu’un plantage logiciel.

Symptôme Piste
Écran noir au démarrage nomodeset, retirer quiet splash, console série
error: file '/boot/grub/…' not found GRUB à réinstaller depuis un système live (chroot)
/boot plein, apt échoue apt autoremove --purge, supprimer d’anciens noyaux
ALERT! UUID=… does not exist. Dropping to a shell initramfs : disque ou module manquant ; blkid, /etc/fstab, update-initramfs -u depuis un système de secours
Un module ne se charge pas dmesg -T, modinfo, noyau différent du module (DKMS : dkms status)
Un paramètre sysctl est perdu au redémarrage Valeur écrite avec -w seulement : l’ajouter à /etc/sysctl.d/
Modules DKMS (VirtualBox…) cassés après mise à jour du noyau sudo dkms autoinstall, installer les en-têtes (linux-headers-$(uname -r))
Démarrage lent systemd-analyze blame, service réseau qui attend (systemd-networkd-wait-online)

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Les noyaux diffèrent (6.8 sur Ubuntu 24.04, 7.0 sur 26.04) ; les commandes sont les mêmes. sudo est fourni par sudo-rs sur 26.04. Après une montée de version d’Ubuntu, recompiler les modules DKMS et vérifier les paramètres de la ligne de commande du noyau.