genpowerd
scrive FAIL
in /etc/powerstatus
e manda un segnale SIGPWR
a init
.init
(in base alla configurazione /etc/inittab
e al contenuto di /etc/powerstatus
) esegue /etc/init.d/powerfail start
./etc/init.d/powerfail
lancia uno shutdown -h $failtime
.$failtime
, si segnala a init
di passare a runlevel 0. L'ultima azione eseguita a runlevel 0 è /etc/init.d/ups-monitor poweroff
./etc/init.d/ups-monitor
è un link a genpower
, che al poweroff reagisce spengendo l'inverter dell'UPS.Questa procedura ha un punto debole: se al momento finale la corrente è tornata, l'UPS ignora il segnale di inverter kill e quindi il PC completa il poweroff e non si riaccende più.
genpowerd
scrive OK
in /etc/powerstatus
e invia un SIGPWR
a init
.init
(in base alla configurazione /etc/inittab
e al contenuto di /etc/powerstatus
) esegue /etc/init.d/powerfail stop
.
Configurato il programma in /etc/genpowerd.conf
aggiungendo anche la definizione del nostro UPS (PowerWare 3115):
ENABLED=true UPSPORT=/dev/ttyS1 UPSSTAT=/var/run/upsstat UPSTYPE=powerware # PowerWare powerware --- /ST 5 /CTS --- CAR
— | No cable power required |
---|---|
/ST | To kill power set TRANSMIT DATA to off (negative voltage) |
5 | Mantain kill signal for 5 seconds |
/CTS | Monitor the power with CTS line (normally low) |
— | Ignore battery low |
CAR | When cable is connected to th UPS, DCD is high |
Il gruppo di continuità PowerWare 3115 fornisce questi segnali tramite la seriale:
OK | FAIL | LowBatt | |
---|---|---|---|
CAR | High | High | Low |
CTS | Low | High | High |
Mandando un segnale 0 sulla linea Transmit Data per qualche secondo (portando il segnale a zero) e se si è in situazione di power fail, l'UPS toglie alimentazione all'host, quando la tensione in ingresso viene ripristinata l'UPS alimenta nuovamente l'host.
In caso di POWER FAIL viene avviata la procedura di halt, tuttavia esiste una race condition in /etc/init.d/halt
.Se la seguente istruzione
/etc/init.d/ups-monitor poweroff
viene eseguita proprio nel momento in cui la corrente è ritornata, l'UPS ignora il segnale di poweroff. In questo caso lo script prosegue e spenge la macchina definitivamente.
Se i volumi RAID software sono avviati dal raid autodetect del kernel è impossibile fermarli in modo pulito prima di spengere l'UPS. Infatti per lanciare genpowerd -k
bisogna che il disco sia montato, e appena lo si lancia la corrente se ne va.