Oh my watchdog

Le watchdog, littéralement chien de garde, est une protection destinée généralement à redémarrer le système, si une action définie n'est pas exécutée dans un délai imparti.
Voici comment l'activer sur des ordinateurs fonctionnant sous Linux à base de processeur Intel ou pour les RaspberryPi.

Prérequis

Il faut un système ayant un watchdog, il est possible de faire un watchdog logiciel mais cela ne couvrira pas tous les cas, tel que le crash système.

Chipset Intel

Pour les processeurs Intel, il est présent sur tous les chipsets à base de ICH, il suffit de charger le module iCTO_wdt.
Ce qui produit les lignes suivantes dans les messages du noyau :

[39401.100017] iTCO_vendor_support: vendor-support=0
[39401.111655] iTCO_wdt: Intel TCO WatchDog Timer Driver v1.10
[39401.111684] iTCO_wdt: Found a Lynx Point TCO device (Version=2, TCOBASE=0x1860)
[39401.114203] iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0)

Selon le modèle, le module peut détecter d'autres types de périphérique :

[ 25.912615] iTCO_wdt: Found a Bay Trail SoC TCO device (Version=3, TCOBASE=0x0460)
[ 25.751022] iTCO_wdt: Found a ICH6-M TCO device (Version=2, TCOBASE=0x0860)

RaspberryPi

Pour raspberry, il suffit de charger le module bcm2708_wdog en ajoutant ledit module dans le fichier /etc/modules.

[   12.450346] bcm2708 watchdog, heartbeat=10 sec (nowayout=1)

Vérification

Dans tous les cas, un périphérique doit apparaître dans /dev

ls -l /dev/watchdog*
crw------- 1 root root 10, 130 déc.  20 20:07 /dev/watchdog

Mise en place

Pour la plupart des distrubtions Linux, un logiciel nommé watchdog est présent dans les dépots et permet d'activer le mécanisme.

Sous debian, il suffit d'ajouter dans /etc/watchdog.conf la ligne suivante :

watchdog-device = /dev/watchdog

Une fois le service lancé, le programme va écrire de manière régulière pour qu'un reboot matériel ne soit pas executé par le watchdog.

Tests

Une des techniques les plus simples consiste à crasher le kernel, si le système est relancé alors le watchdog fonctionne.

Je vous recommande fortement de fermer les documents actifs et de couper tous les services qui risqueraient de ne pas apprécier (base de données, par exemple).
Pour faire un kernel panic, le plus simple est de faire cette action :

echo c > /proc/sysrq-trigger

Vous pouvez aussi désactiver les partitions swap et éxectuer une fork bomb, en théorie le système devrait finir par crasher :

swapoff -a
:(){ :|:& };:

L'option nowayout

Quasiment tous les modules de watchdog ont une option nommée nowayout, cette option signifie que le watchdog ne sera pas désactivé, même si le service watchdog est amené à être arrêté (arrêt du service, ou kill du processus).

Pour activer cette option sur mon raspberry, je charge le module de cette manière :

# cat /etc/modules
bcm2708_wdog nowayout=1

Haut de page