mdadm raid5 กู้คืนความล้มเหลวของดิสก์สอง - ด้วยการบิด (ลำดับไดรฟ์)


14

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

ความผิดพลาด # 0 ไม่มีการสำรองข้อมูล 100% ฉันรู้ว่า.

ฉันมีmdadmระบบ RAID5 4x3TB ไดรฟ์ / dev / SD [จะ] /dev/sd[b-e]1ทั้งหมดที่มีหนึ่งพาร์ทิชัน ฉันรู้ว่า RAID5 บนไดรฟ์ที่มีขนาดใหญ่มากมีความเสี่ยง แต่ฉันก็ทำเช่นนั้นต่อไป

เหตุการณ์ล่าสุด

RAID ลดลงหลังจากความล้มเหลวของไดรฟ์สองตัว หนึ่งไดรฟ์ [/ dev / sdc] หายไปจริงๆอีกอันหนึ่ง [/ dev / sde] กลับมาขึ้นหลังจากวัฏจักรพลังงาน แต่ไม่ได้ถูกเพิ่มเข้าไปใน RAID อีกครั้งโดยอัตโนมัติ ดังนั้นฉันจึงเหลืออุปกรณ์ RAID 4 ตัวที่มีเพียง 2 ไดรฟ์ที่ใช้งานอยู่ [/ dev / sdb และ / dev / sdd]

ความผิดพลาด # 1 ไม่ได้ใช้ dd สำเนาของไดรฟ์เพื่อกู้คืน RAID ฉันไม่มีไดรฟ์หรือเวลา ความผิดพลาด # 2 ไม่ได้ทำการสำรอง superblock และmdadm -Eไดรฟ์ที่เหลืออยู่

พยายามกู้คืน

ฉันประกอบชิ้นส่วน RAID อีกครั้งในโหมดที่ลดระดับลงด้วย

mdadm --assemble --force /dev/md0, using /dev/sd[bde]1.

ฉันสามารถเข้าถึงข้อมูลของฉันได้ ฉันแทนที่/dev/sdcด้วยอะไหล่; ว่าง; ไดรฟ์ที่เหมือนกัน

ฉันลบเก่า/dev/sdc1ออกจาก RAID

mdadm --fail /dev/md0 /dev/sdc1

ความผิดพลาด # 3 ไม่ทำสิ่งนี้ก่อนเปลี่ยนไดรฟ์

ฉันแบ่งพาร์ติชันใหม่/dev/sdcแล้วเพิ่มลงใน RAID

mdadm --add /dev/md0 /dev/sdc1

จากนั้นจึงเริ่มกู้คืน RAID ETA 300 นาที ฉันติดตามกระบวนการผ่าน/proc/mdstatไปที่ 2% แล้วก็ไปทำสิ่งอื่น

ตรวจสอบผลลัพธ์

หลายชั่วโมง (แต่น้อยกว่า 300 นาที) ในภายหลังฉันตรวจสอบกระบวนการ /dev/sde1มันได้หยุดเนื่องจากข้อผิดพลาดในการอ่าน

นี่คือที่ที่ปัญหาเริ่มต้นจริง

ฉันลบออก/dev/sde1จาก RAID และเพิ่มใหม่อีกครั้ง ฉันจำไม่ได้ว่าทำไมฉันถึงทำอย่างนี้ มันก็สาย.

mdadm --manage /dev/md0 --remove /dev/sde1
mdadm --manage /dev/md0 --add /dev/sde1

อย่างไรก็ตาม/dev/sde1ถูกทำเครื่องหมายเป็นอะไหล่ ดังนั้นฉันจึงตัดสินใจสร้างอาร์เรย์ทั้งหมดอีกครั้งโดยใช้ - ทำความสะอาดโดยใช้สิ่งที่ฉันคิดว่าเป็นลำดับที่ถูกต้องและ/dev/sdc1หายไป

mdadm --create /dev/md0 --assume-clean -l5 -n4 /dev/sdb1 missing /dev/sdd1 /dev/sde1

ใช้งานได้ แต่ระบบไฟล์ไม่ได้รับการยอมรับขณะพยายามเมาต์ (ควรเป็น EXT4)

สั่งซื้ออุปกรณ์

จากนั้นฉันตรวจสอบข้อมูลสำรองล่าสุดที่ฉันมี/proc/mdstatและพบคำสั่งไดรฟ์

md0 : active raid5 sdb1[0] sde1[4] sdd1[2] sdc1[1]
      8790402048 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/4] [UUUU]

