โฮมเพจ » ทำอย่างไร » สคริปต์ตรวจสอบฮาร์ดไดรฟ์สำหรับเซิร์ฟเวอร์ Linux ที่ไม่มีหัว

    สคริปต์ตรวจสอบฮาร์ดไดรฟ์สำหรับเซิร์ฟเวอร์ 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.


    ภาคทั้งหมดของคุณเป็นของเรา :)