Tenho um servidor em um Raspberry, e estava sofrendo com problema de sistema de arquivos corrompidos devido desligamento incorreto ( falta de energia ). Para resolver isso procurei um nobreak. Mas como é um servidor, e niguém fica por perto o nobreak precisa fazer duas coisas: (1) desligar o servidor de forma controlada quando faltar energia, e (2) ligar novamente o servidor quando a energia voltar. Procurei o nobreak mais barato com controle por USB e encontrei o TS Shara Solo II.
Para o do nobreak escolhi utilizar o pacote NUT, pois o fabricante oferece esse software no site (apesar de desatualizado).
Para o do nobreak escolhi utilizar o pacote NUT, pois o fabricante oferece esse software no site (apesar de desatualizado).
Instalei somente o básico do nut:
sudo apt-get install nut-client nut-server
Fiz a configuração dele adicionando os texto abaixo em cada arquivo:
/etc/nut/nut.conf
MODE=standalone
/etc/nut/ups.conf
[tsshara]
driver = nutdrv_qx
desc = "tsshara"
port = auto
protocol = "megatec"
/etc/nut/upsd.users
[upsmon]
password = "123456"
upsmon master
actions = SET
instcmds = ALL
/etc/nut/upsmon.conf
MONITOR tsshara@localhost 1 upsmon "123456" master
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC
Teste do driver. Ele deve mostrar algum erro se não funcionar.
Depois de um boot tudo estava funcionando. Para testar use:
sudo upsdrvctl start
Depois de um boot tudo estava funcionando. Para testar use:
upsc tsshara
Que deve apresentar algo assim:
Init SSL without certificate database
battery.charge: 92
battery.voltage: 12.80
battery.voltage.high: 13.00
battery.voltage.low: 10.40
battery.voltage.nominal: 12.0
device.mfr: UPS 700 VA AUT
device.model: TS Shara
device.type: ups
driver.name: nutdrv_qx
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.protocol: megatec
driver.parameter.synchronous: no
driver.version: 2.7.4
driver.version.data: Megatec 0.06
driver.version.internal: 0.28
input.current.nominal: 4.0
input.frequency: 60.0
input.frequency.nominal: 60
input.voltage: 0.0
input.voltage.fault: 0.0
input.voltage.nominal: 115
output.voltage: 111.0
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.firmware: 20070731-5
ups.productid: 0035
ups.status: OB
ups.type: offline / line interactive
ups.vendorid: 0483
Hora de testar o desligamento/religamento controlado dele:
sudo upsmon -c fsd
O raspberry fez o shutdown direitinho e o nobreak desligou após 30 segundos. Após 180 segundos ele ligou novamente e no meio do boot o nobreak apagou!! Após 180 segundos ele ligou novamente e apagou no meio do boot novamente. E ficou ligando e desligando até eu aceitar que alguma coisa não estava funcionando direito. O sistema de arquivo ja tinha ido pro saco e tive que restaurar a imagem para fazer o raspberry funcionar novamente.
Esse não era o comportamento esperado, o nobreak não deveria desligar no meio do boot. Fiz alguns testes e identifiquei um possível bug no firmware do nobreak. Consegui fazer um paliativo para esse bug (apresentado em outro post) mas outro problema apareceu: o nobrek não ficava desligado quando estava sem energia, ele ligava, o raspberry dava boot, via que tinha pouca carga na bateria, mandava o nobreak desligar. O nobreak desligava por alguns minutos e ligava novamente, mesmo que ainda não tivesse energia. Ele ficava fazendo isso até acabar toda a carga da bateria. Logicamente não era isso que eu queria.
Após uma olhada no código fonte, e uma conversa com os desenvolvedores do NUT cheguei a seguinte configuração que funcionou:
O parametro offdelay é o tempo em segundos que ele aguarda para desligar após receber o comando para desligar. o ondelay é o tempo que ele deveria esperar para voltar a funcionar após a energia ser reestabelecida. Entretanto utilizar um valor de ondelay diferente de zero não funciona neste nobreak, e ao invés de ele ficar desligado, ele fica reiniciando.
Nos testes também tentei o parametro stayoff, mas o nobreak não parece ser compativel com este comando e também fica reiniciando. Entretanto observei o seguinte ao utilizar a configuração acima:
1 - Quando falta energia e a bateria do nobreak esta próximo do fim, o NUT força o desligamento do nobreak. Quando a energia volta o nobreak liga após uns 5 segundos e o sistema volta a operar.
2 - Se o comando de desligamento do nobreak for feito enquanto ainda existe alimentação, o nobreak desliga e não retorna mais. E pior: quando o nobreak é ligado ele lembra do ultimo comando de shutdown e desliga novamente no meio do boot, e puff...arrebenta com o sistema de arquivo. No caso de faltar energia, e o sistema começar a fazer shutdown, se a energia voltar antes do nobreak desligar o sistema vai permanecer desligado, e quanto ele for ligado novamente pode ocorrer o desligamento do nobreak no boot. Não bom!
Portanto, quando for testar o desligamento do nobreak, tirar ele da tomada para simular uma falta de energia.
Para ficar 100% é necessário que o fabricante corrija os bugs do firmware do nobreak. Vou tentar um contato com eles para ver se chego em alguma coisa.
Após uma olhada no código fonte, e uma conversa com os desenvolvedores do NUT cheguei a seguinte configuração que funcionou:
/etc/nut/ups.conf
[tsshara]
driver = nutdrv_qx
desc = "tsshara"
port = auto
protocol = "megatec"
offdelay = 30
ondelay = 0
offdelay = 30
ondelay = 0
Nos testes também tentei o parametro stayoff, mas o nobreak não parece ser compativel com este comando e também fica reiniciando. Entretanto observei o seguinte ao utilizar a configuração acima:
1 - Quando falta energia e a bateria do nobreak esta próximo do fim, o NUT força o desligamento do nobreak. Quando a energia volta o nobreak liga após uns 5 segundos e o sistema volta a operar.
2 - Se o comando de desligamento do nobreak for feito enquanto ainda existe alimentação, o nobreak desliga e não retorna mais. E pior: quando o nobreak é ligado ele lembra do ultimo comando de shutdown e desliga novamente no meio do boot, e puff...arrebenta com o sistema de arquivo. No caso de faltar energia, e o sistema começar a fazer shutdown, se a energia voltar antes do nobreak desligar o sistema vai permanecer desligado, e quanto ele for ligado novamente pode ocorrer o desligamento do nobreak no boot. Não bom!
Portanto, quando for testar o desligamento do nobreak, tirar ele da tomada para simular uma falta de energia.
Para ficar 100% é necessário que o fabricante corrija os bugs do firmware do nobreak. Vou tentar um contato com eles para ver se chego em alguma coisa.
É, esse comando aqui:
ResponderExcluirsudo upsmon -c fsd
Fez alguma coisa errada... agora é só plugar o USB que ele desliga o nobreak e meu sistema logo em seguida...
sim, isso acontece se a configuração não estiver correta, isso é um bug do nobreak. Desconecte a USB do nobreak, tire ele da tomada por alguns minutos. Ligue e desligue ele algumas vezes. Deve voltar ao normal.
ExcluirOlá, por acaso seu nobreak é USB?
ResponderExcluirO meu identifica o seguinte dispositivo: Bus 002 Device 004: ID 0483:5740 STMicroelectronics Virtual COM Port
Mas não consegui fazer funcionar com esses drives.
mesmo problema comigo, no meu antigo tsshara, funcionava, no novo tem esse stm
ExcluirÉ USB sim, e a interface USB é a STM mesmo, acho que esta correto. Vc precisa utilizar os NUT mais atual, se vc estiver pegando do repositorio pode ser que seja muito antigo e sem o suporte. Qual é a versão do NUT que voce esta utilizando?
ResponderExcluirEu estou como mesmo problema aqui. Usando a versão 2.7.4
ExcluirEstou na mesma situação também, com NUT 2.7.4 instalado via apt.
ExcluirQueria atualizar, encontrei que pode ser necessário usar a porta serial /dev/ttyACMx (troque o x por algum numero, aqui foi 0), e usando o driver blazer_ser consegui pegar todas as informações, de resto funcionou com esse tutorial.
ExcluirBoa idéia, não tinha pensado nisso. O driver pra tshara é uma adaptação do blazer, sua sugestão é muito boa e mais fácil de usar.
ResponderExcluirParabéns pelo Post! Ainda não testei com o meu, mas já é bom saber que alguém conseguiu fazer funcionar
ResponderExcluirOpa Zecão. Obrigado por compartilhar o post!
ResponderExcluirCom o nobreak entretanto o negócio não funcionou:
>> sudo upsdrvctl start
Network UPS Tools - UPS driver controller 2.7.4
Network UPS Tools - Generic Q* USB/Serial driver 0.28 (2.7.4)
USB communication driver 0.33
Using protocol: Megatec 0.06
No values for battery high/low voltages
Using 'guesstimation' (low: 10.400000, high: 13.000000)!
Battery runtime will not be calculated (runtimecal not set)
>sudo upsc tsshara
Error: Connection failure: Connection refused
Você teria alguma sugestão de onde buscar a documentação para tentar descobrir o problema?
Também estou tendo erro. Alguma sugestão?
ResponderExcluir