Dans cette leçon, tu vas découvrir comment analyser et optimiser le temps de démarrage de ton système Linux grâce à systemd-analyze. Un démarrage lent peut cacher des services inutiles ou des configurations problématiques.
systemd-analyze est un outil fourni avec systemd qui permet de mesurer et diagnostiquer le temps nécessaire au démarrage du système. Il montre exactement combien de temps chaque étape prend, du firmware BIOS/UEFI jusqu'à l'écran de connexion.
Ce qu'on peut analyser :
systemd-analyzeExemple de sortie :
Lecture :
systemd-analyze blameCette commande liste tous les services dans l'ordre décroissant de leur temps de démarrage :
Les services en haut de la liste sont les plus longs — c'est là qu'il faut chercher des optimisations.
systemd-analyze plot > demarrage.svgPuis ouvre le fichier avec un navigateur :
xdg-open demarrage.svgTu obtiens une timeline visuelle montrant chaque service sur une barre temporelle. C'est idéal pour identifier en un coup d'œil où le temps est perdu.
systemd-analyze critical-chainAffiche la chaîne critique — le chemin le plus long de services dépendants qui détermine la durée totale du démarrage :
Si un service inconnu prend beaucoup de temps, vérifie son utilité :
# Voir la description d'un service
systemctl status mon-service.service
Pour désactiver un service inutile (exemple avec bluetooth si tu n'en as pas besoin) :
# Désactiver un service au démarrage
sudo systemctl disable bluetooth.service
# Masquer complètement (ne peut plus être démarré)
sudo systemctl mask bluetooth.service
# Éditer la config GRUB
sudo nano /etc/default/grub
Modifie ces lignes :
Puis applique :
sudo update-grubSystemd parallélise automatiquement les services, mais tu peux vérifier qu'un service n'attend pas inutilement :
# Voir pourquoi un service tarde
systemctl show nginx.service | grep After
Vérifie la validité de tes fichiers d'unités systemd :
systemd-analyze verify /chemin/vers/mon-service.serviceCela détecte les erreurs de syntaxe ou les options inconnues.
| Commande | Description |
|---|---|
| systemd-analyze time | Affiche les temps de démarrage |
| systemd-analyze blame | Liste les services par temps |
| systemd-analyze plot | Génère un SVG de la timeline |
| systemd-analyze critical-chain | Affiche la chaîne critique |
| systemd-analyze dot | Génère un graphe des dépendances |
| systemd-analyze dump | Affiche l'état complet des services |
Objectif : Analyse ton propre système et identifie une optimisation possible.
Étapes :
1. Ouvre un terminal et exécute systemd-analyze pour voir ton temps de démarrage total.
2. Exécute systemd-analyze blame pour identifier les 5 services les plus lents.
3. Génère un SVG avec systemd-analyze plot > ~/demarrage.svg et ouvre-le.
4. Choisis un service non essentiel et désactive-le avec sudo systemctl disable nom.service.
5. Redémarre et compare le temps avec systemd-analyze.
Sous SysVinit, le système démarrait dans l'un des runlevels 0 à 6. Chaque runlevel déclenchait un ensemble de services. Systemd remplace ce mécanisme par des targets, qui sont des groupes d'unités (services, sockets, mounts...) devant être actifs simultanément.
Affiche la target par défaut vers laquelle le système démarre.
Configure le système pour démarrer en mode texte ou avec interface graphique.
Passe immédiatement dans la target spécifiée, sans redémarrer. Tous les services non requis par la nouvelle target sont arrêtés.
Affiche toutes les targets connues sur le système, avec leur état.
Au démarrage, dans le menu GRUB, ajoutez systemd.unit=multi-user.target au noyau pour démarrer en mode texte.
Affiche l'arbre complet des unités requises par la target. Très utile pour comprendre pourquoi un service ne démarre pas.
Liste toutes les target-units installées sur le système.
Affiche les targets actuellement actives sur le système.
Passe en mode rescue. Tous les services sont arrêtés sauf ceux essentiels. Équivalent de init 1.
Mode plus minimal encore que rescue. Monte uniquement le root filesystem en lecture seule. Très utile pour diagnostiquer des problèmes de démarrage.
Équivalents de halt et reboot, mais via systemd.
Exemple minimal :
Découvrez quelle est la target par défaut de votre système :
Listez toutes les targets actuellement actives :
Découvrez les services dépendants de la target multi-user.target :
Passez temporairement en mode rescue (avec sudo) pour voir la différence :
Puis revenez avec sudo systemctl isolate graphical.target ou sudo systemctl isolate multi-user.target.
Vérifiez si graphical.target dépend bien de multi-user.target :
systemctl — Gestion des services et targets (voir Leçon 21)
systemctl daemon-reload — Recharger la configuration (voir Leçon 59)
journalctl — Explorer les logs systemd (voir Leçon 49)
systemd-analyze — Analyser le temps de démarrage (voir Leçon 35)
Les targets systemd offrent une flexibilité bien supérieure aux runlevels SysVinit. Chaque target peut dépendre d'autres targets, créant un graphe de dépendances résolu en parallèle par systemd. Cela réduit considérablement le temps de démarrage par rapport à l'approche séquentielle de SysVinit.
Le fichier /lib/systemd/system/graphical.target est équippé de Wants=multi-user.target, ce qui signifie que graphical.target "veut" que multi-user.target soit actif — mais multi-user peut fonctionner seul, tandis que graphical ne le peut pas.
Pour les machines sans interface graphique (serveurs), privilégiez multi-user.target comme target par défaut. C'est plus léger et plus rapide à démarrer.