สคริปต์ตรวจสอบฮาร์ดไดรฟ์สำหรับเซิร์ฟเวอร์ Linux ที่ไม่มีหัว
ฮาร์ดไดรฟ์สมัยใหม่มีกลไกภายในที่เรียกว่า S.M.A.R.T. โดยที่มันเป็นไปได้ที่จะรู้ว่าเมื่อฮาร์ดดิสก์กำลังจะล้มเหลว มันจะไม่ดีของเซิร์ฟเวอร์ที่จะส่งอีเมลถึงคุณก่อนที่ความล้มเหลวดังกล่าว?
ภาพรวม
โปรแกรมเช่น“ mdadm” (สำหรับการจัดการ RAID ของซอฟต์แวร์) และ“ Palimpsest Disk Utility” (ใช้บน Ubuntu LiveCD) ให้ใช้ข้อมูล S.M.A.R.T เพื่อแจ้งให้คุณทราบเมื่อดิสก์ใกล้จะถึงหรือล้มเหลว อย่างไรก็ตามบนเซิร์ฟเวอร์ headless (ไม่มี GUI) ไม่มีบริการที่จะแจ้งให้คุณทราบถึงการลงโทษที่รอดำเนินการก่อนที่จะสายเกินไป นอกจากนี้คุณจะทราบได้อย่างไรโดยไม่ต้องลงชื่อเข้าใช้เซิร์ฟเวอร์ด้วยตนเอง?
สคริปต์นี้เมื่อทำงานวันละครั้งพร้อม cron จะแจ้งเตือนหากจำนวนฮาร์ดไดรฟ์ที่ไม่ดีของระบบนับถึงขีด จำกัด ที่จงใจต่ำกว่าเกณฑ์ "ดิสก์ไม่ดี" และส่งอีเมลคำเตือนไปยังผู้ดูแลระบบของเครื่อง.
ข้อกำหนดเบื้องต้นและสมมติฐาน
- คุณได้ตั้งค่าการสนับสนุนทางอีเมลสำหรับเซิร์ฟเวอร์แล้วโดยใช้คำแนะนำ“ วิธีตั้งค่าการแจ้งเตือนทางอีเมลบน Linux”.
- คุณกำลังใช้ระบบที่ใช้ Debian.
- คุณไม่ได้ใช้คอนโทรลเลอร์ RAID ฮาร์ดแวร์ *.
- คุณจะเห็นฉันใช้ VIM เป็นโปรแกรมแก้ไขนี่เป็นเพราะฉันคุ้นเคยกับมัน ... คุณอาจใช้โปรแกรมแก้ไขอื่น ๆ ที่คุณต้องการ.
* เนื่องจากมีความเป็นไปได้สูงที่คอนโทรลเลอร์ RAID ของฮาร์ดแวร์จะบล็อกการเข้าถึงข้อมูลนี้ของระบบ.
ติดตั้ง
ติดตั้งแพ็คเกจ“ smartmontools” ซึ่งอ่านข้อมูล S.M.A.R.T จากตัวควบคุมฮาร์ดไดรฟ์และนำเสนอให้เรา.
sudo aptitude ติดตั้ง smartmontools
สร้างสคริปต์การตรวจสอบ:
sudo vim /root/smart-monitor.sh
ทำให้เป็นเนื้อหา:
#! / bin / ทุบตี
######### ฟังก์ชั่นอีเมล์ #########
email_admin_func ()
echo "ถึง: [email protected]"> $ temp_email_file
echo "จาก: [email protected]" >> $ temp_email_file
echo "หัวเรื่อง: S.M.A.R.T ตรวจสอบการละเมิดเกณฑ์" >> $ temp_email_file
echo "" >> $ temp_email_file
echo -e $ 1 >> $ temp_email_file
/ usr / sbin / ssmtp -t < $temp_email_file
echo "ส่งอีเมลถึงผู้ดูแลระบบ"
smartc_func ()
/ usr / sbin / smartctl -A / dev / $ 1 | grep Reallocated_Sector_Ct | tr -s "| cut -d" -f11
######### สิ้นสุดฟังก์ชั่น #########
######### ตั้งค่าพารามิเตอร์การทำงาน #########
temp_email_file = / tmp / smart_monitor.txt
allow_threshold = 5 #set จำนวนเซกเตอร์ที่ไม่ดีที่คุณยินดีจะแนะนำ 5.
######## ######## เครื่องยนต์
สำหรับ i ใน sda sdb; ทำ # เพิ่มหรือลบชื่อดิสก์จากรายการนี้ตามความเหมาะสมสำหรับการตั้งค่าของคุณ.
ถ้า [["" smartc_func $ i '"-ge $ allow_threshold]]; แล้วก็
echo ส่งอีเมลถึงผู้ดูแลระบบ
email_admin_func "หนึ่งใน HDs บน" 'ชื่อโฮสต์' "ได้ถึงขีด จำกัด ด้านบนแล้ว !!! n ขีด จำกัด ถูกกำหนดเป็น: $ allow_threshold และสถานะดิสก์ $ i คือ:" 'smartc_func $ i' ""
Fi
เสร็จแล้ว
ประเด็นสำคัญที่ควรทราบคือ:
- ฟังก์ชั่นอีเมล์ - ตั้งค่าข้อมูลที่เหมาะสมเช่นชื่อเครื่องและอีเมลของผู้ดูแลระบบ.
- เกณฑ์ที่อนุญาต - ตั้งค่าพารามิเตอร์นี้เป็นสิ่งที่คุณรู้สึกว่าเหมาะสมฉันได้ใช้ 5 เนื่องจากขีด จำกัด ที่กำหนดไว้สำหรับฮาร์ดไดรฟ์“ เซิร์ฟเวอร์เกรด” ที่ฉันใช้คือ 10 (ฉันพบเกณฑ์สำหรับไดรฟ์ระดับผู้บริโภค ") สูงถึง 140).
- ตั้งค่าอุปกรณ์ที่คุณต้องการตรวจสอบโดยปรับการแจงนับชื่อดิสก์ในลูป“ for” ขณะนี้มีดิสก์สองตัว (sda & sdb) รวมอยู่ด้วยดังนั้นปรับการตั้งค่าของคุณ คุณอาจรวมดิสก์ทั้งหมดหรือบางส่วนไว้หากคุณต้องการ * ยกเว้นดิสก์ด้วยเหตุผลบางประการ.
* ในการตั้งค่าดั้งเดิมของฉันดิสก์แรกเป็นแฟลชไดรฟ์ดังนั้นการอ่านข้อมูลของมันหากเป็นไปได้ไม่ได้ใช้งานมากนัก.
ทำให้สคริปต์เรียกใช้งานได้:
sudo chmod + x /root/smart-monitor.sh
ตั้งค่าเสร็จแล้ว.
กำหนดเวลาให้สคริปต์ทำงานโดยอัตโนมัติ
เราต้องการให้สคริปต์ทำงานโดยอัตโนมัติดังนั้นเราจะสร้างงาน Cron ใหม่สำหรับมัน.
ตามที่ระบุไว้ใน“ วิธีการตั้งค่าอีเมล์แจ้งเตือนบน Linux” แนะนำการทำเช่นนั้นคือถ้าสคริปต์ตัวเองพบข้อผิดพลาด cron จะแจ้งให้เราทราบทางอีเมลโดยอัตโนมัติทันทีที่มันเกิดขึ้น.
เปิดตัวกำหนดเวลางาน cron:
sudo crontab -e
เพิ่มไปยังเนื้อหาของมัน:
0 7 * * * /root/smart-monitor.sh> /tmp/last_smart_monitor_run.log
สิ่งนี้จะทำให้สคริปต์ทำงานทุกเช้าเวลา 7AM.
ภาคทั้งหมดของคุณเป็นของเรา :)