ค้นหาเว็บไซต์

วิธีการกู้คืนข้อมูลและสร้างซอฟต์แวร์ RAID ที่ล้มเหลวขึ้นมาใหม่ - ตอนที่ 8


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

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

สถานการณ์การทดสอบ RAID

ก่อนดำเนินการต่อ โปรดตรวจสอบให้แน่ใจว่าคุณได้ตั้งค่าอาร์เรย์ RAID 1 ตามคำแนะนำที่ให้ไว้ในส่วนที่ 3 ของซีรี่ส์นี้: วิธีตั้งค่า RAID 1 (มิเรอร์) ใน Linux

รูปแบบเดียวในกรณีปัจจุบันของเราคือ:

1) CentOS (v7) เวอร์ชันอื่นที่ไม่ใช่เวอร์ชันที่ใช้ในบทความนั้น (v6.5) และ
2) ขนาดดิสก์ที่แตกต่างกันสำหรับ /dev/sdb และ /dev/sdc (แต่ละขนาด 8 GB)

นอกจากนี้ หากเปิดใช้งาน SELinux ในโหมดบังคับใช้ คุณจะต้องเพิ่มป้ายกำกับที่เกี่ยวข้องลงในไดเรกทอรีที่คุณจะต่อเชื่อมอุปกรณ์ RAID มิฉะนั้นคุณจะพบข้อความเตือนนี้ขณะพยายามติดตั้ง:

คุณสามารถแก้ไขได้ด้วยการเรียกใช้:


restorecon -R /mnt/raid1

การตั้งค่าการตรวจสอบ RAID

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

คำแนะนำก่อน. แม้ว่าคุณสามารถตรวจสอบ /proc/mdstat เพื่อตรวจสอบสถานะของ RAID ของคุณได้ ยังมีวิธีที่ดีกว่าและประหยัดเวลาซึ่งประกอบด้วยการรัน mdadm ในจอภาพ + สแกน โหมดซึ่งจะส่งการแจ้งเตือนทางอีเมลไปยังผู้รับที่กำหนดไว้ล่วงหน้า

หากต้องการตั้งค่านี้ ให้เพิ่มบรรทัดต่อไปนี้ใน /etc/mdadm.conf:


MAILADDR user@<domain or localhost>

ในกรณีของฉัน:


MAILADDR gacanepa@localhost

หากต้องการรัน mdadm ในโหมดมอนิเตอร์ + สแกน ให้เพิ่มรายการ crontab ต่อไปนี้เป็นรูท:


@reboot /sbin/mdadm --monitor --scan --oneshot

ตามค่าเริ่มต้น mdadm จะตรวจสอบอาร์เรย์ RAID ทุกๆ 60 วินาที และส่งการแจ้งเตือนหากพบปัญหา คุณสามารถแก้ไขลักษณะการทำงานนี้ได้โดยเพิ่มตัวเลือก --delay ให้กับรายการ crontab ด้านบนพร้อมกับจำนวนวินาที (เช่น --delay 1800 หมายถึง 30 นาที)

สุดท้าย ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง Mail User Agent (MUA) เช่น mutt หรือ mailx มิฉะนั้นคุณจะไม่ได้รับการแจ้งเตือนใดๆ

อีกสักครู่เราจะดูว่าการแจ้งเตือนที่ส่งโดย mdadm มีลักษณะอย่างไร

การจำลองและการเปลี่ยนอุปกรณ์จัดเก็บข้อมูล RAID ที่ล้มเหลว

เพื่อจำลองปัญหากับหนึ่งในอุปกรณ์จัดเก็บข้อมูลในอาร์เรย์ RAID เราจะใช้ตัวเลือก --manage และ --set-faulty ดังต่อไปนี้:


mdadm --manage --set-faulty /dev/md0 /dev/sdc1  

ซึ่งจะส่งผลให้ /dev/sdc1 ถูกทำเครื่องหมายว่าผิดพลาด ดังที่เราเห็นใน /proc/mdstat:

ที่สำคัญกว่านั้น เรามาดูกันว่าเราได้รับการแจ้งเตือนทางอีเมลพร้อมคำเตือนเดียวกันหรือไม่:

ในกรณีนี้ คุณจะต้องถอดอุปกรณ์ออกจากอาร์เรย์ RAID ของซอฟต์แวร์:


mdadm /dev/md0 --remove /dev/sdc1

จากนั้น คุณสามารถถอดออกจากเครื่องได้จริงและแทนที่ด้วยชิ้นส่วนอะไหล่ (/dev/sdd ซึ่งพาร์ติชันประเภท fd ได้ถูกสร้างขึ้นก่อนหน้านี้):


mdadm --manage /dev/md0 --add /dev/sdd1

โชคดีสำหรับเราที่ระบบจะเริ่มสร้างอาร์เรย์ใหม่โดยอัตโนมัติด้วยส่วนที่เราเพิ่งเพิ่มเข้าไป เราสามารถทดสอบสิ่งนี้ได้โดยการทำเครื่องหมาย /dev/sdb1 ว่ามีข้อผิดพลาด จากนั้นลบออกจากอาร์เรย์ และตรวจสอบให้แน่ใจว่าไฟล์ tecmint.txt ยังคงเข้าถึงได้ที่ / mnt/raid1:


