12 février 2014

Kernel panic

Le kernel panic est une erreur du noyau qui peut intervenir dans de diverses circonstances. 
Il existe deux catégories de kernel panic :
  • Matériel (connu sous le nom de Aieee!). Un composant matériel est défaillant, ou mal pris en charge par le noyau...
  • Logiciel (connu sous le nom de Oops!), à savoir des erreurs dans le code du noyau, des modifications erronées, une compilation ou une installation du noyau incorrectes, etc.
Il peut survenir à différents moments et provoque une indisponibilité de l’ordinateur. Un message d’erreur peut apparaître éventuellement à l’écran. Les leds du clavier peuvent aussi clignoter... Vous pouvez considérer que le niveau de gravité est élevé.

1. Caractérisation

Si le fonctionnement normal du système GNU/Linux est perturbé alors :
  • Vous pouvez tenter de démarrer le système d’exploitation avec un autre noyau qui serait installé.
  • Le dépannage se fait depuis un CD, un DVD ou une clef USB contenant un système « live » GNU/Linux.
Vous devez déterminer si :
  • Le problème survient au premier démarrage du noyau après son installation. Il faut le désinstaller et sans doute le recompiler avec les bonnes options puis effectuer une nouvelle installation.
  • Le noyau ne fonctionne pas systématiquement ou de temps en temps lors du démarrage de l’ordinateur.
  • Le noyau se fige systématiquement sur un événement précis ou de façon aléatoire pendant le fonctionnement du système d’exploitation.

2. Fréquence du problème

Voici un ensemble de questions à se poser :
  • Depuis combien de temps avez-vous ce problème ?
  • Est-ce la première fois ? Sinon, est-ce un plantage fréquent ? À quelle fréquence ?
  • Pouvez-vous reproduire le problème ?
  • Le système est-il complètement immobilisé ?
  • Avez-vous changé quelque chose juste avant l’apparition du problème ? Si oui, quoi ?
  • Avez-vous une trace écrite des interventions sur cet ordinateur ?

3. Analyse de la source du problème

Pour déterminer facilement la source du problème, vérifiez que votre noyau n’est pas en mode « quiet » dans le fichier /etc/default/grub pour GRUB version 2. Si c’est le cas, il faut remplacer avec un éditeur de texte la ligne suivante :
GRUB_CMDLINE_LINUX_DEFAULT="quiet"
# If you change this file, run ’update-grub’ afterwards to update  
# /boot/grub/grub.cfg.  
# For full documentation of the options in this file, see:  
#   info -f grub -n ’Simple configuration’  
 
GRUB_DEFAULT=0  
GRUB_TIMEOUT=5  
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`  
GRUB_CMDLINE_LINUX_DEFAULT="quiet"  
GRUB_CMDLINE_LINUX="" 
 
                               ...
par :
GRUB_CMDLINE_LINUX_DEFAULT=""
# If you change this file, run ’update-grub’ afterwards to update  
# /boot/grub/grub.cfg.  
# For full documentation of the options in this file, see:  
#   info -f grub -n ’Simple configuration’  
 
GRUB_DEFAULT=0  
GRUB_TIMEOUT=5  
GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`  
GRUB_CMDLINE_LINUX_DEFAULT=""  
GRUB_CMDLINE_LINUX=""  
 
                               ...
Après l’enregistrement du fichier, exécutez dans un terminal update-grub :
# update-grub 
Generating grub.cfg ... 
Found background image: /usr/share/images/desktop-base/desktop- 
grub.png  
Found linux image: /boot/vmlinuz-3.10.2-20130726  
Found initrd image: /boot/initrd.img-3.10.2-20130726  
Found linux image: /boot/vmlinuz-3.2.0-4-amd64  
Found initrd image: /boot/initrd.img-3.2.0-4-amd64  
done 
Concernant GRUB version 1, le fichier grub.conf se situe dans le dossier /boot/grub. Le fichier /boot/grub/menu.lst est un lien symbolique de grub.conf :
# cat grub.conf  
# grub.conf generated by anaconda  
#  
# Note that you do not have to rerun grub after making changes to  
this file  
# NOTICE:  You have a /boot partition.  This means that  
#          all kernel and initrd paths are relative to /boot/, eg.  
#          root (hd0,0)  
#          kernel /vmlinuz-version ro root=/dev/mapper/VolGroup- 
lv_root  
#          initrd /initrd-[generic-]version.img  
#boot=/dev/sda  
default=1  
timeout=5  
splashimage=(hd0,0)/grub/splash.xpm.gz  
hiddenmenu  
title CentOS (3.10.2)  
      root (hd0,0)  
      kernel /vmlinuz-3.10.2 ro root=/dev/mapper/VolGroup-lv_root  
rd_NO_LUKS rd_NO_MD rd_LVM_LV=VolGroup/lv_swap LANG=fr_FR.UTF-8  
SYSFONT=latarcyrheb-sun16  KEYBOARDTYPE=pc KEYTABLE=fr-latin9  
crashkernel=auto rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet  
      initrd /initramfs-3.10.2.img  
title CentOS (2.6.32-358.14.1.el6.x86_64)  
      root (hd0,0)  
      kernel /vmlinuz-2.6.32-358.14.1.el6.x86_64 ro  
root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD  
rd_LVM_LV=VolGroup/lv_swap LANG=fr_FR.UTF-8 SYSFONT=latarcyrheb- 
sun16  KEYBOARDTYPE=pc KEYTABLE=fr-latin9 crashkernel=auto 
rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet  
      initrd /initramfs-2.6.32-358.14.1.el6.x86_64.img  
