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 av servern att skicka e-post till dig innan ett sådant fel?
Översikt
Program som “mdadm” (för programvaru-RAID-hantering) och “Palimpsest Disk Utility” (används på Ubuntu LiveCD), använd S.M.A.R.T-informationen för att informera dig när skivan är på väg eller har misslyckats. Men på en huvudlös server (inget GUI) finns det ingen tjänst som informerar dig om den väntande domen innan det är för sent. Dessutom, hur skulle du veta om det utan att manuellt logga in på servern?
Detta skript, när det körs en gång om dagen med cron, varnar om någon av systemets hårddiskar dåliga sektorer har nått en gräns som medvetet är lägre än "disken är dålig" tröskel och skickar varningen till maskinens administratör.
Förutsättningar och antaganden
- Du har redan konfigurerat e-poststöd för servern med hjälp av " Så här ställer du in e-postvarningar på Linux ”Guide.
- Du använder ett Debian-baserat system.
- Du använder inte * hårdvaru-RAID-kontroller.
- Du kommer se mig använda VIM som redigeringsprogram, det är bara för att jag är van vid det ... du kan använda vilken annan redigerare du helst vill.
* Eftersom det är mycket möjligt att hårdvaru-RAID-styrenheten blockerar systemets åtkomst till denna information.
Uppstart
Installera paketet “smartmontools” som läser S.M.A.R.T-informationen från hårddiskstyrenheten och presenterar den för oss.
sudo aptitude installera smartmontools
Skapa bildskärmen:
sudo vim /root/smart-monitor.sh
Gör detta till innehåll:
#! / Bin / Bash
######## E-postfunktion ########
email_admin_func ()
{
echo "To: [email protected]"> $ temp_email_file
echo "From: [email protected]" >> $ temp_email_file
eko "Ämne: S.M.A.R.T-bildskärm tröskelvärdet bryts" >> $ temp_email_file
eko "" >> $ temp_email_file
echo -e $ 1 >> $ temp_email_file
/ usr / sbin / ssmtp -t <$ temp_email_file
eko "Skickat ett e-postmeddelande till administratören"
}
smartc_func()
{
/ usr / sbin / smartctl -A / dev / $ 1 | grep Reallocated_Sector_Ct | tr -s '' | klipp -d '' -f11
}
######### Slut på funktioner ########
######## Ställ in arbetsparameter ########
temp_email_file = / tmp / smart_monitor.txt
allow_threshold = 5 # ställa in antalet dåliga sektorer som du är villig att leva med, rekommenderas 5.
########Motor########
för jag i sda sdb; gör # Lägg till eller subtrahera disknamn från den här listan efter behov för din installation.
om [[ "`smartc_func $i`" -ge $allowed_threshold ]]; sedan
eko E-post till administratören
email_admin_func "En av HD-filerna på" värdnamn "" har nått den övre tröskelvärdet !!! nTröskeln var inställd på: $ allow_threshold och $ i diskstatus var: "` smartc_func $ i` ""
vara
Gjort
Viktiga punkter att notera är:
- E-postfunktion - Ange lämplig information som maskinnamnet och administratörens e-post.
- Tillåtet tröskelvärde - Ställ in den här parametern till vad du tycker är lämplig, jag har använt 5 eftersom gränsen för “servergrad” -hårddiskar jag använde var 10. (jag har hittat tröskeln för “konsumentkvalitet” -enheter till vara så hög som 140).
- Ställ in enheterna som du vill övervaka genom att justera uppräkningen av disknamn i "for" -slingan. För närvarande ingår två skivor (sda & sdb), så justera för din inställning. Du kan inkludera alla dina diskar eller bara några om du behöver * utesluta en disk av någon anledning.
* i min ursprungliga installation var den första hårddisken en flash-enhet, så det är inte till stor nytta att läsa dess information om det är möjligt.
Gör skriptet körbart:
sudo chmod + x /root/smart-monitor.sh
Installationen är klar.
Schemalägg att manuset ska köras automatiskt
Vi vill göra att manuset körs automatiskt så att vi skapar ett nytt Cron-jobb för det.
Som anges i ”
Så här ställer du in e-postvarningar på Linux
”Vägleda resultatet av att göra det, är att om själva skriptet stöter på ett fel kommer cron automatiskt att informera oss via e-post så snart det händer.
Öppna Cron Job Schemaläggare:
sudo crontab -e
Lägg till detta i dess innehåll:
0 7 * * * /root/smart-monitor.sh > /tmp/last_smart_monitor_run.log
Detta kommer att ställa in att manuset ska köras varje morgon klockan 07.00.
Alla dina sektorer tillhör oss :)