จากนั้นฉันก็จำได้ว่า RAID ตัวนี้ได้รับความเสียหายจากไดรฟ์ประมาณหนึ่งปีที่ผ่านมาและกู้คืนมาได้โดยการเปลี่ยนไดรฟ์ที่ชำรุดด้วยอะไหล่สำรอง นั่นอาจทำให้สัญญาณรบกวนอุปกรณ์สั่งเล็กน้อย ... ดังนั้นจึงไม่มีไดรฟ์ [3] แต่มีเพียง [0], [1], [2] และ [4]

ฉันพยายามค้นหาลำดับไดรฟ์ด้วยสคริปต์ Permute_array: https://raid.wiki.kernel.org/index.php/Permute_array.plแต่ไม่พบคำสั่งที่ถูกต้อง

คำถาม

ตอนนี้ฉันมีคำถามสองข้อหลัก:

  1. ฉันเมายิ่งยวด superblock ทั้งหมดบนไดรฟ์ แต่ให้:

    mdadm --create --assume-clean
    

    คำสั่ง (ดังนั้นฉันไม่ควรเขียนทับข้อมูลตัวเองอยู่/dev/sd[bde]1ฉันว่าถูกต้องหรือไม่ในทางทฤษฎีแล้ว RAID สามารถกู้คืนได้ (สมมติว่าสักครู่/dev/sde1ก็โอเค) ถ้าฉันเพิ่งพบลำดับอุปกรณ์ที่ถูกต้อง?

  2. จำเป็นหรือไม่ที่/dev/sde1จะต้องระบุหมายเลขอุปกรณ์ [4] ใน RAID? เมื่อฉันสร้างมันด้วย

    mdadm --create /dev/md0 --assume-clean -l5 -n4 \
      /dev/sdb1 missing /dev/sdd1 /dev/sde1
    

    มันถูกกำหนดหมายเลข [3] ฉันสงสัยว่าเกี่ยวข้องกับการคำนวณของบล็อกพาริตีหรือไม่ หากปรากฏว่ามีความสำคัญฉันจะสร้างอาร์เรย์ใหม่โดย/dev/sdb1[0]ไม่มี [1] หายไปได้/dev/sdd1[2] /dev/sde1[4]อย่างไร หากฉันสามารถใช้งานได้ฉันสามารถเริ่มใช้งานได้ในโหมดลดระดับและเพิ่มไดรฟ์ใหม่/dev/sdc1และปล่อยให้ซิงค์อีกครั้ง

ไม่เป็นไรหากคุณต้องการชี้ให้ฉันเห็นว่านี่อาจไม่ใช่วิธีการที่ดีที่สุด แต่คุณจะพบว่าฉันเข้าใจสิ่งนี้ มันจะดีถ้าใครมีคำแนะนำใด ๆ


1
+1 นี่เป็นคำถามที่คิดมากและเป็นเอกสาร ฉันหวังว่าฉันจะได้คำตอบสำหรับคุณ
สิทธิ์

ขอบคุณสำหรับความคิดเห็นของคุณฉันคิดว่านี่เป็นงานที่ยาก
Peter Bos

คุณยอมแพ้กับสิ่งนี้หรือยังทำงานอยู่ใช่ไหม? หากคุณกำลังทำงานอยู่คำแนะนำของฉันจะตรวจสอบไดรฟ์ทั้งหมดที่คุณวางไว้และสร้าง JBOD บนเครื่องอื่นที่คุณสามารถสร้างภาพ DD ได้มันเป็นวิธีที่ดีกว่าที่จะจัดการกับมันด้วยวิธีนี้เพราะคุณสามารถลองซ้ำแล้วซ้ำอีก . (ใช้ LVM จากนั้นใช้สแน็ปช็อตเมื่อเสร็จสิ้นเพื่อให้คุณสามารถลบสแน็ปช็อตต่อไปและไม่ต้องคัดลอกใหม่ทั้งหมด) ฉันอยู่ในเรือลำเดียวกันและฉันจัดการเพื่อกู้คืนอาร์เรย์ด้วยข้อมูลส่วนใหญ่ที่ไม่บุบสลาย
รีแกน

ขอบคุณสำหรับปฏิกิริยาของคุณ หลังจากที่ในขณะที่ฉันให้ขึ้นนี้แทนที่สองไดรฟ์ใหม่ไดรฟ์กู้คืน 98% จากการสำรองข้อมูลยอมรับการสูญหายของข้อมูล 2% และย้ายไป ตอนนี้ฉันใช้ RAID-Z และได้อัปเดตกลยุทธ์การสำรองข้อมูลของฉันแล้ว จนถึงตอนนี้ดีมาก
Peter Bos

คำตอบ:


3

เพื่อตอบคำถามของคุณ

  1. สามารถกู้คืนได้หรือไม่

    • สิ่งแรกคือก่อน - หยุดลองนั่งคิดดูซักหน่อย ใช่อัลกอริทึมขนาดก้อนและลำดับของดิสก์มีความสำคัญต่อการได้รับระบบไฟล์ใด ๆ ก็ตามที่มีอยู่เพื่อประกอบใหม่อย่างถูกต้อง แต่เนื่องจากคุณเขียนทับซุปเปอร์บล็อกแล้วตอนนี้คุณจะถูกลองผิดลองถูก
    • ประการที่สองมีวิธีใดบ้างที่คุณสามารถดึงข้อมูลเค้าโครงดิสก์ก่อนหน้าได้ ฉันมักจะทำ mdadm --detail> backupfile เพียงเพื่อให้เค้าโครงดิสก์นั้นปลอดภัย ตรวจสอบ dmesg, / var / log เพื่อดูว่ามีการกำหนดค่าดิสก์อย่างไรบ้างในการโจมตี
    • สุดท้ายถ้าคุณตรงกับขนาดก้อนก่อนหน้าและคำสั่งดิสก์คุณอาจเสียหาย ext4 superblock - มีวิธีที่จะสแกน superblock อื่น ๆ อย่างรวดเร็ว (และมีโปรแกรมที่เรียกว่า TestDisk ที่สแกนหา superblocks ของระบบไฟล์ที่มีอยู่แล้วและพยายามเรียกดูพวกเขา ด้วยตนเอง: http://www.cgsecurity.org/wiki/Main_Page )
  2. เนื่องจาก sdc เป็นของใหม่ฉันจะลองต่อไปและประกอบกันด้วยตนเองผ่าน clause ที่หายไปและใช่ sde ต้องอยู่ในลำดับที่ถูกต้องเพื่อที่จะประกอบในโหมดที่เสื่อมโทรม เมื่อคุณพบเลย์เอาต์ที่ถูกต้องแล้วให้คัดลอกข้อมูลทั้งหมดออกจากอาเรย์แล้วเริ่มใหม่อีกครั้งจัดทำเอกสารเลย์เอาต์ (ดังนั้นคุณจะไม่พบปัญหานี้อีก)

โชคดี


1
ext3 / 4 เขียนซุปเปอร์บล็อกซ้ำซ้อน คุณสามารถส่งค่า superblock ชดเชยเป็นอาร์กิวเมนต์เพื่อเมานต์หรือ fsck เพื่อใช้ superblock สำรองแทน ถึงกระนั้นสองไดรฟ์ลงในเกม RAID 5 =
dmourati

1

ก่อนที่คุณจะทำสิ่งใดให้จับ 'mdadm --examine / dev / sdX1' สำหรับแต่ละไดรฟ์ที่อยู่ในอาร์เรย์ของคุณและ 'mdadm --detail / dev / md0' จากนั้นคุณควรจะสามารถกำหนดได้ รูปแบบที่แน่นอน

ฉันต้องทำด้วยตัวเองเพื่อกู้คืนอาร์เรย์ Synology ในคำถามที่แยกต่างหาก:

วิธีการกู้คืนอาร์เรย์ mdadm บน Synology NAS ด้วยไดรฟ์ในสถานะ "E"

แก้ไข: ขออภัยเพิ่งเห็นว่าคุณพูดว่าคุณทำ Superblock ในไดรฟ์ทั้งหมดหาย

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


1

คำถามนี้เก่าและฉันแน่ใจว่าไม่มีใครสามารถช่วยคุณได้ แต่สำหรับคนอื่นที่อ่าน:

ความผิดพลาดที่อันตรายที่สุดที่คุณทำไม่ใช่หมายเลขที่คุณต้องดำเนินการ:

mdadm --create ...

บนดิสก์ดั้งเดิมก่อนที่คุณจะพร้อมที่จะรู้ว่าต้องทำอะไร สิ่งนี้เขียนทับข้อมูลเมตาดังนั้นคุณไม่มีบันทึกของคำสั่งไดรฟ์ออฟเซ็ตข้อมูลขนาดก้อน ฯลฯ

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

mdadm --create /dev/md0 --assume-clean --metadata=1.2 --raid-devices=4 --level=5 --layout=... --chunk=512 --data-offset=128M /dev/sdb1 missing /dev/sdd1 /dev/sde1

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

เมื่อคุณพบข้อโต้แย้งบางอย่างที่สร้างอาร์เรย์การทำงานที่คุณสามารถ fsck หรือ mount และตรวจสอบ (เช่นตรวจสอบ checksum ของไฟล์ที่มีขนาดใหญ่พอที่จะครอบคลุมทั่วสมาชิกโจมตีทั้งหมดเช่น iso ซึ่งคุณควรเก็บไว้กับ checksum / pgp ลายเซ็นหรือ unzip -t หรือ gunzip -ta เก็บขนาดใหญ่)


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