Important :

Le présent wiki a été migré vers wiki.archlinux.org.

Ce Wiki a été archivé. Toute contribution doit donc désormais se faire là-bas. Cette page de Wiki possède donc potentiellement des informations qui ne sont plus à jour !

Accueil wiki FR sur .org

Dépannage

De ArchwikiFR
Révision datée du 1 avril 2021 à 11:04 par Nophke (discussion | contributions) (Messages sur la console : lien vers page redirection)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)

Cet article donne une méthode générale de dépannage. Pour des problèmes spécifiques à une application qui possède une page dans le wiki, veuillez vous y référer.

Procédure générale

Attention aux détails

Afin de résoudre votre problème, il est «absolument crucial» que vos connaissances du sous-système qui vous intéresse soient solides. Comment cela fonctionne t'il? Qu'est ce qu'il devrait se passer s'il n'y avait cette erreur? Si vous avez du mal à répondre à ces deux questions, vous devriez probablement revoir vos connaissances sur le sujet.

Questions / checklist

Voici une liste de question que vous devriez vous poser chaque fois que vous êtes face à un système qui fonctionne mal. Sous chaque question se trouvent des notes expliquant comment vous devriez tenter de répondre, suivis d'exemples de façon de collecter des données, et des outils pour accéder aux journaux des opérations.

  1. Quel est le problème?
    Soyez aussi précis que possible. Cela vous aidera à ne pas être submergé ou distrait lors de la recherche d'une information spécifique.
  2. Quels sont les messages d'erreur? (s'il y en a)
    Copier et coller la sortie complète qui contient les messages d'erreur dans un fichier à part tel $HOME/issue.log. Par exemple, pour récupérer la sortie de la commande mkinitcpio vers le fichier $HOME/issue.log:
    $ mkinitcpio -p linux >> $HOME/issue.log
  3. Pouvez-vous reproduire le problème?
    Si oui, établissez la liste exacte des instructions/commandes nécessaires pour le reproduire. En ligne de commande, vous pouvez commencer par enregistrer vos commandes accompagnées de leurs sorties. Voir à ce propos script, une commande fournie par le paquet util-linux. Pour vous débarrasser des caractères de contrôle, et/ou non-imprimables du fichier typescript résultant, utilisez tr. Les séquences d’échappement ANSI sont plus difficiles à gérer (car plus complexes). Pour l'utilisation de sed à ce propos visitez https://stackpointer.io/unix/unix-linux-remove-ansi-escape-sequences/464/.
  4. Quand avez-vous rencontré ce problème pour la première fois? Quand le système a t'il été fonctionnel pour la dernière fois? Qu'est ce qui a changé entre temps?
    Si cela survient après une mise à jour, listez tous les paquet mis à jour, ainsi que leur numéro de version. Examinez /var/log/pacman.log. Pensez aux éventuels services requis pour le bon fonctionnement du système.
    $ systemctl status dhcpcd@eth0.service >> $HOME/issue.log

Approche

Plutôt que d'approcher un problème en constatant

L'application X ne fonctionne pas.

il est plus utile de de formuler le problème dans le contexte de son environnement.

L'application X produit l'erreur Y lors de l’exécution de la tâche Z dans les conditions A et B.

Besoin d'aide?

Après toutes ces étapes, vous devriez certaine idée de ce qu'il se passe sur le système et devriez pouvoir commencer à travailler à une solution.

Si vous avez besoin d'aide, celle-ci peut être trouvée sur https://forum.archlinux.fr, le forum de la communauté Archlinux francophone. N'oubliez pas que la nétiquette vous recommande d'avoir lu:

  1. L'art de poser de bonnes questions si vous n'avez jamais posté sur un forum,
  2. Les règles du forum si vous n'avez jamais posté sur le forum ArchLinuxFR.
Note : Le document en version anglophone précise que le support n'est fournis que pour Archlinux uniquement et aucune des distributions dérivées. La communauté francophone est probablement plus coulante la dessus. Mais de grâce si vous utilisez une distribution dérivée, mentionnez-le! (NdT)

