visão global
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 informar quando o disco está prestes a ou falhou. No entanto, em um servidor sem cabeçalho (sem GUI) não há serviço que irá informá-lo sobre a desgraça pendente antes que seja tarde demais. Além disso, como você saberia sobre isso sem fazer login manualmente no servidor?
Esse script, quando executado uma vez ao dia com o cron, alertará se alguma contagem de setores defeituosos das unidades de disco rígido do sistema atingiu um limite deliberadamente inferior ao limite "o disco está ruim" e envia o aviso por e-mail ao administrador da máquina.
Pré-requisitos e suposições
- Você já configurou o suporte por e-mail para o servidor usando o guia "Como configurar e-mail de alertas no Linux".
- Você está usando um sistema baseado no Debian.
- Você não está usando um controlador RAID de hardware *.
- Você vai me ver usando o VIM como programa de edição, isso é porque eu estou acostumado … você pode usar qualquer outro editor que você queira.
* 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 do 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 disso o conteúdo:
#!/bin/bash ########Email function######## email_admin_func() { echo 'To: [email protected]' > $temp_email_file echo 'From: [email protected]' >> $temp_email_file echo 'Subject: S.M.A.R.T monitor Threshold breached' >> $temp_email_file echo '' >> $temp_email_file echo -e $1 >> $temp_email_file /usr/sbin/ssmtp -t < $temp_email_file echo 'Sent an Email to the Admin' }
smartc_func() { /usr/sbin/smartctl -A /dev/$1 | grep Reallocated_Sector_Ct |tr -s ' '|cut -d' ' -f11 }
########End of Functions########
########Set working parameter######## temp_email_file=/tmp/smart_monitor.txt allowed_threshold=5 #set the amount of bad sectors your willing to live with, recommended 5.
########Engine######## for i in sda sdb; do # Add or subtract disk names from this list as appropriate for your setup. if [ '`smartc_func $i`' -ge $allowed_threshold ]; then echo Emailing the Administrator email_admin_func 'One of the HDs on '`hostname`', has reached the upper threshold limit!!! nThe threshold was set to:$allowed_threshold and the $i disk status was: '`smartc_func $i`'' fi done
Os principais pontos 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 você acha apropriado, usei 5 porque o limite definido para os discos rígidos “grau de servidor” usados era 10. (encontrei o limite para unidades de “consumo” para ser tão alto quanto 140).
- Defina os dispositivos que você deseja monitorar, ajustando a enumeração de nomes de disco no loop "for". Atualmente dois discos (sda e sdb) estão incluídos, então ajuste para a sua configuração. Você pode incluir todos os seus discos ou apenas alguns, se você precisar * excluir um disco por algum motivo.
* Na minha configuração original, o primeiro disco era uma unidade flash, portanto, a leitura de 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 que o script seja executado automaticamente, então criaremos um novo trabalho Cron para ele. Como indicado no guia "Como configurar alertas por e-mail no Linux", o resultado disso é que, se o próprio script encontrar um erro, o cron nos informará automaticamente por e-mail assim que isso acontecer.
Abra o agendador de tarefas cron:
sudo crontab -e
Adicione isto ao seu conteúdo:
0 7 * * * /root/smart-monitor.sh > /tmp/last_smart_monitor_run.log
Isso irá definir o script para ser executado todas as manhãs às 7 da manhã.
Todo o seu setor pertence a nós:)