[LinuxFocus-icon]
LinuxFocus article number 239
http://linuxfocus.org

[Foto dell'autore]
Guido Socher (homepage)

L'autore:

Guido adora Linux in quanto è sempre interessante scoprire come i computer funzionino veramente. Linux per la sua modularità e la sua archietttura open è la migliore scelta per questo tipo di avventure.



Tradotto in Italiano da:
Toni Tiveron <toni/at/amicidelprosecco.com>

Un watchdog hardware ed un pulsante per spegnere il PC

[Illustrazione]

Premessa:

L'articolo sui display LCD spiega come costruire un piccolo pannello LCD basato su microprocessore e le sue innumerevoli possibilità. Alcune volte non vi servono tutte queste funzionaltà. Il materiale che andremo ad utlizzare per questo articolo è ancor più economico (sebbene il pannello LCD fosse già di per sé un ottimo affare) ed include due importanti caratteristiche già presenti nel pannellino LCD:

  • Un pulsante per spegnere propriamente il server
  • Una funzionalità di watchdog per monitorare il server
L'insieme dei componenti è costituito da materiale di facile reperibità. Non avrete di certo difficoltà a trovare questo materiale. Il costo complessivo si aggira sui 5 Euro.
_________________ _________________ _________________

 

Che cosa è un WatchDog?

WatchDog in termini informatici è uno strumento hardware molto affidabile che assicura che il computer sia costantemente in uno stato di buon funzionamento. Potete trovare questo genere di componenti, per esempio, sul Pathfinder che ha esporato Marte (chi mai manderebbe una persona su Marte per premer il pulsante di reset del Pathfinder??) o su server di fascia molto alta e costosa.

L'idea che sta alla base di questo watchdog è molto semplice: il computer deve poter parlare di quando in quando con la scheda watchdog per comunicargli che è presente e vivo. Se questo "dialogo" non avviene, la scheda deve produrre un reset hardware del pc stesso.

Una nota sui server Linux. Essi dovrebbero esser in grado di lavorare ininterrottamente per svariati mesi, probabilmente un paio d'anni, senza mai bloccarsi. Se voi avete una macchina che si blocca spesso, per esempio una volta alla settimana, c'è qualcosa che non va, e di sicuro la scheda watchdog non sarà la vostra soluzione. Dovreste controllare di non possedere della RAM difettosa (memtest86.com potrebbe aiutarvi a capirlo), oppure il vostro processore si surriscalda, i cavi IDE potrebbero esser troppo lunghi, un terminatore SCSI potrebbe non essere correttamente installato...

Dato che Linux è così affidabile da poter funzionare un intero anno senza alcun problema a cosa serve un watchdog? Beh la risposta è ovvia: renderlo ancora più affidabile. Vi è anche da considerare un problema di tipo "umano" riugardo ciò. Un server che non ha mai avuto disservizi per un anno, è un oggetto sconosciuto per qualsiasi persona. Se dovesse avere un problema, e nessuno ricordasse dove si trova? Potrebbe pure accadere che si blocchi durante il periodo delle vacanze natalizie, quando tutti sono a casa. Ecco, questi sono alcuni dei casi in cui il watchdog risulta essere utile.

Un watchdog, tuttavia, non risolve tutti i problemi. Non può nulla contro i guasti hardware. Se equipaggiate il vostro server con un watchdog, dovreste almento assicurarvi di avere correttamente dimensionato la vostra macchina ed averla propriamente raffreddata.  

Come utilizzare il watchdog

Il watchdog che noi qui si realizzerà è studiato solo per garantire che i programmi in user space siano in esecuzione. Per avere un sistema VERAMENTE affidabile dovete tenere sott'occhio i vostri applicativi (web server, database,...) e le vostre risore di sistema (per esempio: l'utilizzo dei dischi, la temperatura del processore). Per ottenere questo tipo di controllo potete ricorrere ad altri applicativi in user space, come per esempio la crontab. Tutto questo lo potete trovare spiegato in un precedente articolo LCD control panel article. Per questo non mi addentrerò in dettagli approfonditi.

Volete degli esempi? Qui potete trovare un piccolo script che vi permette di monitorare lo stato della rete, l'uso dello swap e l'occupazione del disco.


#!/bin/sh
PATH=/bin:/usr/bin:/usr/local/bin
export PATH
#
# Monitor the disk
# ----------------
# check if any of the partitions are more than 80% full.
# (crontab will automatically send an e-mail if this script
# produces some output)
df | egrep ' (8.%|9.%|100%) '
#
# Monitor the swap
# A server should normally be dimensioned such that it
# does not swap. Swap space should therefore be constant
# and limited.
# ----------------
# check if more than 6 Mb of swap are used
swpfree=`free | awk '/Swap:/{ print $3 }'`
if expr $swpfree \> 6000 > /dev/null ; then
    echo "$0 warning! swap usage is now $swpfree"
    echo " "
    free
    echo " "
    ps auxw
