Moderne harddisker har en intern mekanisme kalt S.M.A.R.T. som det er mulig å vite når en harddisk er i ferd med å mislykkes. Ville det ikke vært hyggelig av serveren å sende deg en e-post før en slik feil?
Oversikt
Programmer som "mdadm" (for programvare-RAID-styring) og "Palimpsest Disk Utility" (brukt på Ubuntu LiveCD), bruker informasjonen S.M.A.R.T for å informere deg om når disken er i ferd med å mislykkes. Men på en hodeløs server (ingen GUI) er det ingen tjenester som vil informere deg om den ventende dommen før det er for sent. Dessuten, hvordan ville du vite om det uten manuelt å logge på serveren?
Dette skriptet, når det kjøres en gang om dagen med cron, vil varsle om noen av systemets telleverdier for harddisker har nådd en grense som bevisst er lavere enn "disken er dårlig" terskel, og sende advarselen til maskinens administrator.
Forutsetninger og antakelser
- Du har allerede konfigurert e-poststøtte for serveren ved hjelp av " Slik konfigurerer du e-postvarsler på Linux " guide.
- Du bruker et Debian-basert system.
- Du bruker ikke * hardware RAID-kontroller.
- Du vil se meg bruke VIM som redigeringsprogram, dette er bare fordi jeg er vant til det ... du kan bruke hvilken som helst annen redaktør du vil ha.
* Fordi det er veldig mulig at hardware RAID-kontrolleren blokkerer systemets tilgang til denne informasjonen.
Oppsett
Installer "smartmontools" -pakken som leser S.M.A.R.T-informasjonen fra harddiskkontrolleren og presenterer den for oss.
sudo aptitude installer smartmontools
Opprett skjermskriptet:
sudo vim /root/smart-monitor.sh
Gjør dette til innhold:
#! / Bin / Bash
######## E-postfunksjon ########
email_admin_func ()
{
ekko "To: [email protected]"> $ temp_email_file
ekko "Fra: [email protected]" >> $ temp_email_file
ekko "Subject: S.M.A.R.T monitor monitor Threshold breached" >> $ temp_email_file
ekko "" >> $ temp_email_file
ekko -e $ 1 >> $ temp_email_file
/ usr / sbin / ssmtp -t <$ temp_email_file
ekko "Sendte en e-post til administratoren"
}
smartc_func ()
{
/ usr / sbin / smartctl -A / dev / $ 1 | grep Reallocated_Sector_Ct | tr -s '' | klipp -d '' -f11
}
######## Slutten av funksjoner ########
######### Still inn arbeidsparameter ########
temp_email_file = / tmp / smart_monitor.txt
allow_threshold = 5 # angi mengden dårlige sektorer du er villig til å leve med, anbefalt 5.
########Motor########
for jeg i sda sdb; gjør # Legg til eller trekk disknavn fra denne listen etter behov.
hvis [[ "`smartc_func $i`" -ge $allowed_threshold ]]; deretter
ekko E-post til administratoren
email_admin_func "En av HD-ene på" vertsnavn "" har nådd den øvre terskelgrensen !!! nTerskelen ble satt til: $ allow_threshold og $ i diskstatus var: "" smartc_func $ i "" "
være
ferdig
Viktige punkter å merke seg er:
- E-postfunksjon - Angi riktig informasjon som maskinens navn og administratorens e-post.
- Tillatt terskel - Sett denne parameteren til det du synes er passende, jeg har brukt 5 fordi grensen som er satt for “server grade” harddiskene jeg brukte var 10. (jeg har funnet terskelen for “forbruker grade” -stasjoner til være så høyt som 140).
- Still inn enhetene du vil overvåke ved å justere opptellingen av disknavn i "for" -sløyfen. For tiden er to disker (sda & sdb) inkludert, så juster for oppsettet ditt. Du kan inkludere alle diskene dine eller bare noen, hvis du trenger å * ekskludere en disk av en eller annen grunn.
* i mitt opprinnelige oppsett var den første disken en flash-stasjon, så det er ikke til stor nytte å lese informasjonen hvis mulig.
Gjør skriptet kjørbart:
sudo chmod + x /root/smart-monitor.sh
Oppsettet er gjort.
Planlegg at skriptet skal kjøres automatisk
Vi ønsker å få skriptet til å kjøre automatisk, så vi oppretter en ny Cron-jobb for det.
Som det fremgår av “
Slik konfigurerer du e-postvarsler på Linux
”Guide resultatet av å gjøre det, er at hvis selve skriptet støter på en feil, vil cron automatisk informere oss via e-post så snart det skjer.
Åpne cron-jobbplanleggeren:
sudo crontab -e
Legg dette til innholdet:
0 7 * * * /root/smart-monitor.sh > /tmp/last_smart_monitor_run.log
Dette vil sette skriptet til å kjøres hver morgen klokka 07.00.
Hele sektoren din tilhører oss :)