วิธีตรวจสอบ 'mdadm' RAID ในขณะที่ใช้งานอยู่


41

ฉันเริ่มรับคอมพิวเตอร์ที่บ้านและสนับสนุนพวกเขาฉันมีกล่อง "เซิร์ฟเวอร์" linux ที่ใช้อาร์เรย์ RAID

ปัจจุบันmdadm RAID-1จะไปRAID-5เมื่อฉันมีไดรฟ์มากขึ้น (แล้วRAID-6ฉันหวังว่า) อย่างไรก็ตามฉันเคยได้ยินเรื่องราวต่าง ๆ เกี่ยวกับข้อมูลที่ได้รับความเสียหายในไดรฟ์หนึ่งและคุณไม่เคยสังเกตเห็นเนื่องจากมีการใช้งานไดรฟ์อื่นจนถึงจุดที่ไดรฟ์แรกล้มเหลวและคุณพบว่าไดรฟ์ที่สองของคุณ ไดรฟ์ที่ 5)

เห็นได้ชัดว่าการสำรองข้อมูลมีความสำคัญและฉันก็ดูแลเช่นกัน แต่ฉันรู้ว่าฉันเคยเห็นสคริปต์ที่อ้างว่าช่วยแก้ไขปัญหานี้และให้คุณตรวจสอบ RAID ของคุณในขณะที่ทำงานอยู่ อย่างไรก็ตามการค้นหาสคริปต์เหล่านี้อีกครั้งในตอนนี้ฉันพบว่ามันยากที่จะพบสิ่งที่คล้ายกับที่ฉันเคยวิ่งมาก่อนและฉันรู้สึกว่าฉันล้าสมัยและไม่เข้าใจสิ่งที่เปลี่ยนแปลงไป

คุณจะตรวจสอบ RAID ที่รันอยู่เพื่อให้แน่ใจว่าดิสก์ทั้งหมดยังคง preforming ได้ตามปกติอย่างไร

ฉันตรวจสอบ SMART บนไดรฟ์ทั้งหมดและmdadmตั้งค่าให้ส่งอีเมลฉันในกรณีที่เกิดความล้มเหลว แต่ฉันต้องการทราบว่าไดรฟ์ของฉัน "ตรวจสอบ" ตัวเองเป็นครั้งคราวด้วยเช่นกัน


ดูเหมือนว่าคุณอยู่บนเส้นทางที่ถูกต้องคุณเพียงแค่ตั้งค่า cron เพื่อส่งผลลัพธ์ของ smartctl ให้กับไดรฟ์ของคุณ
laebshade

คำตอบ:


56

จุดของ RAID ที่มีความซ้ำซ้อนคือมันจะดำเนินต่อไปตราบเท่าที่มันสามารถทำได้ แต่แน่นอนว่ามันจะตรวจจับข้อผิดพลาดที่ทำให้มันอยู่ในโหมดที่เสื่อมโทรมเช่นดิสก์ที่ล้มเหลว คุณสามารถแสดงสถานะปัจจุบันของอาเรย์ด้วยmdadm -D:

# mdadm -D /dev/md0
<snip>
       0       8        5        0      active sync   /dev/sda5
       1       8       23        1      active sync   /dev/sdb7

นอกจากนี้สถานะการส่งคืนของmdadm -Dไม่ใช่ศูนย์ถ้ามีปัญหาใด ๆ เช่นคอมโพเนนต์ที่ล้มเหลว (1 หมายถึงข้อผิดพลาดที่โหมด RAID ชดเชยและ 2 หมายถึงความล้มเหลวทั้งหมด)

