Diagnostic du démarrage Linux avec systemd-analyze

Avec plaisir. Voici une fiche que tu peux intégrer directement dans ton wiki.

systemd-analyze – Analyse du démarrage sous Linux

Présentation

systemd-analyze est un outil fourni avec systemd permettant d’analyser le processus de démarrage d’un système Linux.

Il permet notamment de :

  • mesurer le temps de démarrage ;
  • identifier les services les plus lents ;
  • comprendre les dépendances entre services ;
  • détecter les erreurs au démarrage ;
  • diagnostiquer les problèmes après une mise à jour.



Temps total de démarrage

systemd-analyze

Exemple :

Startup finished in 5.742s (firmware) + 3.241s (loader) + 4.931s (kernel) + 21.103s (userspace) = 35.018s

graphical.target reached after 21.087s in userspace.

Interprétation

  • Firmware : temps passé dans le BIOS/UEFI.
  • Loader : temps de GRUB.
  • Kernel : démarrage du noyau Linux.
  • Userspace : démarrage des services systemd.



Services les plus lents

systemd-analyze blame

Exemple :

25.708s snapd.seeded.service
6.524s NetworkManager-wait-online.service
2.620s docker.service

Cette commande classe les services par durée de démarrage.

Attention : Un service long n’est pas forcément responsable d’un démarrage lent. Certains services démarrent en parallèle.


Chaîne critique du démarrage (commande recommandée)

systemd-analyze critical-chain

Exemple :

graphical.target
└─multi-user.target
  └─snapd.seeded.service
    └─basic.target

Cette commande affiche la chaîne de dépendances qui détermine réellement le temps de démarrage.

C’est généralement la commande la plus utile pour comprendre pourquoi un système démarre lentement.



Vérifier les services en erreur

systemctl --failed

Affiche tous les services ayant échoué.

Exemple :

UNIT                    LOAD   ACTIVE SUB    DESCRIPTION
example.service         loaded failed failed Example Service

Consulter les erreurs du dernier démarrage

sudo journalctl -b -p err

Affiche uniquement les erreurs du démarrage courant.

Très utile après :

  • une mise à jour ;
  • un changement de noyau ;
  • une modification de configuration.



Consulter les avertissements et erreurs du noyau

sudo dmesg --level=err,warn

Permet d’identifier :

  • problèmes matériels ;
  • pilotes ;
  • GPU ;
  • stockage ;
  • réseau.



Générer une chronologie graphique du démarrage

systemd-analyze plot > boot.svg

Puis ouvrir le graphique :

xdg-open boot.svg

Le fichier SVG représente visuellement le démarrage de tous les services systemd.

Très pratique pour repérer les blocages ou les parallélismes.



Vérifier un fichier systemd

systemd-analyze verify /etc/systemd/system/mon-service.service

Permet de détecter :

  • erreurs de syntaxe ;
  • dépendances invalides ;
  • directives inconnues.



Bonnes pratiques

Après une mise à jour importante (nouveau noyau, Ubuntu, Debian, etc.), il est recommandé d’exécuter :

systemd-analyze

systemd-analyze blame | head -20

systemd-analyze critical-chain

systemctl --failed

sudo journalctl -b -p err

sudo dmesg --level=err,warn

Cette séquence fournit une vision complète de l’état du système :

  • temps de démarrage ;
  • services les plus lents ;
  • dépendances critiques ;
  • services en échec ;
  • erreurs système ;
  • avertissements du noyau.



Exemple d’analyse

Lors d’une maintenance sur un poste Ubuntu 24.04 LTS après passage au noyau 7.0, cette analyse a permis de :

  • identifier deux anciens services systemd devenus inutiles (lxc-tunnel.service et mariadb-tunnel.service) ;
  • supprimer des tunnels SSH obsolètes ;
  • éliminer des erreurs autossh au démarrage ;
  • réduire le temps de démarrage d’environ 10 secondes ;
  • confirmer que les messages restants (SGX, Bluetooth SAP, Intel LSPCON, GNOME) étaient bénins.



Conclusion

systemd-analyze est un outil indispensable pour l’administration d’un système Linux moderne.

Les commandes les plus utiles sont :

Commande Utilité
systemd-analyze Temps global de démarrage
systemd-analyze blame Services les plus lents
systemd-analyze critical-chain Dépendances critiques du démarrage
systemctl --failed Services en erreur
journalctl -b -p err Erreurs du dernier démarrage
dmesg --level=err,warn Messages du noyau
systemd-analyze plot Chronologie graphique
systemd-analyze verify Vérification d’un fichier .service