|
LinuxFocus article number 239
http://linuxfocus.org
|
|
|
|
|
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
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 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.
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 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
2005-01-14, generated by lfparser_pdf version 2.51