| 
 ![[Foto dell'autore]](../../common/images/Guido-S.gif)  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>
 
 Contenuto:
 | 
 
Un watchdog hardware ed un pulsante per spegnere il PC
 ![[Illustrazione]](../../common/images/article239/final_circuit_th.gif) 
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]](../../common/images/article239/linuxpcwd120_schematic_th.gif) 
 
     relè a 500 Ohm:
     ![[relè a 500 Ohm]](../../common/images/article239/linuxpcwd500_schematic_th.gif) 
 
     
     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]](../../common/images/article239/ne555_schematic.gif) 
 
     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
    
    
  
 
Discussioni su quest'articolo
ogni articolo possiede una sua pagina di discussione, da questa pagina puoi inviare un commento o leggere quelli degli altri lettori:
2002-07-28, generated by lfparser version 2.25