Copyright © 2003 Graham Jenkins
Cette histoire a en fait commencé à la suite de l'appel d'un utilisateur. Il avait quelques problèmes pour consulter la base de données pour l'application ACME et souhaitait que j'y jette un coup d'œil. Comme la totalité de ce serveur était mise en miroir, le scénario le plus probable était que les fichiers journaux d'archivage n'avaient pas été déplacés vers le stockage secondaire. Je pensais résoudre ce problème en quelques minutes. Malheureusement, il fallut plusieurs heures : il semblait vraiment que les disques étaient perdus des deux côtés des miroirs.
Quelle était l'erreur ? Les éléments du miroir étaient sur des disques séparés connectés à des contrôleurs séparés : il n'y avait aucun signe de coupure d'alimentation ou de tremblement de terre majeurs. Nous ne pouvions pas non plus accuser l'équipe de nettoyage de nuit d'avoir débranché des câbles d'alimentation pour brancher leur matériel.
La réponse est que nous n'avons pas perdu les deux côtés en même temps. Nous avions effectivement perdu un côté une semaine auparavant. Ma société dispose d'un excellent système de surveillance et d'alarme pour détecter de tels événement, mais nous avions oublié de prévenir l'équipe de surveillance que ce serveur était passé de l'état de «construction» à celui de «production». Voilà une situation qu'il vaut mieux ne pas reproduire !
Quelques semaines auparavant, mon ordinateur domestique avait fait connu sa seconde panne de disque en six mois. Heureusement, le disque put être remplacé encore sous garantie. Toutefois, je décidai de mettre en miroir tout son contenu sur un disque additionnel.
Je me demandai ensuite comment je saurais si une partition sur un disque devenait inacessible. Impossible de justifier la liaison de mon ordinateur personnel au système d'alarme de ma société.
D'aucuns m'auraient conseillé de contrôler le journal des messages, de lire les messages «root» Ce n'est que pure théorie. Pour mes proches, les «messages» ne sont rien de plus que des notes sur un Post-It et les messages électroniques ceux qu'on lit sur Hotmail. Et ils sont les principaux utilisateurs de ma machine en mon absence.
La solution ici s'est avérée être un mécanisme consistant faire clignoter la diode Arrêt défilement (Scroll Lock) pendant un intervalle d'une seconde tous les dix secondes. Si une partition n'est pas mise en miroir, la diode reste constamment allumée. Aucun matériel additionnel, très simple à comprendre. Ce que nous avons consiste en un chien de garde simple, qui «aboie» périodiquement pour indiquer qu'il est encore actif, et «aboie» sans interruption en cas d'incident.
Comment procéder pour faire clignoter la diode «Arrêt défilement» ? Si vous utilisez Xwindow, c'est facile :
xset led 3 pour l'allumer
xset -led 3 pour l'éteindre
Ces commandes fonctionnent même si Arrêt défilement est actif ou si votre écran est éteint - pourvu que vous soyez connecté.
Si personne n'est connecté si vous n'utilisez pas Xwindow, ce système n'aura aucune efficacité. Dans ce cas, vous devez installer un programme comme «blinker», qui fait partie de la suite «morse2led» disponible sur le site web http://node.to.
Voici ce que pouvez voir en saisissant cat/proc/mdstat sur une machine dont le miroir est «brisé» :
Personalities : [raid1] read_ahead 1024 sectors md2 : active raid1 hda6[0] hdb6[1](F) 1959808 blocks [2/1] [U_] md1 : active raid1 hda5[0] hdb5[1] 5863616 blocks [2/2] [UU] md0 : active raid1 hda3[1] hdb3[0] 104320 blocks [2/2] [UU] unused devices: [none] |
Et voici notre programme qui détecte un dysfonctionnement (en recherchant un caractère de soulignement dans ces lignes contenant « blocks »), puis active le clignotement de la diode Arrêt défilement en conséquence. Il s'exécutera sous la plupart des interpréteurs de commande (shells de type Bourne et a été étendu à la détection de deux conditions d'alarme supplémentaires. Vous pouvez les ajouter si elles vous conviennent.
#!/bin/sh # ledblink System monitor. Scroll-lock light will remain on if any faults. # Graham Jenkins, IBM GSA, July 2003. PATH=/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin On=1 while : ; do # Utilisez 'blinker' s'il fonctionne, blinker -d `expr $On \* 1000` s 2>/dev/null || # sinon utilisez 'xset' pour faire clignoter ( xset led 3 && sleep $On && xset -led 3 ) # le témoin Arrêt-défilement. sleep `expr 10 - $On` On=10 # Règle le temps d'allumage sur 10 secondes. # # Raid status grep blocks /proc/mdstat | grep _ >/dev/null 2>&1 && continue # # Filesystem capacity df -x iso9660 |tr -d '%'|awk '{if (NR > 1) if ($5 > 90) exit 1}' || continue # # Swap usage swapon -s | awk '{ if (NR > 1) { Size=Size+$3; Used=Used+$4 } } END { if (Used*100/Size > 70 ) exit 1 }' || continue # On=1 # S'il n'y a pas de problèmes done # réinitialisez le temps d'allumage à 1 seconde. |
Si vous êtes satisfait du fonctionnement de ledblink uniquement lorsque quelqu'un a ouvert une session Xwindow, c'est facile. Si votre machine a un répertoire xinitrc.d, ajoutez-y le script suivant. Sinon, placez la ligne non commentée dans le fichier xinitrc.
#!/bin/sh # ledblink Placez ce fichier dans : /usr/X11R6/lib/X11/xinit/xinitrc.d # and rendez le lisible et executable pour tout un chacun. [ -x /usr/local/bin/ledblink ] && /usr/local/bin/ledblink & |
Si vous avez le programme blinker, vous pouvez démarrer ledblink au moment de l'amorçage avec le script suivant.
#!/bin/sh # ledblink Start/stop the 'ledblink' system monitor program. # Graham Jenkins, IBM GSA, July 2003. # # chkconfig: 2345 98 7 # description :: démarre/arrête le programme 'ledblink' de surveillance système. case "$1" in start) if [ -x /usr/local/bin/ledblink ] ; then [ -s /var/run/ledblink.pid ] && exit 0 echo "Demarrage du programme 'ledblink' de surveillance système .." /usr/local/bin/ledblink & echo $! >/var/run/ledblink.pid fi ;; stop) if [ -n "`cat /var/run/ledblink.pid`" ] ; then echo "Arrêt du programme 'ledblink' de surveilllance système .." kill `cat /var/run/ledblink.pid` rm /var/run/ledblink.pid fi ;; esac |
Graham est un spécialiste d'Unix chez IBM Global Services, en Australie. Il vit à Melbourne, et a construit et administré un grand nombre de variantes de systèmes libres et propriétaires sur différentes plates-formes matérielles.
Copyright © 2003, Graham Jenkins.
Copying license http://www.linuxgazette.com/copying.html
Paru dans le n°93 de la Linux Gazette d'août 2003.
Traduction française par Régis Perdreau <regis.perdreau CHEZ tiscali POINT fr>.
Relecture de la traduction française par Joëlle Cornavin <jcornavi CHEZ club-internet POINT fr>.