นอกจากนี้คุณยังจะได้รับข้อมูลสรุปสถานะของอุปกรณ์ RAID /proc/mdstatทั้งหมดโดยดูที่ คุณสามารถรับข้อมูลเกี่ยวกับอุปกรณ์ RAID ได้/sys/class/block/md*/md/*เช่นกัน ดูDocumentation/md.txtในเอกสารเคอร์เนล บาง/sysรายการสามารถเขียนได้เช่นกัน ตัวอย่างเช่นคุณสามารถเรียกตรวจสอบเต็มรูปแบบของที่มีmd0echo check >/sys/class/block/md0/md/sync_action

นอกเหนือจากการตรวจสอบเฉพาะจุด mdadm ยังสามารถแจ้งให้คุณทราบทันทีที่มีสิ่งผิดปกติเกิดขึ้น ตรวจสอบให้แน่ใจว่าคุณมี( MAILADDR rootใน/etc/mdadm.confดิสทริบิวชัน (เช่น Debian) ตั้งค่านี้โดยอัตโนมัติ) แล้วคุณจะได้รับการแจ้งเตือนทางอีเมลทันทีที่ข้อผิดพลาด (อาร์เรย์เสื่อมโทรม) เกิดขึ้น

ตรวจสอบให้แน่ใจว่าคุณได้รับการส่งจดหมายไปยังรูทบนเครื่องโลคัล (การแจกจ่ายที่ทันสมัยบางอย่างละเว้นสิ่งนี้เพราะพวกเขาพิจารณาว่าอีเมลทั้งหมดต้องผ่านผู้ให้บริการภายนอก - แต่การรับจดหมายภายในเป็นสิ่งที่จำเป็นสำหรับผู้ดูแลระบบ echo hello | mail -s test root@localhostการทดสอบนี้โดยการส่งอีเมลราก: โดยปกติการตั้งค่าอีเมลที่เหมาะสมต้องมีสองสิ่ง:

  • เรียกใช้MTAในเครื่องท้องถิ่นของคุณ ต้องตั้งค่า MTA อย่างน้อยที่สุดเพื่อให้สามารถส่งจดหมายในเครื่องได้ การแจกแจงทั้งหมดมาพร้อมกับ MTA ที่เหมาะสมเลือกอะไรก็ได้ (แต่ไม่ใช่ nullmailer หากคุณต้องการให้ส่งอีเมลแบบโลคัล)
  • เปลี่ยนเส้นทางเมลไปที่บัญชีระบบ (อย่างน้อยroot) ไปยังที่อยู่ที่คุณอ่านเป็นประจำ นี่อาจเป็นบัญชีของคุณในเครื่องท้องถิ่นหรือที่อยู่อีเมลภายนอก ด้วย MTAs ส่วนใหญ่ที่อยู่ที่สามารถกำหนดค่าใน/etc/aliases; คุณควรจะมีสายเหมือน

    root: djsmiley2k
    

    สำหรับการจัดส่งในท้องถิ่นหรือ

    root: djsmiley2k@mail-provider.example.com
    

    สำหรับการจัดส่งระยะไกล หากคุณเลือกการส่งระยะไกลตรวจสอบให้แน่ใจว่าได้กำหนดค่า MTA ของคุณแล้ว ทั้งนี้ขึ้นอยู่กับเอ็มทีของคุณคุณอาจต้องเรียกใช้คำสั่งหลังจากแก้ไขnewaliases/etc/aliases


คุณช่วยอธิบายได้ไหมว่าทำไมไม่ควรใช้ nullmailer? เป็นเพราะเหตุผลที่กล่าวถึงในunix.stackexchange.com/questions/1449/ …? MTA ประเภทใดที่คุณจะแนะนำ
Cameron Martin

@CameronMartin Nullmailer ส่งต่อเมลไปยังเครื่องรีโมตเท่านั้นไม่ส่งในพื้นที่ คุณสามารถใช้งานได้หากคุณมีเซิร์ฟเวอร์ SMTP ที่ใดที่รับจดหมายจากเครื่องของคุณ แต่ไม่ใช่หากคุณส่งจดหมายในเครื่อง ฉันได้แก้ไขคำตอบเพื่อชี้แจง
Gilles 'หยุดชั่วร้าย'

19

คุณสามารถบังคับให้ตรวจสอบอาร์เรย์ทั้งหมดในขณะที่ออนไลน์ ตัวอย่างเช่นในการตรวจสอบอาร์เรย์/dev/md0ให้เรียกใช้เป็น root:

echo check > /sys/block/md0/md/sync_action

ฉันยังมีงาน cron ที่รันคำสั่งต่อไปนี้เดือนละครั้ง:

tar c /dir/of/raid/filesystem > /dev/null

ไม่ใช่การตรวจสอบอย่างละเอียดของไดรฟ์เอง แต่มันจะบังคับให้ระบบตรวจสอบเป็นระยะว่าเกือบทุกไฟล์สามารถอ่านจากดิสก์ได้สำเร็จ ใช่ไฟล์บางไฟล์กำลังจะอ่านจากแคชหน่วยความจำแทนดิสก์ แต่ฉันคิดว่าถ้าไฟล์นั้นอยู่ในหน่วยความจำแคชแล้วมันเพิ่งจะถูกอ่านจากดิสก์เมื่อไม่นานมานี้หรือกำลังจะถูกเขียนลงดิสก์ อย่างไรก็ตามการใช้งานนี้จะทดสอบเกณฑ์ที่สำคัญที่สุดของอาเรย์ RAID (“ ฉันจะอ่านข้อมูลของฉันได้สำเร็จหรือไม่?”) และในช่วงสามปีที่ผ่านมาฉันใช้งานอาเรย์ของฉันครั้งเดียวที่ฉันมีไดรฟ์เสีย คำสั่งนี้ที่ค้นพบมัน

สิ่งหนึ่งที่เตือนเล็กน้อยคือถ้าระบบไฟล์ของคุณมีขนาดใหญ่คำสั่งนี้จะใช้เวลานาน ระบบของฉันใช้เวลาประมาณ 6hr / TiB ฉันรันโดยใช้ioniceเพื่อให้ระบบที่เหลือไม่ได้หยุดชะงักระหว่างการตรวจสอบไดรฟ์:

ionice -c3 tar c /dir/of/raid/filesystem > /dev/null

โปรดทราบว่าioniceจะใช้งานได้เฉพาะเมื่อคุณใช้ตัวกำหนดเวลา CFQ I / O (ค่าเริ่มต้น)
Totor

ดังนั้นสิ่งนี้อาจเห็นได้ชัดที่สุด แต่ไม่ใช่สำหรับฉัน - การรันสคริปต์ที่มีการเปลี่ยนเส้นทางเอาต์พุตไปยัง devnull จะแจ้งให้คุณทราบบางสิ่งได้อย่างไร เป็นกรณีที่ถ้า "tar" พบข้อผิดพลาดใด ๆ สิ่งเหล่านี้จะแพร่กระจายไปยัง mdadm daemon ซึ่ง (น่าจะ) ส่งอีเมลถึงคุณ?
ljwobker

คำถามของฉันกับคุณ stharward คุณจะรับมือกับข้อผิดพลาดของ tar ได้อย่างไรถ้ามันถูกเรียกใช้จากงาน cron ผลลัพธ์นั้นอยู่ที่ไหน ผมจะมีความคิดที่คุณต้องการเพิ่มการเปลี่ยนเส้นทางสำหรับ stderr ไปยังไฟล์ที่สามารถตรวจสอบได้ตามระยะเวลาหรือหางของมันถูกพิมพ์ไปยังคอนโซลของการเปิดหน้าต่าง terminal :)
Madivad

1
@ljwobker ขออภัยที่ฟื้นเธรดเก่า ฉันคิดว่าเจตนาของคำสั่ง tar ที่นี่คือพยายามอ่านเนื้อหาทั้งหมดของโวลุ่ม สิ่งนี้จะตรวจสอบว่าโวลุ่มทั้งหมดยังคงสามารถอ่านได้และให้โอกาสในการตรวจสอบดิสก์ที่ไม่ดี
mikepj

1
หากมาจาก cronjob cron จะส่งเอาต์พุตทั้งหมดโดยตรงไปยัง mailto = location หากตั้งไว้มิฉะนั้นจะรูท อย่างไรก็ตาม ... ฉันสงสัยว่า dd จะดีกว่า tar สำหรับค่าใช้จ่ายที่ต่ำกว่าหรือไม่
djsmiley2k - CoW

11

แพ็คเกจ Debian และ Ubuntu 'mdadm' มีไฟล์อยู่

/etc/cron.d/mdadm

ซึ่งจะเปลี่ยนวันอาทิตย์แรกของแต่ละเดือนจะเรียกใช้คำสั่ง

/usr/share/mdadm/checkarray --cron --all --idle --quiet

ที่จะตรวจสอบอาร์เรย์ทั้งหมดของคุณเพื่อความสอดคล้อง (เว้นแต่คุณจะตั้งค่า AUTOCHECK เป็นเท็จใน / etc / default / mdadm ) รายงานจะถูกส่งไปยังผู้ใช้ 'รูท' (ตรวจสอบให้แน่ใจว่าคุณได้รับอีเมลดังกล่าว)


8

ฉันใช้ฟังก์ชั่นง่าย ๆ นี้เพื่อตรวจสอบ/proc/mdstat:

#Health of RAID array
raid() { awk '/^md/ {printf "%s: ", $1}; /blocks/ {print $NF}'  /proc/mdstat; }

เรียบร้อย! ฉันชอบสไตล์ :) .. นี่คือสิ่งที่ฉันต้องการที่จะใส่ลงไปใน MOTD :) ขอบคุณ!
jirislav
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.