fi
#
# Monitor the network
# -------------------
# your _own_ IP addr or hostname:
hostn="linuxbox.your.supercomputer"
#
if ping -w 5 -qn -c 1 $hostn > /dev/null ; then
    # ok host is up
    echo "0" > /etc/pingfail
else
    # no answer count up the ping failures
    if [ -r /etc/pingfail ]; then
        pingfail=`cat /etc/pingfail`
    else
        # we do not handle the case where the
        # pingfail file is missing
        exit 0
    fi
    pingfail=`expr "$pingfail" "+" 1`
    echo "$pingfail ping failures"
    echo "$pingfail" > /etc/pingfail
    if [ $pingfail -gt 10 ]; then
        echo "more than 10 ping failures. System reboot..."
        /sbin/shutdown -t2 -r now
    fi
fi
# --- end of monitor script ---

Potete associare questo script ad una voce nella crontab:

1,15,30,45 * * * * /percorso/dello/script

 

L'hardware del watchdog

Non esiste un relè standard. Ogni produttore ha una propria piedinatura. Per quel che concerne il nostro circuito è importante conoscere il valore resistivo della bobina di eccitazione del relè. Potete trovare qui due implementazioni. Una per un relè da 5 Volt e 500 ohm, l'altra per un relè da 5 Volt e 120 ohm. Chiedete quale impedenza ha il relè che acquistate, o misuratelo con un ohmmetro. Potete ottenere una immagine più ampia dello schema con un semplice click.
relè da 120 Ohm:
[relè a 120 Ohm]
relè a 500 Ohm:
[relè a 500 Ohm]

Il pulsante di spegnimento è un pulsante che collega le linee CD e RST della porta seriale. Il pulsante sullo schema ha un aspetto strano, ma non ho trovato un simbolo più significativo all'interno di Eagle.

Non ho creato una lista specifica dei componenti. Potete vedere direttamente negli schemi il materiale che vi serve (mi raccomando di non dimenticare il connettore Canon DB9 ed il relativo cavo per la porta seriale). Per quel che concerne i diodi potete utilizzarne uno qualsiasi, per esempio un 1N4148. Personalmente vi consiglio il circuito con il relè a 500 ohm in quando non dovrete ricorrere alla resistenza R4 ed il condensatore da 2000uF (o da 2200 uF). Potete utilizzare un condensatore più piccolo per C1, per esempio da 1000uF.

Nota: per il relè a 120 ohm dovrete utilizzare esclusivamente un LED di colore rosso e per quello a 500 ohm uno di colore verde. Non sto scherzando. La motivazione và ricercata nel fatto che la caduta di tensione di un diodo LED di colore verde è più elevata di quella di uno rosso.
I layout dei circuiti stampati, in formato postscript ed eagle, per l'incisione della basetta sono inclusi nel pacchetto software che potete scaricare dal collegamento ipertestuale presente alla fine di questo articolo. Il software CAD Eagle per Linux lo potete trocare pressocadsoftusa.com.  

Come funziona il circuito

Tutto il circuito watchdog ruota attorno al chip NE555. Questo circuito integrato include in sè due operazionali differenziali, un FlipFlop e 3 resistenze da 5000 ohm cadauna per creare un riferimento per il differenziale. Quando il livello di segnale, presente al pin 6, supera i 2/3 del voltaggio di alimentazione, il FliFlop passa a stato logico 1.
[ne555]
Ora diamo un'occhiata allo schema elettrico. Utilizziamo il sengale RTS della porta seriale come alimentazione. La tensione fornita da una porta seriale è di +/- 10Volt, e quindi abbiamo bisogno di un diodo a monte del condensatore C1. Quest'ultimo viene caricato da una serie di rapidi inplusi, divenendo così una specie di batteria, in grado di far eccitare il relè. Il condensatore C2 viene caricato molto lentamente per mezzo della resistenza da 4.7 Mohm. Il transistor T1 scarica il condensatore C2 se si ha un ipulso sul segnale DTR della porta seriale. Se l'impulso DTR non arrivasse alla porta, perchè il computer si è bloccato, il condensatore C2 in circa 40 secondi supera la soglia dei 2/3 della tensione di alimentazione facendo sì che il FliFlop si attivi.

Il condensatore C1, il resistore R2, il diodo LED ed il relè sono dimensionati in modo che il relè possa venire eccitato per un breve periodo, grazie all'energia immagazzinata in C1, ma non abbiamo potenza sufficiente per tenere il relè nello stato di eccitazione. Dopotutto noi abbiamo solo bisogno che il relè "prema" per qualche secondo il "pulsante di reset".

Il diodo LED rimarrà accesso fino a che il server non inizierà a funzionare nuovamente, dopo che sia stato premuto il tasto di reset.

