Os discos rígidos modernos possuem um mecanismo interno denominado S.M.A.R.T. através do qual é possível saber quando um disco rígido está prestes a falhar. Não seria bom que o servidor lhe enviasse um e-mail antes de tal falha?
Visão geral
Programas como o “mdadm” (para gerenciamento de software RAID) e o “Palimpsest Disk Utility” (usado no Ubuntu LiveCD), usam as informações S.M.A.R.T para informá-lo quando o disco está prestes a ou falhou. No entanto, em um servidor sem interface com o usuário (sem GUI), não há serviço que irá informá-lo da destruição pendente antes que seja tarde demais. Além disso, como você saberia sobre isso sem fazer login manualmente no servidor?
Este script, quando executado uma vez por dia com o cron, alertará se a contagem de setores defeituosos de qualquer um dos discos rígidos do sistema atingiu um limite que é deliberadamente inferior ao limite de “o disco está defeituoso” e enviará por email o aviso ao administrador da máquina.
Pré-requisitos e premissas
- Você já configurou o suporte por e-mail para o servidor usando o “ Como configurar alertas de e-mail no Linux " guia.
- Você está usando um sistema baseado em Debian.
- Você não está usando um * controlador RAID de hardware.
- Você vai me ver usar o VIM como o programa de editor, isso é porque estou acostumado com isso ... você pode usar qualquer outro editor que desejar.
* Porque é muito possível que o controlador RAID de hardware bloqueie o acesso do sistema a essas informações.
Configuração
Instale o pacote “smartmontools” que lê as informações S.M.A.R.T do controlador do disco rígido e as apresenta para nós.
sudo aptitude install smartmontools
Crie o script do monitor:
sudo vim /root/smart-monitor.sh
Faça com que seja o conteúdo:
#! / Bin / Bash
######### Função de email ########
email_admin_func ()
{
echo "To: [email protected]"> $ temp_email_file
echo "From: [email protected]" >> $ temp_email_file
echo "Assunto: Limite de monitoramento S.M.A.R.T violado" >> $ temp_email_file
echo "" >> $ temp_email_file
echo -e $ 1 >> $ temp_email_file
/ usr / sbin / ssmtp -t <$ temp_email_file
echo "Enviou um e-mail para o administrador"
}
smartc_func ()
{
/ usr / sbin / smartctl -A / dev / $ 1 | grep Reallocated_Sector_Ct | tr -s '' | cut -d '' -f11
}
######### Fim das funções ########
######### Definir parâmetro de trabalho ########
temp_email_file = / tmp / smart_monitor.txt
allowed_threshold = 5 #defina a quantidade de setores defeituosos com os quais você deseja viver, recomendado 5.
########Motor########
para i em sda sdb; faça # Adicione ou subtraia nomes de disco desta lista conforme apropriado para sua configuração.
se [[ "`smartc_func $i`" -ge $allowed_threshold ]]; então
echo Enviando um e-mail ao administrador
email_admin_func "Um dos HDs em" `hostname`" atingiu o limite superior !!! nO limite foi definido como: $ allowed_threshold e o status do disco $ i era: "` smartc_func $ i` ""
estar
feito
Os pontos principais a serem observados são:
- Função de e-mail - defina as informações apropriadas, como o nome da máquina e o e-mail do administrador.
- Limite permitido - defina este parâmetro para o que achar apropriado, eu usei 5 porque o limite definido para discos rígidos de “nível de servidor” que usei foi 10. (encontrei o limite para unidades de “nível de consumidor” para pode chegar a 140).
- Defina os dispositivos que deseja monitorar ajustando a enumeração dos nomes dos discos no loop “for”. Atualmente, dois discos (sda e sdb) estão incluídos, então ajuste para sua configuração. Você pode incluir todos os seus discos ou apenas alguns, se precisar * excluir um disco por algum motivo.
* na minha configuração original, o primeiro disco era uma unidade flash, portanto, ler suas informações, se possível, não é muito útil.
Torne o script executável:
sudo chmod +x /root/smart-monitor.sh
A configuração está concluída.
Programe o script para ser executado automaticamente
Queremos fazer o script rodar automaticamente, então criaremos um novo Cron job para ele.
Conforme declarado no “
Como configurar alertas de e-mail no Linux
O resultado de fazer isso é que, se o próprio script encontrar um erro, o cron irá nos informar automaticamente por e-mail assim que isso acontecer.
Abra o programador do cron job:
sudo crontab -e
Adicione ao seu conteúdo:
0 7 * * * /root/smart-monitor.sh > /tmp/last_smart_monitor_run.log
Isso configurará o script para ser executado todas as manhãs às 7h.
Todos os seus setores são nossos :)