Script di monitoraggio del disco rigido per server Linux senza testa
I moderni hard disk hanno un meccanismo interno chiamato S.M.A.R.T. attraverso il quale è possibile sapere quando un hard disk sta per fallire. Non sarebbe bello che il server ti inviasse via e-mail prima di un simile errore?
Panoramica
Programmi come "mdadm" (per la gestione del software RAID) e "Palimpsest Disk Utility" (usati sul LiveCD di Ubuntu), usano le informazioni di S.M.A.R.T per informarti quando il disco sta per o è fallito. Tuttavia su un server headless (senza GUI) non c'è alcun servizio che ti informerà della morte in sospeso prima che sia troppo tardi. Inoltre, come lo sapresti senza l'accesso manuale al server?
Questo script, quando viene eseguito una volta al giorno con cron, avviserà se uno qualsiasi dei conteggi di settori danneggiati del disco rigido del sistema ha raggiunto un limite che è deliberatamente inferiore alla soglia "il disco è scadente" e invia l'avviso all'amministratore della macchina tramite e-mail.
Prerequisiti e ipotesi
- Hai già configurato il supporto via e-mail per il server utilizzando la guida "How To Setup Email Avvisi su Linux".
- Stai usando un sistema basato su Debian.
- Non stai usando un controller RAID hardware *.
- Mi vedrai usare VIM come programma di editor, questo solo perché sono abituato ... puoi usare qualsiasi altro editor che vorresti.
* Perché è molto probabile che il controller RAID hardware blocchi l'accesso del sistema a queste informazioni.
Impostare
Installa il pacchetto "smartmontools" che legge le informazioni di S.M.A.R.T dal controller del disco rigido e ce lo presenta.
sudo aptitude installa smartmontools
Crea lo script del monitor:
sudo vim /root/smart-monitor.sh
Rendi questo è contenuto:
#! / Bin / bash
######## Funzione email ########
email_admin_func ()
echo "A: [email protected]"> $ temp_email_file
echo "From: [email protected]" >> $ temp_email_file
echo "Oggetto: Soglia monitor monitor S.M.A.R." >> $ temp_email_file
echo "" >> $ temp_email_file
echo -e $ 1 >> $ temp_email_file
/ usr / sbin / ssmtp -t < $temp_email_file
echo "Invia un'e-mail all'amministratore"
smartc_func ()
/ usr / sbin / smartctl -A / dev / $ 1 | grep Reallocated_Sector_Ct | tr -s "| cut -d" -f11
######## Fine delle funzioni ########
######## Imposta il parametro di lavoro ########
temp_email_file = / tmp / smart_monitor.txt
allowed_threshold = 5 #set la quantità di settori danneggiati con cui vuoi vivere, consigliato 5.
########Motore########
per i in sda sdb; fai # Aggiungi o sottrai i nomi dei dischi da questo elenco come appropriato per la tua configurazione.
if [["'smartc_func $ i'" -ge $ allowed_threshold]]; poi
echo Invio via email all'amministratore
email_admin_func "Uno degli HD su" 'nomehost' "ha raggiunto il limite superiore della soglia !!! nLa soglia è stata impostata su: $ allowed_threshold e lo stato del disco $ i era:" 'smartc_func $ i' ""
fi
fatto
I punti chiave da notare sono:
- Funzione e-mail - Imposta le informazioni appropriate come il nome del computer e l'e-mail dell'amministratore.
- Soglia consentita: imposta questo parametro su ciò che ritieni appropriato, ho utilizzato 5 perché il limite impostato per gli hard disk "server grade" utilizzati era 10. (ho trovato la soglia per le unità "consumer grade" per essere alto come 140).
- Impostare i dispositivi che si desidera monitorare regolando l'enumerazione dei nomi dei dischi nel ciclo "for". Attualmente sono inclusi due dischi (sda e sdb), quindi regolati per la configurazione. È possibile includere tutti i dischi o solo alcuni, se è necessario * escludere un disco per qualche motivo.
* nella mia configurazione originale il primo disco era un'unità flash, quindi leggendo le sue informazioni se possibile non è di grande utilità.
Rendi eseguibile lo script:
sudo chmod + x /root/smart-monitor.sh
L'installazione è terminata.
Pianifica lo script da eseguire automaticamente
Vogliamo che lo script venga eseguito automaticamente, quindi creeremo un nuovo processo Cron per esso.
Come indicato nella sezione "Come impostare gli avvisi via e-mail su Linux", il risultato è che se lo script incontra un errore, cron ci informerà automaticamente via e-mail non appena ciò accade.
Apri il cron job scheduler:
sudo crontab -e
Aggiungi questo al suo contenuto:
0 7 * * * /root/smart-monitor.sh> /tmp/last_smart_monitor_run.log
Questo imposterà lo script da eseguire ogni mattina alle 7:00.
Tutto il tuo settore ci appartiene :)