Si l'on vous demande les sorties de commandes ou de journaux, postez ceux-ci dans leur intégralité, ne les tronquez pas aux seules sections que vous jugez utiles.

Problèmes de démarrage

Le diagnostique des problèmes de démarrage impliquent de pouvoir changer les paramètres passés au noyau. Cela suppose de pouvoir interagir avec le bootloader. Si cela n'est même pas possible, démarrez depuis une iso live et utilisez arch-chroot.

Astuce : La suite de cette section suppose que vous sachiez modifier les paramètres que votre bootloader passe au noyau. Si besoin, consultez la documentation de votre chargeur de démarrage. L'iso d'installation utilise GRUB.

Messages sur la console

A la fin du processus de démarrage, l'écran est entièrement vidé, et le login (ou un gestionnaire de connexion) apparaît. Ceci laisse l'utilisateur incapable de lire les éventuels messages d'erreur. Ce comportement pour être modifié par chacune des méthodes exposées dans les suivantes sous-sections. Voir Getty#Garder_les_messages_du_démarrage_sur_tty1 pour désactiver ceci de façon permanente.

N'oubliez pas que quelle que soit l'option choisie, les messages du noyau peuvent être visualisés après démarrage avec la commande journalctl -k ou dmesg. Pour afficher tous les logs depuis le derniers démarrage utilisez journalctl -b.

Contrôle du flux

Ce système rudimentaire de gestion du flux de la console s'applique à la plupart des émulateurs de terminaux incluant les consoles virtuelles.

  • Utilisez Ctrl+s pour mettre en pause l'affichage
  • Et Ctrl+q pour reprendre.

Cela ne met pas seulement l'affichage «en pause», cela gèle tout le programme qui tente d'afficher sur le terminal. Si le processus de démarrage semble bloqué, vérifiez que la console n'est pas «en pause».

Sortie verbeuse

La majorité des messages que le noyau produit lors du démarrage ne sont pas affichés. Vous pouvez rendre le noyau plus bavard en plus passant des paramètres tels:

  • debug active l'affichage des messages de débogage pour systemd et le noyau.
  • ignore_loglevel force l'affichage de tous les messages du noyau

Dans certaines situations vous pouvez également être intéressés par les paramètres suivants:

  • earlyprintk=vga,keep pour afficher les messages du «early boot». Utilisez cette option si le noyau crashe sans avoir eu le temps d'afficher quoi que ce soit. Remplacez vga par efi pour les systèmes en UEFI.
  • log_buf_len=16M alloue un grand tampon pour les messages du noyau (16 MiB), dans le cas d'une sortie très verbeuse, cela peut éviter un écrasement des données par manque de place dans le tampon.

