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.
systemctl --version | head -1 # systemd 254 minimum
systemctl cat soft-reboot.target
systemctl list-dependencies soft-reboot.target
sudo systemctl soft-rebootCe 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 :
export SYSTEMCTL_SKIP_AUTO_SOFT_REBOOT=1
sudo systemctl rebootLes limites, qui sont le vrai sujet
- Les réglages
/proc/syset/sysne sont pas réinitialisés, le noyau n'est pas remplacé. Après une mise à jour touchant le noyau ou l'initramfs :kexecou redémarrage complet, pas soft-reboot. - Des ressources peuvent traverser la coupure —
/runreste monté, le file descriptor store (FileDescriptorStorePreserve=, ajouté lui aussi en 254), les sockets non arrêtés, les services marquésSurviveFinalKillSignal=yes. La page de manuel dit d'en user avec parcimonie : mélanger deux générations est la recette d'un système à moitié mis à jour. Un processus survivant épingle en mémoire les anciens montages et bibliothèques, et saute la mise à jour de code qui motivait l'opération. - La session SSH tombe comme lors d'un redémarrage : prévoyez un accès console.
À 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