mdadm --detail /dev/md0
mount | grep raid1
ls -l /mnt/raid1 | grep tecmint
cat /mnt/raid1/tecmint.txt

ภาพด้านบนแสดงให้เห็นอย่างชัดเจนว่าหลังจากเพิ่ม /dev/sdd1 ลงในอาร์เรย์เพื่อแทนที่ /dev/sdc1 แล้ว ระบบจะทำการสร้างข้อมูลขึ้นใหม่โดยอัตโนมัติโดยไม่มีการแทรกแซง ในส่วนของเรา

แม้ว่าจะไม่จำเป็นอย่างเคร่งครัด แต่ก็เป็นความคิดที่ดีที่จะมีอุปกรณ์สำรองไว้ใกล้ตัว เพื่อให้กระบวนการเปลี่ยนอุปกรณ์ที่ชำรุดด้วยไดรฟ์ที่ดีสามารถทำได้ในพริบตา หากต้องการทำเช่นนั้น ให้เพิ่ม /dev/sdb1 และ /dev/sdc1 อีกครั้ง:


mdadm --manage /dev/md0 --add /dev/sdb1
mdadm --manage /dev/md0 --add /dev/sdc1

การกู้คืนจากการสูญเสียความซ้ำซ้อน

ตามที่อธิบายไว้ก่อนหน้านี้ mdadm จะสร้างข้อมูลใหม่โดยอัตโนมัติเมื่อดิสก์ตัวหนึ่งล้มเหลว แต่จะเกิดอะไรขึ้นถ้าดิสก์ 2 ตัวในอาเรย์ล้มเหลว มาจำลองสถานการณ์ดังกล่าวโดยทำเครื่องหมาย /dev/sdb1 และ /dev/sdd1 เป็นข้อผิดพลาด:


umount /mnt/raid1
mdadm --manage --set-faulty /dev/md0 /dev/sdb1
mdadm --stop /dev/md0
mdadm --manage --set-faulty /dev/md0 /dev/sdd1

ความพยายามที่จะสร้างอาร์เรย์ใหม่ในลักษณะเดียวกับที่สร้างขึ้นในขณะนี้ (หรือใช้ตัวเลือก --assume-clean) อาจส่งผลให้ข้อมูลสูญหาย ดังนั้นจึงควรปล่อยไว้เป็นทางเลือกสุดท้าย

ลองกู้คืนข้อมูลจาก /dev/sdb1 ลงในพาร์ติชันดิสก์ที่คล้ายกัน (/dev/sde1 – โปรดทราบว่าการดำเนินการนี้ต้องการให้คุณสร้างพาร์ติชันของ พิมพ์ fd ใน /dev/sde ก่อนดำเนินการต่อ) โดยใช้ ddrescue:


ddrescue -r 2 /dev/sdb1 /dev/sde1

โปรดทราบว่าจนถึงจุดนี้ เรายังไม่ได้แตะ /dev/sdb หรือ /dev/sdd ซึ่งเป็นพาร์ติชันที่เป็นส่วนหนึ่งของอาร์เรย์ RAID

ตอนนี้เรามาสร้างอาร์เรย์ใหม่โดยใช้ /dev/sde1 และ /dev/sdf1:


mdadm --create /dev/md0 --level=mirror --raid-devices=2 /dev/sd[e-f]1

โปรดทราบว่าในสถานการณ์จริง โดยทั่วไปคุณจะใช้ชื่ออุปกรณ์เดียวกันกับอาเรย์ดั้งเดิม นั่นคือ /dev/sdb1 และ /dev/sdc1 หลังจาก ดิสก์ที่ล้มเหลวถูกแทนที่ด้วยอันใหม่

ในบทความนี้ ฉันได้เลือกใช้อุปกรณ์พิเศษเพื่อสร้างอาร์เรย์ใหม่ด้วยดิสก์ใหม่และเพื่อหลีกเลี่ยงความสับสนกับไดรฟ์เดิมที่ล้มเหลว

เมื่อถามว่าจะเขียนอาร์เรย์ต่อหรือไม่ ให้พิมพ์ Y แล้วกด Enter ควรเริ่มต้นอาร์เรย์และคุณควรจะสามารถดูความคืบหน้าได้ด้วย:


watch -n 1 cat /proc/mdstat

เมื่อกระบวนการเสร็จสิ้น คุณควรจะสามารถเข้าถึงเนื้อหาของ RAID ของคุณได้:

สรุป

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

หลักการที่อธิบายไว้ในคู่มือนี้ใช้กับการตั้งค่า RAID ทั้งหมดเหมือนกัน เช่นเดียวกับแนวคิดที่เราจะกล่าวถึงในคำแนะนำถัดไปและขั้นสุดท้ายของซีรี่ส์นี้ (การจัดการ RAID)

หากคุณมีคำถามใดๆ เกี่ยวกับบทความนี้ โปรดแจ้งให้เราทราบโดยใช้แบบฟอร์มความคิดเห็นด้านล่าง เราหวังว่าจะได้ยินจากคุณ!