Detectar perda de energia

2

É possível detectar perda de energia em um laptop / desktop sem um no-break? Obviamente, um computador sem um no-break será desligado pelo menos quase imediatamente após ser desconectado / ter sua bateria puxada. No entanto, pensei que talvez o kernel pudesse perceber a perda de energia antes que os capacitores / indutores fossem drenados completamente e tivessem uma chance muito pequena de fazer algo.

Se eu tiver um no-break configurado corretamente, powerd enviará SIGPWR para init para que ocorra um desligamento organizado. Estou interessado no caso em que não tenho uma UPS conectada, então, obviamente, haveria, na melhor das hipóteses, uma janela curta muito muito para ser desligada. Tudo o que eu realmente quero é escrever um timestamp único (ou, com isso, qualquer string) para um arquivo de log para que eu possa saber sobre a falta de energia.

De alguma forma duvido que SIGPWR seja de fato útil nesse caso, já que duvido que o kernel vá enviá-lo para cada processo, foi apenas a primeira coisa que veio à mente. Talvez houvesse alguma linha de controle ou arquivo em que eu pudesse pesquisar que o kernel atualizaria? Ou talvez eu esteja apenas ferrado, o que para ser honesto é o que eu espero.

    
por Alec 04.02.2016 / 03:16

2 respostas

3

A janela de tempo até mesmo para uma bateria externa de capacitores de 680uFx400V é muito baixa para um PC de mesa médio de 100W - apenas meio segundo mais ou menos. Com tampas de PSU internas, é ainda menos. O que você está realmente tentando alcançar? Mesmo que você consiga gravar um registro de data e hora em um arquivo de registro, você ainda precisa que o ciclo sync () aconteça ou fazer chamadas manuais sync (), e se você estiver sem sorte e sua máquina ocupada trabalhando descarregando outros buffers de disco enfileirados - você está fora.

Se você precisar detectar uma falha de energia quase de forma confiável , sugiro que toque em um arquivo de sinalizador na inicialização, remova-o durante o desligamento normal. A existência deste arquivo irá dizer-lhe que a máquina não foi desligada de forma limpa (mas não irá salvá-lo de outras falhas, principalmente de software, como pânico do kernel).

    
por 04.02.2016 / 08:22
3

Algumas máquinas têm baterias de curto prazo projetadas apenas para o desligamento (pelo menos, a série AT & T 3B, e o IBM RS / 6000-pSeries também o fizeram com o IIRC). Nessas máquinas, o sinal SIGPWR foi enviado em perda de energia e era realmente utilizável. Não tanto hoje em dia.

    
por 22.06.2016 / 13:53