Pages

Tuesday, September 07, 2010

Monitorando a temperatura do HD

A temperatura máxima recomendada para o funcionamento do HD oscila na faixa de 55-60°C. Parece uma temperatura muito alta, certo ? Pois, sem ar condicionado, aqui no Rio eu somente consigo menos de 50°C no inverno. Tradicionalmente, meu HD opera na faixa de 50-55°C onde o limite crítico dele (um Seagate) é 60°C.

Esse limite é tão importante para o Hardware, que o programa de avaliação do HD da Seagate exibe a mensagem: esse HD nunca operou acima de 60°C (ou informa que ele esteve acima desse limite), para constatar que o HD passou ou não por problemas de temperatura.

Certo é que 60°C é problema. Problema ruim e eu não gosto de problemas ruins. Assim, eu criei um script que monitora a temperatura do HD e toma uma ação caso tenha excedido o limite que eu especifiquei. Com a proximidade do verão, resolvi compartilhar o meu script para o caso de ter mais alguém interessado nesse tipo de solução.

Antes de dar qualquer explicação sobre como fazer isso, vamos ao script:
#!/bin/bash
# File: HDTemperature
# Author: J. F. Mitre http://jfmitre.com;
# Created: Seg 04 Jan 2010 18:42:19 BRST
# Last Update: Qui 07 Jan 2010 14:50:14 BRST
# NOTES: Informa quando a temperatura do hda ultrapassa um certo limite

# Dispositivo que deve ser monitorado
DEV=/dev/sda
# Temperatura máxima aceitável (acima disso é problema)
DEF=57

PAUSE=0
while [ $PAUSE != 1 ]; do
# Verificando a temperatura atual
VAR=$(sudo hddtemp $DEV|cut -d":" -f 3|sed s/..$//g)
# Se a temperatura atual for maior que a definida...
if [ $VAR -gt $DEF ]; then
# Faça ...

# Exibir uma mensagem usando o kdialog (KDE)
# kialog --msgbox "Temperatura do HD está em $VAR °C." \
# --title "Alerta de Temperatura Alta"

# Exibir uma mensagem usando o zenity (GNOME)
zenity --info --text="Temperatura do HD está em $VAR °C." \
--title "Alerta de Temperatura Alta"

# Desative o volume encriptado
# $HOME/bin/encDisk -d

# Registre a hora
date >>$HOME/HDQuente.log

# Desligue o computador
# sudo shutdown -h now

# Desative o script. Já fez seu trabalhando avisando...
# exit
fi
# Aguarde 10 minutos para repetir a verificação
sleep 10m
done
Há uma série de pontos para explicar:
  • O hddtemp é quem verifica a temperatura do HD. Em um script mais profissional, teríamos a variável:
    PROG=/usr/bin/hddtemp
    no início do programa e no script usaríamos essa variável $PROG. Isso é importante por dois motivos: permite que o script seja iniciado durante o boot pelo root e facilita a configuração do script caso o programa esteja em outro lugar. Para dizer a verdade, um script mais profissional encontraria o programa no sistema e faria o que tem que ser feito. De forma que essa explicação toda seria irrelevante.
  • Esse programa depende do sudo. Na prática, se remover todo local onde tem a palavra sudo e iniciar esse script como administrador, o sudo não é necessário.
    Do contrário, eu uso no meu /etc/sudoers a linha:
    %users ALL=NOPASSWD:/usr/sbin/hddtemp
  • Esse script monitora apenas um HD do computador. Eu monitoro apenas "um" porque não estou procurando por defeito, mas por temperatura alta devido a alta temperatura do ambiente. Eu uso o sda porque eu sei que no meu computador ele é o HD mais quente.
  • A temperatura máxima que eu permito é 57°C. Acima disso (58°C), o programa vai fazer alguma coisa que foi especificada no script. Em alguns casos, eu ajusto esse valor para um valor menor, como 55 ou 56°C. É importante não usar 58°C se tiver mais de um HD. Infelizmente, esse script não monitora a temperatura de todos os HDs e é possível que um HD atinga 59 enquanto outro já está acima de 60°C. De fato, eu observo até 4 °C de diferença entre o HD mais quente e o mais frio. Tente identificar qual é o seu HD mais quente para que ele seja o dispositivo monitorado.
  • Esse script fica em loop infinito checando e comparando a temperatura do HD a cada 10 minutos, exceto que em alguma etapa diga-se algo em contrário.
  • Eu inicio esse script no modo gráfico (diretório Autostart do KDE). Para iniciar com o sistema, os programas devem estar com o caminho completo ou com o PATH definido dentro do script.
  • Veja o comentário onde está escrito "Faça...". Tudo que está dentro daquele condicional é executado quando a temperatura é maior que o limite que eu especifiquei. Deixei vários exemplos ali:
    1. Exibir uma mensagem com o kdialog informando o problema (comentado)
    2. Exibir uma mensagem com o zenity informando o problema (ativo)
    3. Desativa volumes encriptados usando um script pessoal para isso (comentado)
    4. Regista em log o momento que tudo aconteceu (ativo)
    5. Desligar o computador com o sudo configurado para fazer isso (comentado)
      • Para usar essa opção, adicione no /etc/sudoers a linha:
        mitre ALL=NOPASSWD:/sbin/shutdown
        onde "mitre" é o seu nome de usuário.
    6. Desativa o script (comentado).
      Uma vez ativo, esse script fica rodando indefinidamente. Oras, quando eu uso uma opção na tela para me informar da temperatura, eu coloco um exit para desativar o monitoramento, pois eu vou tomar uma decisão pessoalmente (normalmente significa que eu perco um ventilador e o computador ganha um ventilador).
Existem vários modos de monitorar a temperatura do HD. Eu escolhi o modo "quase" artesanal por considerar que a complexidade de outras opções não compensa pelas funcionalidades que desejo e que coloquei nesse script. As ações que devem ser tomadas são as ações que eu defino. Por vezes, eu edito o script para ele registrar um log e desligar o computador, mas poderia ser me enviar um e-mail.

Note que pela forma que fiz esse script, para desativar o programa eu preciso usar o comando "kill" depois de ter localizado o número do processo usando o comando "ps aux|grep -i hdtemperature" onde HDTemperature é o nome do arquivo do meu script.

Acredito que um monitoramento básico dessa forma seria um excelente exercício de Python para os interessados e entusiastas. O que imagino é um programa na bandeja do sistema com diversas opções pré-configuradas e com a possibilidade de executar scripts externos. Talvez até já exista tal programa, mas eu confesso que nunca procurei (era bem mais rápido escrever o script). De uma forma ou de outra é um excelente exercício.

No comments:

Post a Comment