Le noyau linux reconnait de nombreux paramètres pour le deboguage de sous-composants (par example: bootmem_debug, sched_debug. Voir la documentation du noyau pour des informations complémentaires.

netconsole

netconsole est un module qui envoi tous les messages de log du kernel à travers le réseau. Ceci peut vous sauver la mise dans le cas d'un serveur «headless»...

Shell de secours

Lancer un shell de secours avant la fin du démarrage est souvent la façon la plus simple de mettre le doigt sur ce qui cause le problème. Dans ce cas, différents paramètres peuvent être passés au noyau.

  • rescue lance un shell immédiatement après que le noyau monte la racine en écriture.
  • emergency lance un shell plus tôt encore, (avant que la plupart des partitions ne soit montées)
  • init=/bin/sh en dernier recours, ceci lance un shell avec les droits root. Alors que les deux points du dessus font tout deux appel à systemd, ce dernier paramètre devrait fonctionner même si systemd est «cassé».

Une autre option et d'utiliser le «shell de débogage» de systemd. Ce dernier active un shell (root) sur la neuvième console virtuelle (Ctrl+Alt+F9). Ceci peut être activé au moyen du service debug-shell.service ou en passant le paramètre systemd.debug_shell au noyau.

Attention : Ne pas oublier de désactiver le shell de débogage! Un shell avec des droits root à chaque démarrage serait une grosse faille de sécurité.

Écran noir et Carte graphique Intel

Il s'agit probablement d'un problème avec KMS. Voyez KMS#Désactiver_KMS. Si cela ne suffit pas, consultez ce paragraphe du wiki officiel.

Plantage lors du chargement du noyau

Désactivez la gestion de l'ACPI avec le paramètre acpi=off.

Déboguer les modules du noyau

Il est possible passer au noyau un paramètre tel module.option=val ceci commandera comment linux devra charger ou ne pas charger un module.

cf. la page modules.

Kernel panics

Un kernel panic est ce qu'il arrive quand le noyau linux plante et se retrouve dans un état dont il n'est pas pas capable de se sortir. Cet état est généralement causé par un pilote bogué qui rend la machine inerte, et incapable de répondre. Il est alors nécessaire de forcer le redémarrage de la machine.

Juste avant le blocage, un message de diagnostic est généré. Celui-ci contient:

  1. l'état de la machine quand le défaut est apparu
  2. la liste des appels de fonction qui ont conduit à la fonction qui a causé le kernel panic
  3. et la liste des modules chargés.

Heureusement, le noyau linux est stable, et les kernel panics ne se produisent pas souvent lors de l'utilisation des kernels «mainstream» tels que ceux qui sont fournis dans les dépots officiels. Toutefois, quand cela errive, il est important de savoir comment réagir.

Panic et Oops

On utilise parfois le terme de «Oops» ou de «kernel oops» à la place de kernel panic. Si les deux mots se rapportent au résultat d'une défaillance du noyau, un oops est quelque chose de plus général qu'un panic dans le sens qu'un oops ne résulte pas nécessairement à une défaillance complète de la machine. (deadlock machine NdT.)

Le noyau peut parfois se délivrer d'un oops en tuant les processus/tâches incriminés avant de reprendre son exécution normale.

Astuce : Passez au noyau le paramètre oops=panic lors du démarrage, ou utilisez cat 1 > /proc/sys/kernel/panic_on_oops une fois le noyau lancé pour forcer le noyau à considérer un oops comme un panic. Ceci est recommandé pour une sécurité maximale. En effet, dans certains cas rares l'apparition d'un oops pourrait causer divers problèmes futurs... Problèmes dont la cause deviendrait ainsi plus difficile à diagnostiquer.

Examiner le message d'un kernel panic

Si un panic apparaît lors du early boot (lors du chargement du noyau), vous devriez voir un message «Kernel panic - not syncing:». Cependant, une fois Systemd démarré, les messages du noyau vont être capturés et redirigés vers les journaux systèmes. Aussi, quand un panic se produit, le message de débogage ne sera pratiquement jamais écrit au journal... Le système est «gelé» avant que system-journald n'ait la possibilité de le faire. Aussi, la manière la plus simple d’examiner le panic message est de la visualiser sur la console dès qu'il se produit. (une autre solution étant de mettre en place kdump).

Pour rediriger les messages vers une console (ici tty1), il suffit de démarrer avec les paramètres suivants:

systemd.journald.forward_to_console=1 console=tty1
Astuce : Dans le cas ou les messages de panic défilent trop rapidement vous pouvez mettre en pause le système avec le paramètre pause_on_oops=seconds

Voyez le wiki anglophone pour un exemple de panic message.

Gestion des paquets

Voir les pages:

Réparer un système cassé

Si vous avez quand même effectué une mise à niveau partielle, et que le système est cassé au point que vous ne puissiez plus exécuter pacman, Démarrer à l'aide d'une ISO Arch mensuelle à partir d'une clé USB, d'un disque optique ou d'un réseau avec PXE. (Ne suivez pas le reste du guide d'installation.)

Montez votre système de fichiers racine :

[ISO] # mount /dev/rootFilesystemDevice /mnt

Montez toutes les autres partitions que vous avez créées séparément, en ajoutant le préfixe à chacune d'elles, c'est-à-dire :

[ISO] # mount /dev/bootDevice /mnt/boot

Essayez d'utiliser le "pacman" de votre système :

[ISO] # arch-chroot /mnt
# pacman -Syu

Si cela échoue, quittez le "chroot" et essayez :

[ISO] # pacman -Syu --sysroot /mnt

Si cela échoue, essayez :

[ISO] # pacman -Syu --root /mnt