Recherche de site Web

Comment déterminer et résoudre les problèmes de démarrage sous Linux


Le système Linux démarre si vite que la plupart des résultats défilent trop rapidement pour lire le texte (montrant les services en cours de démarrage) envoyé à la console. Par conséquent, observer les problèmes/erreurs de démarrage devient un peu un défi pour nous.

Dans cet article, nous expliquerons brièvement les différentes étapes du processus de démarrage d'un système Linux, puis apprendrons comment établir et aller au fond des problèmes de démarrage : en termes de fichiers à examiner ou de commandes pour afficher les messages de démarrage du système.

Résumé du processus de démarrage Linux

En résumé, une fois que l'on appuie sur le bouton Power On, le BIOS (Basic Input Output System), un programme intégré dans une carte mère, effectue un POST (Auto-test à la mise sous tension) – où le matériel tel que les disques, la RAM (Random Access Memory), le clavier, etc. est analysé. En cas d'erreur (matériel manquant/dysfonctionnement), elle est signalée à l'écran.

Lors du POST, le BIOS recherche également le périphérique de démarrage, le disque à partir duquel effectuer le démarrage (généralement le premier disque dur, mais nous pouvons le configurer pour qu'il s'agisse d'un DVD, d'un périphérique USB). , carte réseau, etc. à la place).

Ensuite, le système se connectera au disque et recherchera le Master Boot Record (taille de 512 octets) qui stocke le chargeur de démarrage (taille de 446 octets) et le reste de l'espace stocke des informations sur les partitions de disque. (quatre maximum) et le MBR lui-même.

Lecture suggérée : 4 meilleurs chargeurs de démarrage Linux

Le chargeur de démarrage identifiera et pointera vers, ainsi que chargera le noyau et le fichier initrd (disque RAM d'initialisation - fournit au noyau l'accès au système de fichiers racine monté et aux modules/pilotes stockés dans / lib), qui sont généralement stockés dans le répertoire /boot du système de fichiers.

Une fois le noyau chargé, il exécute init (ou systemd sur les distributions Linux plus récentes), le premier processus avec PID 1, qui démarre à son tour tous les autres processus du système. C'est également le dernier processus à être exécuté à l'arrêt du système.

Comment découvrir les problèmes de démarrage Linux ou les messages d'erreur

Comme nous l'avons mentionné précédemment, les processus de démarrage de Linux se déroulent rapidement et nous ne pouvons même pas lire clairement la plupart des sorties envoyées à la console.

Ainsi, pour prendre note des problèmes/erreurs de démarrage, un administrateur système doit examiner certains fichiers importants en conjonction avec des commandes particulières. Et ceux-ci incluent :

/var/log/boot.log – Enregistre les messages de démarrage du système

C'est probablement le premier fichier que vous souhaitez examiner, pour voir tout ce qui s'est déroulé lors du démarrage du système.

Plutôt que d'essayer si fort de suivre le résultat à l'écran pendant le démarrage, nous pouvons afficher ce fichier une fois le processus de démarrage terminé pour nous aider à déterminer et à résoudre les problèmes/erreurs de démarrage.

Nous utilisons la commande cat à cet effet comme suit (vous trouverez ci-dessous un exemple de ce fichier) :

cat /var/log/boot.log
[  OK  ] Started Load/Save RF Kill Switch Status.
[ TIME ] Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.device.
[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615.
[DEPEND] Dependency failed for Swap.
[  OK  ] Reached target System Initialization.
[  OK  ] Listening on UUID daemon activation socket.
[  OK  ] Started Daily Cleanup of Temporary Directories.
[  OK  ] Listening on CUPS Scheduler.
[  OK  ] Started Daily apt activities.
[  OK  ] Reached target Timers.
[  OK  ] Listening on Avahi mDNS/DNS-SD Stack Activation Socket.
[  OK  ] Started ACPI Events Check.
[  OK  ] Started Trigger resolvconf update for networkd DNS.
[  OK  ] Started CUPS Scheduler.
[  OK  ] Reached target Paths.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Listening on ACPID Listen Socket.
         Starting Console System Startup Logging...
[  OK  ] Listening on Cockpit Web Service Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting LSB: Set the CPU Frequency Scaling governor to "ondemand"...
[  OK  ] Started ACPI event daemon.
[  OK  ] Started mintsystem.service.
         Starting Detect the available GPUs and deal with any system changes...
         Starting LSB: daemon to balance interrupts for SMP systems...
         Starting Bluetooth service...
[  OK  ] Started ClamAV virus database updater.
         Starting LSB: Starts syslogd...
[  OK  ] Started Regular background program processing daemon.
         Starting Modem Manager...
         Starting Accounts Service...
......

À partir du résultat ci-dessus, nous pouvons voir qu'il existe des problèmes de démarrage indiqués par les lignes ci-dessous.

[DEPEND] Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c208ed615.
[DEPEND] Dependency failed for Swap.

Problème : problème avec la partition d'échange ; soit le système n'a pas réussi à lire le fichier/périphérique/partition d'échange, soit il n'est pas présent.

Vérifions si le système utilise l'espace d'échange avec la commande libre.

free

total        used        free      shared  buff/cache   available
Mem:        3742792     2421060      433696      287376      888036      967000
Swap:             0           0           0

Alternativement, nous pouvons exécuter la commande swapon pour afficher le résumé de l'utilisation de l'espace d'échange du système (nous n'obtiendrons aucun résultat).

