terça-feira, 27 de setembro de 2016

Como gerenciar nobreak no Ubuntu e CentOS

Se você tem um pequeno servidor em casa ou no trabalho, seguramente não vai querer que quedas repentinas de energia estraguem ou façam com que você perca seus arquivos ou danifique seu sistema operacional.


Hoje em dia, com sistemas de arquivos com "journaling" (log de todas as alterações antes de escrever os dados no disco), como é o caso do ext4 e outros, é difícil que os dados sejam corrompidos em razão de travamento ou quedas de energia. Difícil, mas não impossível.

Por isso, é interessante ter o servidor ou mesmo seu NAS (Network-Attached Storage) ligado a um nobreak. Mas a não ser que você esteja por perto quando acabar a energia, para que possa fazer o desligamento manual do computador, pode não adiantar muito, ainda que você tenha um nobreak, porque assim que acabar a bateria do nobreak o computador será desligado abruptamente.

Além disso, esse esgotamento da bateria não é nem um pouco saudável para ela, que por conta de sucessivos "esgotamentos" terminará exigindo substituição rapidamente. Por isso, você deve evitar ao máximo que sua bateria seja completamente esgotada.



Para tanto, mesmo com nobreaks não profissionais, como por exemplo um antigo APC Back UPS ES 600, desde que tenha porta de comunicação, é possível configurar seu servidor para desligar automaticamente (e suavemente), tão-logo seja detectada queda de energia pelo nobreak.

O nobreak citado, por exemplo, já vem com um cabo USB para fazer a conexão com o computador.



O daemon (ou "serviço") que se encarregará da tarefa no seu servidor é o apcupsd.

Para instalar no Ubuntu:
apt-get install apcupsd
No CentOS, você precisará do repositório EPEL. Instruções aqui.

Depois:
yum install apcupsd usbutils
chkconfig apcupsd on
Após conectar o nobreak com o cabo USB, veja se ele é reconhecido:
me@myserver:~$ lsusb
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 006 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 002: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Em caso positivo, ele será identificado por um dispositivo em /dev/usb:
me@myserver:~$ ls -l /dev/usb
total 0
crw------- 1 root root 180, 0 Sep 27 19:04 hiddev0
Agora edite o arquivo de configuração (Ubuntu e CentOS):
nano /etc/apcupsd/apcupsd.conf
E ajuste, no mínimo, as seguintes opções:
UPSNAME NomeDoNobreak
UPSCABLE usb
UPSTYPE usb
DEVICE /dev/usb/hiddev0
POLLTIME 60
No Ubuntu:
nano /etc/default/apcupsd
E ajuste a seguinte opção:
ISCONFIGURED=yes
Agora assegure-se de que o serviço está sendo executado:

No Ubuntu e CentOS:
service apcupsd start
Se tudo correu bem, você já conseguirá exibir o status do nobreak pelo comando:
me@myserver:~$ apcaccess status
APC      : 001,036,0910
DATE     : 2016-09-27 22:15:24 -0300 
HOSTNAME : mtserver
VERSION  : 3.14.10 (13 September 2011) debian
UPSNAME  : BackUPS600
CABLE    : USB Cable
DRIVER   : USB UPS Driver
UPSMODE  : Stand Alone
STARTTIME: 2016-09-27 19:05:06 -0300 
MODEL    : Back-UPS ES 600P 
STATUS   : TRIM ONLINE 
LINEV    : 225.0 Volts
LOADPCT  :  17.0 Percent Load Capacity
BCHARGE  : 100.0 Percent
TIMELEFT :   2.8 Minutes
MBATTCHG : 5 Percent
MINTIMEL : 3 Minutes
MAXTIME  : 11 Seconds
SENSE    : Medium
LOTRANS  : 176.0 Volts
HITRANS  : 264.0 Volts
ALARMDEL : 30 seconds
BATTV    : 13.8 Volts
LASTXFER : No transfers since turnon
NUMXFERS : 0
TONBATT  : 0 seconds
CUMONBATT: 0 seconds
XOFFBATT : N/A
SELFTEST : NO
STATFLAG : 0x0700000A Status Flag
SERIALNO : 5B1217T06246 
BATTDATE : 2012-04-25
NOMINV   : 220 Volts
NOMBATTV :  12.0 Volts
NOMPOWER : 360 Watts
FIRMWARE : 897.Q3 .D USB FW:Q3
END APC  : 2016-09-27 22:15:55 -0300
A princípio, já está tudo funcionando. É só tirar o nobreak da tomada e fazer o teste.