title CentOS (2.6.32-358.11.1.el6.x86_64)  
      root (hd0,0)  
      kernel /vmlinuz-2.6.32-358.11.1.el6.x86_64 ro  
root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD  
rd_LVM_LV=VolGroup/lv_swap LANG=fr_FR.UTF-8 SYSFONT=latarcyrheb- 
sun16  KEYBOARDTYPE=pc KEYTABLE=fr-latin9 crashkernel=auto 
rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet  
      initrd /initramfs-2.6.32-358.11.1.el6.x86_64.img  
title CentOS (2.6.32-358.6.2.el6.x86_64)  
      root (hd0,0)  
      kernel /vmlinuz-2.6.32-358.6.2.el6.x86_64 ro  
root=/dev/mapper/VolGroup-lv_root rd_NO_LUKS rd_NO_MD  
rd_LVM_LV=VolGroup/lv_swap LANG=fr_FR.UTF-8 SYSFONT=latarcyrheb- 
sun16  KEYBOARDTYPE=pc KEYTABLE=fr-latin9 crashkernel=auto 
rd_LVM_LV=VolGroup/lv_root rd_NO_DM rhgb quiet  
      initrd /initramfs-2.6.32-358.6.2.el6.x86_64.img
Avec un éditeur de texte, vous pouvez enlever le mot « quiet » pour le noyau concerné. Enregistrez votre modification qui sera prise en compte au prochain démarrage.
Lors du démarrage du système, notez les messages du noyau précédant le kernel panic. Notez toutes les informations que vous considérez utiles.

4. Analyse du matériel

Le noyau peut être sain et tombé en raison d’un composant matériel défaillant. Vous pouvez allumer l’ordinateur et l’amorcer avec un système « Live » GNU/Linux.
Vous pouvez lancer des logiciels comme par exemple Memtest86+ pour effectuer un diagnostic complet de la mémoire.
Pour plus d’informations, consultez le chapitre Dépannage matériel.
La lecture des journaux du système situé dans /var/log peut aussi donner des pistes :
Distribution
Nom du journal
Description
Debian 7
Syslog
messages
kern.log
dmesg
Journal standard du système.
Informations générales du système.
Informations du noyau Linux.
Affiche la mémoire tampon de message du noyau.
Ubuntu 12.04
syslog
kern.log
dmesg
Journal standard du système.
Informations du noyau Linux.
Affiche la mémoire tampon de message du noyau.
CentOS 6
messages
dmesg
Informations générales du système.
Affiche la mémoire tampon de message du noyau.
Concernant CentOS 6, il manque le journal kern.log. Vous pouvez modifier avec un éditeur de texte le fichier de configuration du service journaux d’événements /etc/rsyslog.conf pour créer le journal /var/log/kern.log.
Il suffit de modifier la ligne :
#kern.*                                       /dev/console 
Et d’ajouter en dessous :
kern.*                                       /var/log/kern.log
Comme ceci :
# cat /etc/rsyslog.conf  
# rsyslog v5 configuration file  
 
# For more information see /usr/share/doc/rsyslog- 
*/rsyslog_conf.html  
# If you experience problems, see  
http://www.rsyslog.com/doc/troubleshoot.html  
...
#### RULES ####  
 
# Log all kernel messages to the console.  
# Logging much else clutters up the screen.  
#kern.*                                       /dev/console  
kern.*                                        /var/log/kern.log  
...
Après, vous devez paramétrer la rotation du journal dans le dossier /etc/logrotate.d/. Pour cela, créez avec un éditeur de texte un nouveau fichier que vous appellerez kernel puis entrez-y ces lignes :
/var/log/kernel.log {  
    missingok  
    notifempty  
    size 30k  
    yearly  
    create 0600 root root  
} 
Enregistrez le fichier et redémarrez le service rsyslog :
# service rsyslog restart  
Arrêt de l’enregistreur de journaux du système :           [  OK  ]
Démarrage de l’enregistreur de journaux du système :      [  OK  ]

5. Analyse des logiciels

a. Chargeur d’amorçage

Assurez-vous que la configuration de votre chargeur d’amorçage est correcte car c’est une cause fréquente.
Pour plus d’informations, consultez le chapitre Séquence d’amorçage.

b. Origine du noyau

Si votre noyau provient d’une mise à jour de la distribution, consultez :
  • le code source et aussi le journal des modifications (changelog),
  • les rapports de bugs,
  • les listes de diffusion (mailing lists),
  • les documentations officielles ou non officielles,
  • les IRC (Internet Relay Chat),
  • les forums...
Si le noyau est compilé par vos soins, reprenez les différentes étapes pour déceler une éventuelle erreur dans la configuration du noyau. Analysez le fichier .config.

c. Modules

Avez-vous un module du noyau (Loadable kernel modules) défaillant ? Déchargez le module concerné et testez à nouveau. Lisez les journaux système du tableau précédent.
Pour plus d’informations, consultez le chapitre Loadable Kernel Modules.

6. Recherche de solutions

Tout en restant critique sur la qualité et la confiance à accorder aux informations collectées sur Internet, vous pouvez rechercher si le problème est connu ou non. Avez-vous trouvé des solutions ? Avez-vous trouvé juste une solution de contournement (workaround) ?
Analysez les solutions et comprenez le déroulement de la procédure. N’intervenez pas en aveugle. Testez ensuite les solutions une par une.

7. Appliquer la solution

Dès que vous avez compris ce qui passe, que vous avez vérifié la solution, alors vous pouvez l’appliquer. Et n’oubliez pas de créer une documentation sur le sujet.

Aucun commentaire :

Enregistrer un commentaire