veilletech.fr
7 sept. Feed du jour
#04 LINUX Article

Redémarrer Linux sans repasser par le firmware

Trois profondeurs de redémarrage : encore faut-il choisir la bonne.

`systemctl soft-reboot` relance tout l'espace utilisateur en gardant le noyau en place : ni firmware, ni bootloader, ni initrd. Disponible depuis systemd 254, il couvre le cas fréquent d'une mise à jour de paquets qui n'a pas touché au noyau, et ramène l'interruption à un redémarrage du gestionnaire de services.

3 min de lectureintermédiairevidéo 1:25
Partager
Sommaire6 sections
  1. Ce qui se passe
  2. Trois profondeurs de redémarrage
  3. Comment ça se déroule
  4. La fonctionnalité qui justifie l'outil
  5. Les limites, qui sont le vrai sujet
  6. À retenir

Ce qui se passe

Après une mise à jour de paquets, les bibliothèques ont changé et les démons ont besoin d'un graphe de démarrage propre. Le réflexe est reboot — et l'on paie alors le firmware, le bootloader, l'initialisation du noyau et l'initrd, alors que le noyau n'a pas bougé.

systemctl soft-reboot, ajouté dans systemd 254, couvre exactement ce cas : il démonte et relance l'espace utilisateur pendant que le noyau continue de tourner.

Trois profondeurs de redémarrage

Profondeur Commande Noyau Firmware / bootloader
Espace utilisateur seul systemctl soft-reboot conservé ignorés
Nouveau noyau, sans firmware systemctl kexec remplacé largement ignorés
Cycle complet systemctl reboot remplacé parcourus

Soft-reboot n'est pas « un reboot en plus rapide » : c'est un contrat différent. L'état du noyau est continu, l'état de l'espace utilisateur ne l'est pas.

Comment ça se déroule

Le déclenchement passe par systemctl soft-reboot — jamais en démarrant à la main systemd-soft-reboot.service, la page de manuel est explicite. La commande isole vers soft-reboot.target, envoie un SIGTERM puis un SIGKILL aux processus restants, et le PID 1 se réexécute depuis la racine (éventuellement nouvelle) avant d'enfiler une nouvelle transaction de démarrage.

Terminal
systemctl --version | head -1          # systemd 254 minimum
systemctl cat soft-reboot.target
systemctl list-dependencies soft-reboot.target
sudo systemctl soft-reboot

Ce qui n'a pas lieu : la seconde phase de systemd-shutdown, les exécutables de /usr/lib/systemd/system-shutdown/, le retour à l'initrd, le redémarrage matériel, le firmware, le bootloader, le noyau. Conséquence directe : si vous comptiez sur un hook de system-shutdown pour vider un cache disque, il ne s'exécutera pas — déplacez ce travail dans un ExecStop= ou ExecStopPost=.

Pour vérifier après coup : uname -r doit être inchangé (sinon ce n'était pas un soft-reboot), FirmwareTimestamp / LoaderTimestamp / KernelTimestamp restent continus, seul UserspaceTimestamp avance.

La fonctionnalité qui justifie l'outil

Si /run/nextroot/ existe — répertoire, point de montage ou lien symbolique vers l'un des deux — la racine bascule dessus pendant l'opération. C'est une permutation A/B d'image système sans redémarrage matériel, en conservant l'état détenu par le noyau : routes, réglages sysctl non réinitialisés, mappings LUKS déverrouillés.

Le piège qui va avec mérite d'être noté : quand /run/nextroot/ est en place, systemctl reboot effectue un soft-reboot à sa place. Pour forcer un vrai cycle firmware :

Terminal
export SYSTEMCTL_SKIP_AUTO_SOFT_REBOOT=1
sudo systemctl reboot

Les limites, qui sont le vrai sujet

À retenir

Sur un serveur mis à jour sans changement de noyau, soft-reboot remplace le cycle complet par un recyclage de l'espace utilisateur. Testez-le d'abord sur une machine jetable — et retenez surtout que la préparation d'un /run/nextroot/ change discrètement le comportement de reboot.

Source : DEV Community