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 når disken er i ferd med eller har feilet. Men på en headless server (ingen GUI) er det ingen tjeneste som vil informere deg om den ventende dommen før den er for sent. Videre, hvordan vil du vite om det uten å logge på serveren manuelt?
Dette skriptet, når det kjøres en gang om dagen med cron, vil varsle om noen av systemets harddisker har dårlig antall sektorer, har nådd en grense som bevisst er lavere enn "disken er dårlig" terskel, og sende varslingen til maskinens administrator.
Forutsetninger og forutsetninger
- Du har allerede konfigurert e-postsupport for serveren ved å bruke veiledningen "Hvordan oppsett e-postvarsler på Linux".
- Du bruker et Debian-basert system.
- Du bruker ikke en * hardware RAID-kontroller.
- Du vil se meg bruke VIM som redigeringsprogrammet, dette er bare fordi jeg er vant til det … du kan bruke hvilken som helst annen rediger du vil ha.
* Fordi det er svært mulig at maskinvare RAID-kontrolleren blokkerer systemets tilgang til denne informasjonen.
Setup
Installer "smartmontools" -pakken som leser S.M.A.R.T-informasjonen fra harddiskkontrollen og presenterer den for oss.
sudo aptitude install smartmontools
Opprett skjermskriptet:
sudo vim /root/smart-monitor.sh
Gjør dette til innhold:
#!/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
Nøkkelen til å merke seg er:
- E-postfunksjon - Angi riktig informasjon som maskinnavn og administrator e-post.
- Tillatt terskel - Sett denne parameteren til det du føler er hensiktsmessig, jeg har brukt 5 fordi grensen for harddiskene "Server grade" jeg brukte var 10. (Jeg har funnet terskelen for "forbrukerklasse" -drifter til være så høy som 140).
- Sett inn enhetene du vil overvåke ved å justere opptellingen av disknavn i "for" -sløyfen. For tiden er to disker (sda og sdb) inkludert, så juster for oppsettet ditt. Du kan inkludere alle diskene dine eller bare noen, hvis du trenger å * utelukke en disk av en eller annen grunn.
* i mitt opprinnelige oppsett var den første disken en flash-stasjon, slik at den leser informasjonen hvis det ikke er mulig å bruke det i det hele tatt.
Gjør skriptet kjørbart:
sudo chmod +x /root/smart-monitor.sh
Oppsettet er ferdig.
Planlegg scriptet som skal kjøres automatisk
Vi ønsker å gjøre skriptet kjørt automatisk, slik at vi vil opprette en ny Cron-jobb for den. Som angitt i "Hvordan oppsett e-postvarsler på Linux", styrer resultatet av å gjøre det, er det at hvis skriptet selv møter 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 å bli kjørt hver morgen klokken 7.00.
All din sektor tilhører oss:)