Hard Drive Monitor Script för Headless Linux Servrar
Moderna hårddiskar har en intern mekanism som heter S.M.A.R.T. genom vilken det är möjligt att veta när en hårddisk håller på att misslyckas. Skulle det inte vara trevligt med servern att maila dig innan ett sådant misslyckande?
Översikt
Program som "mdadm" (för programvaru RAID-hantering) och "Palimpsest Disk Utility" (används på Ubuntu LiveCD), använder S.M.A.R.T informationen för att informera dig när disken är på eller har misslyckats. Men på en huvudlös server (ingen GUI) finns det ingen tjänst som kommer att informera dig om den väntade domen innan det är för sent. Dessutom, hur skulle du veta om det utan att manuellt logga in på servern?
Det här skriptet, när det körs en gång om dagen med cron, kommer att varna om något av de svåra sektorns hårddiskar har uppnått en gräns som avsiktligt sänks då "skivan är dålig" och skickar varningen till maskinens administratör.
Förutsättningar och antaganden
- Du har redan inställt E-postsupport för servern med hjälp av guiden "Så här ställer du in e-postmeddelanden på Linux".
- Du använder ett Debian-baserat system.
- Du använder inte en * hårdvaru RAID-kontroller.
- Du ser mig använda VIM som redaktörsprogram, det här är bara för att jag är van vid det ... du kan använda någon annan redaktör som du vill.
* Eftersom det är mycket möjligt att hårdvaru RAID-kontrollen blockerar systemets tillgång till denna information.
Inrätta
Installera "smartmontools" -paketet som läser S.M.A.R.T-informationen från hårddiskkontrollen och presenterar den för oss.
sudo aptitude installera smartmontools
Skapa skärmskriptet:
sudo vim /root/smart-monitor.sh
Gör detta till innehållet:
#! / Bin / bash
####### Emailfunktion ########
email_admin_func ()
echo "Till: [email protected]"> $ temp_email_file
echo "Från: [email protected]" >> $ temp_email_file
echo "Ämne: S.M.A.R.T övervaka tröskelbrott" >> $ temp_email_file
echo "" >> $ temp_email_file
echo -e $ 1 >> $ temp_email_file
/ usr / sbin / ssmtp -t < $temp_email_file
echo "skickade en e-post till administratören"
smartc_func ()
/ usr / sbin / smartctl -A / dev / $ 1 | grep Reallocated_Sector_Ct | tr -s "| cut -d" -f11
##########################################
####### Ange arbetsparameter ########
temp_email_file = / tmp / smart_monitor.txt
allowed_threshold = 5 #set antalet dåliga sektorer du är villig att leva med, rekommenderas 5.
########Motor########
för jag i sda sdb; gör # Lägg till eller subtrahera skivnamn från den här listan som lämplig för din inställning.
om [["'smartc_func $ i'" -ge $ allowed_threshold]]; sedan
E-postmeddelande till administratören
email_admin_func "En av HD: erna på" värdnamn "har nått den övre tröskelgränsen !!! nTröskeln satt till: $ allowed_threshold och $ i-diskstatusen var:" "smartc_func $ i" ""
fi
Gjort
Viktiga punkter att notera är:
- E-postfunktion - Ange lämplig information som maskinens namn och administratörs e-post.
- Tillåtet tröskelvärde - Ställ in den här parametern enligt vad du tycker är lämplig, jag har använt 5 eftersom gränsen för de hårddiskar "Server-kvalitet" som jag använde var 10. (jag har hittat tröskeln för drivrutiner för konsumentkvalitet till vara så hög som 140).
- Ange de enheter som du vill övervaka genom att justera uppräkningen av skivnamn i "för" -loopen. För närvarande ingår två skivor (sda & sdb), så justera för installationen. Du kan inkludera alla dina skivor eller bara några, om du behöver * utesluta en skiva av någon anledning.
* I min ursprungliga inställning var den första disken en flash-enhet så att läsa informationen om det inte är möjligt att använda det.
Gör scriptet körbart:
sudo chmod + x /root/smart-monitor.sh
Inställningen är klar.
Planera att manuset ska köras automatiskt
Vi vill göra skriptet köra automatiskt så vi skapar ett nytt Cron-jobb för det.
Som det anges i "Hur man ställer in e-postmeddelanden om Linux", styrs resultatet av att göra det, är det att om skriptet själv stöter på ett fel kommer cron automatiskt att informera oss via e-post så snart det händer.
Öppna cron job schemaläggaren:
sudo crontab -e
Lägg till detta till innehållet:
0 7 * * * /root/smart-monitor.sh> /tmp/last_smart_monitor_run.log
Detta ställer in manuset att köra varje morgon klockan 7:00.
Hela din bransch hör till oss :)