Come potete osservare dallo schema elettrico, è anche presente un pulsante per lo spegnimento collegato al segnale CD della porta seriale. Se lo tenete premuto per un poco (circa 15 secondi), il driver software implementato nel programma avvierà la procedura di spegnimento per mezzo del comando "shutdown -h now". La funzione di questo pulsante è solo per una normale manutenzione e non ha nulla a che fare con il nostro watchdog. Si tratta, insomma, di una funzione ulteriore.  

il software di controllo

Il sistema di gestione software è un piccolo programma in C che viene avviato automaticamente dagli script presenti in /etc/init.d/. Questo piccolo programma invia ogni 12 secondi un segnale al pin DTR della porta seriale RS232 e setta a stato logico il segnale RTS (vi ricordo che il nostro watchdog ha un timeout di 40 secondi). Se spegnete il vostro computer con le normali procedure, il programma porrà in stato logico 0 il segnale RTS ed invierà un ultimo impulso al segnale DTR. Il risultato di questa procedura è che il condensatore C1 sarà già scarico prima che il tempo di timeout possa scadere, levando così l'alimentazione al relè prima che esso possa eccitarsi e resettare il computer. In condizioni normali il nostro watchdog non interverrà. Per installare il software dovrete scompattare il file linuxwd-0.3.tar.gz, che potete scaricare da questa pagina. Scompattatelo, e digitate il comando
make
per compilarlo. Copiate l'eseguibile generato, linuxwd, nella cartella /usr/sbin. Modificate lo script linuxwd_rc (per le distribuzioni rehdat/mandrake, o linuxwd_rc_anydist per le altre distribuzioni), e definite la corretta porta seriale (ttyS1=COM2 o ttyS0=COM1). Copiate poi l'rc script in
/etc/rc3.d/S21linuxwd
e
/etc/rc5.d/S21linuxwd
, ed il gioco è fatto.  

Verifica delle funzionalità

Quando avrete terminato di assemblare tutto con il vostro saldatore è bene testiate il circuito prima di collegarlo al computer. Collegate il segnale, che dovrete collegare poi al pin di RST della porta ad un alimentatore in corrente continua da 9-10 Volt. Attendete 40-50 secondi. Dovreste sentire un lieve suono dovuto al relè che si eccita ed il LED dovrebbe accendersi. Il relè non dovrebbe restare permanentemente eccitato. Il LED, dal canto suo, dovrebbe restare acceso fintantochè non collegherete il segnale DTR all'alimentazione positiva.
Solo dopo aver verificato che tutto funzioni potrete collegare il circuito al computer. Il programma linuxwd possiede una modalità di test che fa in modo di interrompere l'invio dei segnali su DTR per simulare un sistema bloccato. Per fare questo digitate il seguente comando

linuxwd -t /dev/ttyS0

per eseguire linuxwd in modalità test (utilizzare /dev/ttyS1 se avete collegato il circuito alla COM2).  

Installazione dell'hardware

L'interfaccia RS232 ha la seguente piedinatura:
9 PIN D-SUB MALE

9 PIN D-SUB MALE at the Computer.

9 PIN 25 PIN Nome Tipo Descrizione
1 8 CD input (Carrier Detect), controllo della portante dalla linea
2 3 RXD input (Receive Data), ricezione dati
3 2 TXD output (Trasmission Data), trasmissione dati
4 20 DTR output (Data Terminal Ready), pronto per trasmettere dati
5 7 GND -- Massa
6 6 DSR input (Data Set Ready), pronto a ricevere i dati
7 4 RTS output (Request to Send), disponibilità a trasmettere
8 5 CTS input (Clear to Send), consenso alla trasmissione
9 22 RI input (Ring Indicator), indica la presenza sulla linea del segnale di chiamata

(Nota del traduttore: al seguente link potrete trovare una spiegazione sulla porta RS232: http://www.vincenzov.net/tutorial/rs232/rs232.htm)

Collegare il circuito alla porta RS232 dovrebbe essere semplice. Per collegare i cavi del reset al relè dovrete trovare i fili che sono collegati al pulsante di reset del vostro computer. Collegate i cavi del relè in parallelo a questo pulsante.
 

Conclusioni

Un watchdog certamente non può garantire al 100% di avere un sistema affidabile, ma di certo aggiunge un ulteriore livello di sicurezza. Un problema per esempio potrebbe essere creato da una situazione in cui il controllo del filesystem non termini propriamente in seguito ad un reset. I nuovi filesystem che posseggono sistemi journaled possono aiutare molto in questi casi, anche se io non li ho ancora testati. Il watchdog che abiamo qui presentato è molto economico, non molto complesso da costruire e paragonabile a molti prodotti commerciali.  

Bibliografia



Webpages maintained by the LinuxFocus Editor team
© Guido Socher
"some rights reserved" see linuxfocus.org/license/
http://www.LinuxFocus.org
Translation information:
en --> -- : Guido Socher (homepage)
en --> it: Toni Tiveron <toni/at/amicidelprosecco.com>

2005-01-14, generated by lfparser_pdf version 2.51