Annexe B. En cas de blocage...

1. Méthode
2. Blocage d'un service
3. Blocage à cause d'un processus
4. Blocage au boot ou problème avec le boot loader

1. Méthode

Tout d'abord, il faut perdre le réflexe de rebooter la machine à chaque fois qu'un problème ou un blocage intervient. Si cette méthode à fait ses preuves avec Windows, ce n'est pas une bonne méthode pour Linux. La méthode à adopter dépend de ce qui est bloqué, comme expliqué ci-dessous.

2. Blocage d'un service

Quand un service tel qu'un serveur Web, un serveur mail, etc... est bloqué ou ne marche plus comme il devrait, la première chose à faire est de consulter les logs du service concerné. Le service a parfois ses propres fichiers de logs (par exemple, le répertoire /var/log/apache/ regroupe tous les fichiers de logs d'Apache) ou il écrit dans le fichier de log générique /var/log/daemon.log. Les messages écrits dans les fichiers de logs ne sont pas toujours facile à comprendre, mais c'est LE moyen de diagnostiquer un problème avec un service.

Pour suivre en direct les messages qui s'écrivent dans un fichier de log (par exemple le fichier /var/log/daemon.log) :

% tail -f /var/log/daemon.log

Une des solutions peut être de redémarrer le service. Par exemple, pour redémarrer Apache :

# /etc/init.d/apache restart
Reloading apache modules.

3. Blocage à cause d'un processus

Si le processus peut être identifié

Il peut arriver qu'un programme lançé par un utilisateur plante et se mette à utiliser toutes les ressources processeur disponibles. Dans ce cas, il faut identifier le PID du programme en cause avec le programme top et tuer le processus en question avec la commande kill, dont l'utilisation était expliquée au Chapitre 1.

Dans certains cas, une solution plus radicale est nécessaire : tuer d'un seul coup tous les processus appartenant à un utilisateur. Pour cela, il faut utiliser le programme slay qui n'est pas installé par défaut :

# aptitude install slay

Pour tuer tous les processus de l'utilisateur toto :

# slay toto

Quand on ne peut plus accéder à une console locale

Dans certains cas, comme par exemple quand le serveur graphique se bloque, on ne peut plus accéder à une console. Si l'ordinateur est en réseau, il faut avoir le réflexe de s'y connecter à distance par ssh pour tuer les processus bloquants.

Les touches magiques

En cas de blocage grave du système, et si toutes les solutions précédentes n'ont pas fonctionné, il existe une ultime méthode : les touches magiques.

Dans un premier temps, essayez d'utiliser les combinaisons de touches susceptibles de tuer le processus bloquant :

  • Alt-Impr. écran-k tue tous les processus de la console courante,

  • Alt-Impr. écran-e envoie le signal TERM à tous les processus du système, sauf le processus père init,

  • Alt-Impr. écran-i envoie le signal KILL (plus autoritaire que le précédent) à tous les processus du système, sauf init.

Si ces combinaisons de touches ne permettent pas de récupérer une console sur le système, il faut alors se résoudre à rebooter le système en utilisant successivement les combinaisons de touches suivantes à quelques secondes d'écart :

  1. Alt-Impr. écran-s (synchronise les disques durs)

  2. Alt-Impr. écran-u (démonte les systèmes de fichiers)

  3. Alt-Impr. écran-b (reboote le système)

4. Blocage au boot ou problème avec le boot loader

Vous avez mal configuré votre boot loader et vous n'arrivez même plus à démarrer ? Vous avez réinstallé Windows et il a écrasé LILO ou Grub ? Vous avez mal configuré GDM et il bloque l'ordinateur dès le lancement ? Rassurez-vous, vous n'aurez pas à tout réinstaller ; suivez la procédure suivante pour vous en sortir :

  1. Suivez toutes les instructions du Chapitre 7 comme si vous recommenceriez la procédure d'installation.

  2. Une fois que vous avez choisi votre clavier, passez sur la deuxième console avec la combinaison de touches habituelle et appuyez sur Entrée pour activer la console.

  3. Montez votre partition Linux racine :

    • si elle est sur un disque IDE :

      # mkdir /mnt/root
      # mount /dev/ide/host0/bus0/targetX/lun0/partY /mnt/root
      

      /dev/ide/host0/bus0/targetX/lun0/partY représente le disque dur où se trouve votre partition racine en « notation » devfs. Voilà quelques exemples de correspondance entre la notation traditionnelle et la notation devfs qui vous permettront de comprendre comment ça marche :

      Tableau B.1. 

      Notation traditionnelle Notation devfs
      /dev/hda1 /dev/ide/host0/bus0/target0/lun0/part1
      /dev/hda2 /dev/ide/host0/bus0/target0/lun0/part2
      /dev/hdb2 /dev/ide/host0/bus0/target1/lun0/part2
      /dev/hdc5 /dev/ide/host0/bus0/target2/lun0/part5

    • si elle est sur un disque SATA ou SCSI :

      # mkdir /mnt/root
      # mount /dev/scsi/host0/bus0/targetX/lun0/partY /mnt/root
      

      X désigne le numéro de votre disque SATA ou SCSI et Y désigne le numéro de votre partition Linux racine.

  4. Demandez au système que le répertoire racine devienne /mnt/root/ :

    # chroot /mnt/root
    

    Vous vous retrouvez alors dans votre système de fichiers habituel.

  5. Pour plus de confort, lancez votre shell habituel :

    # zsh
    
  6. Vous pouvez alors faire toutes les manipulations nécessaires à la réparation, par exemple éditer /boot/grub/menu.lst avec vim.

  7. Une fois que la réparation est terminée, délogguez-vous deux fois pour retrouver votre prompt initial et rebootez le système avec la commande reboot.