swapon -s

Nous pouvons résoudre ce problème en créant un espace d'échange sous Linux.

Remarque : Le contenu de ce fichier est effacé à l'arrêt du système : de nouvelles données y sont stockées lors d'un nouveau démarrage.

/var/log/messages – Journaux système généraux

Ce fichier stocke les messages généraux du système, y compris les messages enregistrés lors du démarrage du système.

Pour le visualiser, tapez :

cat /var/log/messages
Jun  4 13:04:44 tecmint syslogd (GNU inetutils 1.9.4): restart
Jun  4 13:19:55 tecmint -- MARK --
Jun  4 13:39:55 tecmint -- MARK --
Jun  4 13:59:55 tecmint -- MARK --
Jun  4 14:19:55 tecmint -- MARK --
Jun  4 14:20:17 tecmint vmunix: [ 4945.388740] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388837] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388903] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.388930] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.389334] i915 0000:00:02.0: BAR 6: [??? 0x00000000 flags 0x2] has bogus alignment
Jun  4 14:20:17 tecmint vmunix: [ 4945.389402] pcieport 0000:00:1c.0: BAR 15: assigned [mem 0xdfa00000-0xdfbfffff 64bit pref]
.....

Comme ce fichier peut être relativement long, nous pouvons le visualiser dans les pages en utilisant la commande plus (qui affiche même un pourcentage) comme ceci.

more /var/log/messages

Le contenu de /var/log/messages contrairement au fichier précédent n'est pas effacé à l'arrêt car il contient non seulement des messages de démarrage mais également des messages concernant d'autres activités du système. Ainsi, les fichiers plus anciens sont compressés et conservés sur le système pour une inspection ultérieure, comme indiqué ci-dessous.

ls -l message*

-rw-r--r-- 1 root root 1206127 Jun 10 14:20 messages
-rw-r--r-- 1 root root 1419494 Jun  4 13:00 messages.1
-rw-r--r-- 1 root root  153011 May 28 09:30 messages.2.gz

dmesg – Affiche les messages du noyau

La commande dmesg peut afficher les opérations une fois le processus de démarrage terminé, telles que les options de ligne de commande transmises au noyau ; composants matériels détectés, événements lors de l'ajout d'un nouveau périphérique USB ou erreurs telles que l'échec de la carte réseau (NIC (Network Interface Card)) et les pilotes ne signalent aucune activité de liaison détectée sur le réseau et bien plus encore.

