วิธีการแทนที่ดิสก์ที่ยังไม่ได้ล้มเหลวในอาร์เรย์ Linux RAID5 อย่างปลอดภัยได้อย่างไร


26

ฉันมีซอฟต์แวร์ RAID5 array (Linux md) บนดิสก์ 4 ตัว

ฉันต้องการแทนที่หนึ่งในดิสก์ด้วยดิสก์ใหม่โดยไม่ต้องวางอาร์เรย์ในสถานะที่เสื่อมโทรมและหากเป็นไปได้ออนไลน์ มันจะเป็นไปได้ยังไง?

มันสำคัญเพราะฉันไม่ต้องการ:

  • รับความเสี่ยงที่จะเกิดความเครียดกับดิสก์อื่นดังนั้นอาจเกิดปัญหาระหว่างการสร้างใหม่
  • รับความเสี่ยงที่จะอยู่ในสถานะ "ไม่เสมอภาค" ดังนั้นฉันจึงไม่มีเครือข่ายความปลอดภัยในบางครั้ง

ฉันคิดว่าการทำเช่นนั้นออนไลน์เป็นการถามมากเกินไปและฉันควรคัดลอกข้อมูลดิบ ( dd) ข้อมูลของดิสก์เก่าไปยังดิสก์ใหม่แบบออฟไลน์แล้วแทนที่ แต่ฉันคิดว่าเป็นไปได้ในทางทฤษฎี ...

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

คำตอบ:


36

ใช้ mdadm 3.3

ตั้งแต่mdadm3.3 (เปิดตัว 2013, 3 ก.ย. ) หากคุณมีเคอร์เนล 3.2+คุณสามารถดำเนินการดังนี้:

# mdadm /dev/md0 --add /dev/sdc1
# mdadm /dev/md0 --replace /dev/sdd1 --with /dev/sdc1

sdd1เป็นอุปกรณ์ที่คุณต้องการแทนที่sdc1เป็นอุปกรณ์ที่ต้องการให้ทำและจะต้องประกาศเป็นอะไหล่ในอาร์เรย์ของคุณ

--withตัวเลือกที่จะเป็นตัวเลือกถ้าไม่ได้ระบุใดว่างที่มีอยู่จะถูกนำมาใช้

รุ่น mdadm ที่เก่ากว่า

หมายเหตุ: คุณยังคงต้อง3.2+ เคอร์เนล

ก่อนอื่นให้เพิ่มไดรฟ์ใหม่เป็นอะไหล่ (แทนที่md0และsdc1ด้วย RAID และอุปกรณ์ดิสก์ตามลำดับ):

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

จากนั้นเริ่มต้นการดำเนินการคัดลอกแทนที่เช่นนี้ ( sdd1เป็นอุปกรณ์ที่ล้มเหลว):

# echo want_replacement > /sys/block/md0/md/dev-sdd1/state 

ผล

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

หมายเหตุ:เครดิตไปที่frostschutzและAnsgar Esztermannที่พบวิธีแก้ปัญหาเดิม (ดูคำถามที่ซ้ำกัน )

เมล็ดแก่

คำตอบอื่น ๆ แนะนำ:

  • วิธีการของจอห์นนี่ : แปลงอาเรย์เป็น RAID6, "แทนที่" ดิสก์จากนั้นกลับสู่ RAID5
  • Hauke Laging 's วิธีการ : สั้น ๆ เอาดิสก์จากอาร์เรย์ RAID5 ทำให้มันเป็นส่วนหนึ่งของ RAID1 (กระจก) กับดิสก์ใหม่และเพิ่มที่กระจกไดรฟ์กลับไปที่ RAID5 array (ทฤษฎี) ...

2
mdadm --addยังคงมีความจำเป็นก่อนที่--replaceจะทำงาน ( mdadm3.3, Ubuntu 15.10) หากคุณทำ--addหลังจาก--replaceนั้นการคัดลอกจะเริ่มขึ้นทันทีที่มีการเพิ่มอะไหล่ (อุปกรณ์ยังคงทำเครื่องหมายว่า "ต้องการเปลี่ยน")
Peter Cordes

3

อาจเป็นไปได้ตามข้อกำหนด

  1. ออนไลน์
  2. ไม่ต้องเครียดกับดิสก์ใด ๆ ยกเว้นสำหรับอันที่จะถูกแทนที่

แต่แม้ว่าสิ่งต่อไปนี้อาจใช้ได้คุณอาจไม่พบคำแนะนำใด ๆ "ในหนังสือ" ...

ความคิด:

  1. นำดิสก์ OLD ออกจากอาร์เรย์ (ชั่วครู่): mdadm --manage /dev/raid5 --fail /dev/OLD
  2. สร้างอุปกรณ์ md ใหม่ (RAID-1) จากดิสก์ OLD และใหม่: mdadm --build /dev/md42 --level=mirror --raid-devices=2 /dev/OLD /dev/NEW
  3. วาง RAID-1 ไว้ในอาร์เรย์ (แทนที่จะเป็น / dev / OLD): mdadm --manage /dev/raid5 --re-add /dev/md42

สิ่งที่ควร :-) เกิดขึ้น:

  1. RAID-5 ได้รับ / dev / md42 ในการซิงค์ ไม่ควรใช้เวลานาน
  2. RAID-5 นั้นใช้งานได้ตามปกติอีกครั้ง (แต่ช้ากว่า)
  3. / dev / NEW ถูกซิงค์กับ / dev / OLD

ดูความคืบหน้าการซิงค์ ( cat /proc/mdstatหรือmdadm --monitor) หากการซิงค์เสร็จสิ้นให้นำ RAID-1 ออกจาก RAID-5 ให้หยุด RAID-1 เพิ่ม / dev / NEW ไปยัง RAID-5 อีกครั้ง หากทุกอย่างเรียบร้อยเขียนทับ mdraid superblocks ใน / dev / OLD เพื่อหลีกเลี่ยงปัญหาmdadm --zero-superblock

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


3

ถ้าคุณไม่สนใจใช้ RAID-6 (ดิสก์ 2 พาริตี้มากกว่า 1) และถ้าคุณใช้ mdadmin 3.1.x หรือสูงกว่าคุณสามารถแปลงอาร์เรย์ RAID-5 ของคุณเป็น RAID-6เพื่อเพิ่มดิสก์พาริตี้เพิ่มเติม . สิ่งนี้จะวางอาร์เรย์ภายใต้ความกดดันในระหว่างการสร้างใหม่ และมันก็มีผลกระทบต่อประสิทธิภาพการทำงานบางอย่างเนื่องจากมีดิสก์พาริตี้ที่ต้องอัพเดตระหว่างการเขียน

แต่ถ้ามันทำสำเร็จแล้วคุณสามารถเก็บดิสก์ที่ล้มเหลวไว้ได้และเมื่อมันล้มเหลวในที่สุดคุณก็ยังได้รับการปกป้องแบบพาริตี้สำหรับอาร์เรย์ ฉันคิดว่าคุณสามารถแปลงอาเรย์จาก RAID6 กลับไปเป็น RAID5 ได้ถ้าคุณไม่รอให้มันเป็น RAID6

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


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