Para conseguir fazer o teste rapidamente, pode ser que seja necessário alterar a opção abaixo, a fim de que o nobreak dispare a ordem para o computador desligar mais rapidamente:

Arquivo /etc/apcupsd/apcupsd.conf:
TIMEOUT 1
Isso significa que após 01 segundo da notícia do desligamento da energia do nobreak, o apcupsd já iniciará o processo de desligamento do computador.

Aliás, dependendo do seu nobreak, se ele for bem simples mesmo e não forneça informações sobre a percentagem da bateria etc., pode ser que você precise deixar essa opção TIMEOUT habilitada permanentemente, obviamente na quantidade de segundos desejada.
Ao fazer o teste de queda de energia, você poderá acompanhar os eventos recebidos pelo serviço apcupsd com:
tail -f /var/log/apcupsd.events
Quando o nobreak for desconectado da energia, já aparecerá:
2016-09-27 19:01:40 -0300  Power failure.
E assim que for esgotado o tempo limite da bateria ou algum outro critério definido no arquivo de configuração, o serviço dirá:
2016-09-27 19:01:46 -0300  Reached remaining time percentage limit on batteries.
2016-09-27 19:01:46 -0300  Initiating system shutdown!
E pronto, seu computador será desligado suavemente.

Após o desligamento do computador, o próprio nobreak será totalmente desligado, a fim de preservar a bateria. É a chamada "operação killpower", cuja ordem é enviada para o nobreak durante o processo de desligamento do computador.

Ao ser conectada a energia novamente ao nobreak, depois de alguns segundos ele ligará novamente e, consequentemente, o computador também (desde que no BIOS o computador esteja ajustado para "Power on" na opção "Restore on AC/Power Loss"  - o nome da opção pode variar no BIOS).

Também é possível testar a comunicação com o nobreak e até promover calibragem e autotestes nele. Para tanto, é preciso desabilitar o serviço apcupsd:
sudo service apcupsd stop
E então executar o teste:
gerente@mserver:~$ sudo apctest

2016-09-27 23:01:14 apctest 3.14.10 (13 September 2011) debian
Checking configuration ...
Attached to driver: usb
sharenet.type = Network & ShareUPS Disabled
cable.type = USB Cable
mode.type = USB UPS Driver
Setting up the port ...
Doing prep_device() ...

You are using a USB cable type, so I'm entering USB test mode
Hello, this is the apcupsd Cable Test program.
This part of apctest is for testing USB UPSes.

Getting UPS capabilities...SUCCESS

Please select the function you want to perform.

1)  Test kill UPS power
2)  Perform self-test
3)  Read last self-test result
4)  View/Change battery date
5)  View manufacturing date
6)  View/Change alarm behavior
7)  View/Change sensitivity
8)  View/Change low transfer voltage
9)  View/Change high transfer voltage
10) Perform battery calibration
11) Test alarm
12) View/Change self-test interval
 Q) Quit

Select function number:

Depois que fizer os testes, não se esqueça de habilitar o serviço novamente:
sudo service apcupsd start

2 comentários:

  1. Este comentário foi removido pelo autor.

    ResponderExcluir
  2. Gostaria de aproveitar e informar que os nobreaks TS SHARA , agora são suportados pelo NUT na versão 2.7.4 ou maior com driver nutdrv_qx (para ubuntu , pré compilado tem ppa : https://launchpad.net/~tjormola/+archive/ubuntu/nut-unstable ).
    Quis trazer a informação pois na internet há há essa informação fácil .

    ResponderExcluir