dmesg
[    0.000000] Initializing cgroup subsys cpuset
[    0.000000] Initializing cgroup subsys cpu
[    0.000000] Initializing cgroup subsys cpuacct
[    0.000000] Linux version 4.4.0-21-generic (buildd@lgw01-21) (gcc version 5.3.1 20160413 (Ubuntu 5.3.1-14ubuntu2) ) #37-Ubuntu SMP Mon Apr 18 18:33:37 UTC 2016 (Ubuntu 4.4.0-21.37-generic 4.4.6)
[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-generic root=UUID=57b36d48-1938-43c2-bf85-e97bc9f423ea ro quiet splash
[    0.000000] KERNEL supported cpus:
[    0.000000]   Intel GenuineIntel
[    0.000000]   AMD AuthenticAMD
[    0.000000]   Centaur CentaurHauls
[    0.000000] x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]:  256
[    0.000000] x86/fpu: Supporting XSAVE feature 0x01: 'x87 floating point registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x02: 'SSE registers'
[    0.000000] x86/fpu: Supporting XSAVE feature 0x04: 'AVX registers'
[    0.000000] x86/fpu: Enabled xstate features 0x7, context size is 832 bytes, using 'standard' format.
[    0.000000] x86/fpu: Using 'eager' FPU context switches.
[    0.000000] e820: BIOS-provided physical RAM map:
[    0.000000] BIOS-e820: [mem 0x0000000000000000-0x000000000008ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000000090000-0x00000000000bffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000000100000-0x000000001fffffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000020000000-0x00000000201fffff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000020200000-0x0000000040003fff] usable
[    0.000000] BIOS-e820: [mem 0x0000000040004000-0x0000000040004fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000040005000-0x0000000080b2ffff] usable
[    0.000000] BIOS-e820: [mem 0x0000000080b30000-0x0000000080d31fff] reserved
[    0.000000] BIOS-e820: [mem 0x0000000080d32000-0x00000000ce3eefff] usable
[    0.000000] BIOS-e820: [mem 0x00000000ce3ef000-0x00000000ce5eefff] type 20
[    0.000000] BIOS-e820: [mem 0x00000000ce5ef000-0x00000000daeeefff] reserved
[    0.000000] BIOS-e820: [mem 0x00000000daeef000-0x00000000daf9efff] ACPI NVS
....

journalctl – Requête du contenu du journal Systemd

Ceci est utile dans la plupart des distributions Linux actuelles utilisant systemd : le dernier gestionnaire de système et de services. En dessous, la journalisation du système est effectuée via le composant journal – un emplacement centralisé pour tous les messages enregistrés par différents composants.

Ces messages incluent les messages du noyau et de démarrage ; messages de syslog ou de divers services. Nous pouvons l'utiliser pour examiner les messages de démarrage et établir les problèmes de démarrage en lisant la sortie et en identifiant les lignes d'intérêt (erreurs signalées par des lignes rouges en fonction des paramètres de couleur du texte du terminal).

journalctl
Jun 13 16:35:32 tecmint mtp-probe[963]: checking bus 2, device 5: "/sys/devices/pci0000:00/0000:00:1d.0/u
Jun 13 16:35:32 tecmint mtp-probe[963]: bus: 2, device: 5 was not an MTP device
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: Timed out waiting for device dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d
Jun 13 16:35:54 tecmint systemd[1]: Dependency failed for /dev/disk/by-uuid/53e41ce9-dc18-458c-bc08-584c2
Jun 13 16:35:54 tecmint systemd[1]: Dependency failed for Swap.
Jun 13 16:35:54 tecmint systemd[1]: swap.target: Job swap.target/start failed with result 'dependency'.
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: dev-disk-by\x2duuid-53e41ce9\x2ddc18\x2d458c\x2dbc08\x2d584c208ed615.
Jun 13 16:35:54 tecmint systemd[1]: Reached target System Initialization.
Jun 13 16:35:54 tecmint systemd[1]: Started ACPI Events Check.
Jun 13 16:35:54 tecmint systemd[1]: Listening on CUPS Scheduler.
Jun 13 16:35:54 tecmint systemd[1]: Starting Console System Startup Logging...
Jun 13 16:35:54 tecmint systemd[1]: Started Daily Cleanup of Temporary Directories.

Ce qui précède est un exemple du résultat de la commande montrant une erreur que nous avons déjà identifiée en affichant /var/log/boot.log : l'erreur de partition d'échange. Pour afficher plus de lignes de sortie, appuyez simplement sur le bouton [Entrée].

Consultez également ces guides utiles sur le démarrage du système Linux et la gestion des services en relation avec les gestionnaires de systèmes et de services courants :

  1. Gestion des processus dans RHEL 7 : démarrage, arrêt et tout le reste
  2. Gestion du processus et des services de démarrage du système (SysVinit, Systemd et Upstart)
  3. L'histoire derrière « init » et « systemd » : pourquoi « init » devait être remplacé par « systemd »

Dans cet article, nous avons expliqué brièvement les différentes étapes du processus de démarrage du système Linux et appris comment établir et éventuellement résoudre les problèmes de démarrage. Pour ajouter une réflexion à ce guide, utilisez le formulaire de commentaires ci-dessous.