วิธีที่ดีที่สุดในการปลูกฝังซอฟต์แวร์ Linux RAID 1 เป็น RAID 10


22

mdadm ดูเหมือนจะไม่รองรับการเติบโตของอาเรย์ตั้งแต่ระดับ 1 ถึงระดับ 10

ฉันมีดิสก์สองแผ่นใน RAID 1 ฉันต้องการเพิ่มดิสก์ใหม่สองแผ่นและแปลงอาร์เรย์เป็นดิสก์ RAID 10 จำนวนสี่แถว

กลยุทธ์ปัจจุบันของฉัน:

  1. ทำการสำรองข้อมูลที่ดี
  2. สร้างอาร์เรย์ RAID 10 ดิสก์ 4 อันดับที่ลดลงด้วยดิสก์ที่หายไปสองแผ่น
  3. rsync the RAID 1 array with the RAID 10 array.
  4. fail and remove หนึ่งดิสก์จากอาร์เรย์ RAID 1
  5. เพิ่มดิสก์ที่พร้อมใช้งานลงในอาร์เรย์ RAID 10 และรอการซิงค์ใหม่ให้เสร็จสมบูรณ์
  6. ทำลายอาร์เรย์ RAID 1 และเพิ่มดิสก์ตัวสุดท้ายลงในอาร์เรย์ RAID 10

ปัญหาคือการขาดความซ้ำซ้อนในขั้นตอนที่ 5

มีวิธีที่ดีกว่า?


5
อย่าลืมขั้นตอนที่ 0 สำรองข้อมูลทุกอย่างไว้อย่างดี
Anthony Lewis

ฉันเชื่อว่าขั้นตอนของคุณถูกต้อง คุณสูญเสียความซ้ำซ้อนในช่วงเวลาที่คุณคัดลอกข้อมูลจากชุดหนึ่งไปอีกชุดหนึ่ง
Kevin Kuphal

เป็นไปได้ไหมที่จะสร้าง 4disk RAID10 ที่ลดระดับลง?
pauska

1
ใช่คุณเพียงแค่ใช้ "/ dev / hda missing / dev / hdb missing" เพราะมิฉะนั้นคุณจะเสียทั้งคู่และมันก็แยกกัน "คำตอบที่ยอมรับ" สำหรับคำถามนี้โดยบังเอิญมีความผิดทั้งหมดและไม่สามารถใช้งานได้
womble

ฉันกำลังมองหาวิธีที่ดีในการทำเช่นนี้และฉันคิดว่าวิธีที่อธิบายไว้ในคำถามนั้นดีที่สุดที่ฉันพบ คำตอบของ Mark Turner ไม่ได้ช่วยอะไรเพราะมันสร้างอาเรย์ 2 อุปกรณ์ที่ไม่สามารถเปลี่ยนรูปร่างเป็น 4 อุปกรณ์ได้ (ส่วนอีก 2 สามารถเพิ่มเป็นอะไหล่ได้) และคำตอบของ Suresh Kumar ก็เหมือนกับที่อธิบายไว้ในคำถามยกเว้นว่ามันจะไม่ทำงานอย่างนั้น อุปกรณ์ที่หายไปจะต้องเป็นอุปกรณ์ที่ 2 และ 4 ไม่ใช่อุปกรณ์ที่ 3 และ 4 เกี่ยวกับขั้นตอนในคำถาม: ฉันคิดว่าขั้นตอนที่ 5 มีความซ้ำซ้อนเต็มและขั้นตอนที่ 6 มีความซ้ำซ้อนสำหรับข้อมูลครึ่งหนึ่ง จริง ๆ แล้วฉันเห็นว่าขั้นตอนต่าง ๆ ถูก
ยกเลิก

คำตอบ:


8

ด้วย linux softraid คุณสามารถสร้างอาร์เรย์ RAID 10 ด้วยดิสก์เพียงสองแผ่น

ชื่ออุปกรณ์ที่ใช้ด้านล่าง:

  • md0 เป็นอาร์เรย์เก่าของประเภท / ระดับ RAID1
  • md1 เป็นอาร์เรย์ใหม่ของประเภท / ระดับ RAID10
  • sda1และsdb2เป็นพาร์ติชันใหม่ว่างเปล่า (ไม่มีข้อมูล)
  • sda2และsdc1เป็นพาร์ติชันเก่า (พร้อมข้อมูลสำคัญ)

แทนที่ชื่อเพื่อให้เหมาะกับกรณีการใช้งานของคุณ ใช้เช่นlsblkเพื่อดูเค้าโครงปัจจุบันของคุณ

0) Backup, Backup, Backup, Backup oh และ BACKUP

1)สร้างอาร์เรย์ใหม่ (4 อุปกรณ์: 2 ที่มีอยู่ 2 ขาดหายไป):

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

โปรดทราบว่าในโครงร่างตัวอย่างนี้sda1มีคู่ที่ขาดหายไปและsdb2มีอีกคู่ที่ขาดหายไป ข้อมูลของคุณในตอนmd1นี้ไม่ปลอดภัย (อย่างมีประสิทธิภาพคือ RAID0 จนกว่าคุณจะเพิ่มสมาชิกที่หายไป)

ในการดูเลย์เอาต์และรายละเอียดอื่น ๆ ของการใช้อาเรย์ที่สร้างขึ้น:

mdadm -D /dev/md1

บันทึก! คุณควรบันทึกเลย์เอาต์ของอาร์เรย์:

# View current mdadm config:
cat /etc/mdadm/mdadm.conf
# Add new layout (grep is to make sure you don't re-add md0):
mdadm --detail --scan | grep "/dev/md1" | tee -a /etc/mdadm/mdadm.conf
# Save config to initramfs (to be available after reboot)
update-initramfs -u

2)ฟอร์แมตและเมานต์ /dev/md1ควรจะใช้งานได้ทันที แต่จะต้องมีการจัดรูปแบบและติดตั้งแล้ว

3)คัดลอกไฟล์ ใช้เช่น rsync เพื่อคัดลอกข้อมูลจาก RAID 1 เก่าไปยัง RAID 10 ใหม่ (นี่เป็นเพียงคำสั่งตัวอย่างอ่าน man pages สำหรับ rsync)

rsync -arHx / /where/ever/you/mounted/the/RAID10

4) Fail ส่วนที่ 1 ของ RAID1 เก่า (md0) และเพิ่มไปยัง RAID10 ใหม่ (md1)

mdadm /dev/md0 --fail /dev/sda2 --remove /dev/sda2
mdadm /dev/md1 --add /dev/sda2

บันทึก! sda2นี้จะเช็ดออกข้อมูลจาก md0ควรจะยังคงใช้งานได้ แต่ถ้าสมาชิกโจมตีอื่น ๆ ได้ดำเนินการอย่างเต็มที่

นอกจากนี้ยังทราบว่าเรื่องนี้จะเริ่มต้นกระบวนการซิงค์ / md1กู้คืน ในการตรวจสอบสถานะใช้หนึ่งในคำสั่งด้านล่าง:

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

รอจนกว่าการกู้คืนจะเสร็จสิ้น

5)ติดตั้ง GRUB บน Array ใหม่ (สมมติว่าคุณกำลังบูทจากมัน) ซีดีกู้คืน / บูต Linux ทำงานได้ดีที่สุด

6) Boot บนอาเรย์ใหม่ ถ้ามันทำงานถูกต้องทำลายอาร์เรย์เก่าและเพิ่มดิสก์ที่เหลือลงในอาร์เรย์ใหม่

จุดกลับไม่มี

ณ จุดนี้คุณจะทำลายข้อมูลของสมาชิกสุดท้ายของอาร์เรย์ md0 เก่า ต้องแน่ใจว่าทุกอย่างทำงานได้อย่างแน่นอน

mdadm --stop /dev/md0
mdadm /dev/md0 --remove /dev/sdc1
mdadm /dev/md1 --add /dev/sdc1

และอีกครั้ง - รอจนกว่าการกู้คืนmd1จะเสร็จสิ้น

# status of sync/recovery
cat /proc/mdstat
# details
mdadm -D /dev/md1

7)อัปเดตการกำหนดค่า mdadm

อย่าลืมอัปเดต/etc/mdadm/mdadm.conf(ลบ md0)

และบันทึกการกำหนดค่าเพื่อเริ่มต้น (จะใช้ได้หลังจากรีบูต)

update-initramfs -u

1
ดิสก์ทั้งสี่นั้นมาจากไหน?
womble

ใช่มั้ย? ฉันระบุอย่างชัดเจนเพื่อสร้างอาเรย์ด้วย 2 ดิสก์คัดลอกข้อมูลล้มเหลวในการจู่โจม 1 โดยการเอาหนึ่งดิสก์เพิ่มดิสก์นั้นลงใน RAID10 จากนั้นบูตไปยัง RAID10 ถ้าทำงานได้ทำลาย RAID1 และย้ายดิสก์สุดท้ายนั้นไป RAID ใหม่ ....
Mark Turner

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

2
ฉันรันคำสั่งตามที่คุณให้ไว้และฉันก็จบลงด้วยดิสก์สอง RAID-10 ที่มีสองอะไหล่ตามที่แสดงโดย / proc / mdstat นี่คือเคอร์เนล 2.6.30 พร้อม mdadm v2.6.7.2
womble

3
"mdadm: raid10 array / dev / md1 ไม่สามารถเปลี่ยนรูปร่างได้" นี่คือยังกล่าวถึงใน mdadm manpage
womble

9

ทำตามขั้นตอนเดียวกับ Mark Turner แต่เมื่อคุณสร้างอาร์เรย์การโจมตีให้ระบุดิสก์ที่หายไป 2 แผ่น

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda1 missing /dev/sdb2 missing

จากนั้นดำเนินการตามขั้นตอนอื่น ๆ

กล่าวโดยสรุปให้สร้าง RAID10 ที่มีดิสก์ทั้งหมด 4 แผ่น (ซึ่งหายไป 2 ตัว) ซิงค์ใหม่เพิ่มดิสก์อีกสองแผ่นหลังจากนั้น


6

เพิ่งจะเสร็จสิ้นจาก LVM บนดิสก์ 2TB 2 mdadm RAID 1 ถึง LVM บนดิสก์ RAID 10 สี่ตัว (สองต้นฉบับ + ดิสก์ใหม่สองแผ่น)

ดังที่ @aditsu จดบันทึกลำดับของไดรฟ์นั้นมีความสำคัญเมื่อสร้างอาร์เรย์

mdadm -v --create /dev/md1 --level=raid10 --raid-devices=4 /dev/sda missing /dev/sdb missing

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

ขั้นตอนสำหรับสถานการณ์ของฉัน:

  1. ทำการสำรองข้อมูลที่ดี

  2. สร้างอาร์เรย์ RAID 10 ดิสก์ 4 อันดับที่ลดลงด้วยดิสก์ที่หายไปสองแผ่น (เราจะเรียกดิสก์ที่ขาดหายไป # 2 และ 4)

  3. บอกภรรยาว่าอย่าเปลี่ยน / เพิ่มไฟล์ใด ๆ ที่เธอใส่ใจ

  4. ล้มเหลวและลบหนึ่งดิสก์ออกจากอาร์เรย์ RAID 1 (ดิสก์ 4)

  5. ย้ายส่วนขยายทางกายภาพจากอาร์เรย์ RAID 1 ไปยังอาร์เรย์ RAID 10 โดยปล่อยให้ดิสก์ 2 ว่างเปล่า

  6. ฆ่าอาเรย์ RAID 1 ที่ใช้งานอยู่เพิ่มดิสก์เปล่าตอนนี้ (ดิสก์ 2) ลงในอาเรย์ RAID 10 และรอการซิงค์ใหม่ให้เสร็จสมบูรณ์

  7. เพิ่มดิสก์แรกที่ถูกลบออกจาก RAID 1 (ดิสก์ 4) ไปยังอาร์เรย์ RAID 10

  8. ให้ภรรยาเดินหน้าต่อไป

ในขั้นตอนที่ 7 ฉันคิดว่าไดรฟ์ 1, 2 หรือ 4 สามารถล้มเหลว (ในระหว่างการซิงค์ดิสก์ 4) โดยไม่ฆ่าอาเรย์ หาก 3 ไดรฟ์ล้มเหลวข้อมูลในอาร์เรย์คือขนมปัง


+1 โดยเฉพาะอย่างยิ่งสำหรับขั้นตอนที่ 3;)

-1, คำสั่งไม่ชัดเจนไม่มีภรรยาเสียข้อมูลของฉัน
ZAB

1

ฉันได้ย้าย raid1 ของฉันไปที่ raid10 ในขณะนี้และในขณะที่หน้านี้ช่วยฉันได้ แต่มีบางสิ่งที่ขาดหายไปในคำตอบข้างต้น โดยเฉพาะอย่างยิ่งเป้าหมายของฉันคือการรักษาวันเกิด ext4

การตั้งค่าคือ:

  • 2 raid1 ดิสก์ของแต่ละประเภท msdos และ md0 กับ ext4 พาร์ติชันและ mbr กับ msdos
  • 2 ดิสก์ใหม่สดกลายเป็นอุปกรณ์ใหม่ (ขนาดเดียวกันทั้งหมด)
  • ส่งผลให้ดิสก์ 4 raid md127 ext4 แต่เนื่องจากขนาดฉันต้องเปลี่ยนจากmbr เป็น gpt
  • เป็นโฮมดิสก์ของฉันดังนั้นจึงไม่จำเป็นต้องติดตั้งหรือใช้ bootmanager
  • ใช้ Ubuntu ทุกวันของฉัน (ดังนั้น: ไม่ใช้แผ่นดิสก์ช่วยเหลือภายนอก)
  • ใช้ gparted, dd และ mdadm

ดังที่ทุกคนกล่าวไว้ก่อนหน้า: ขั้นตอนศูนย์ควรจะสำรองข้อมูลและอาจมีบางสิ่งผิดปกติในกระบวนการที่ทำให้เกิดดาต้าossมาก

  1. การสำรองข้อมูล

  2. การตั้งค่าของการจู่โจมใหม่

    1. สร้างการจู่โจมใหม่

      mdadm -v --create /dev/md127 --level=raid10 --raid-devices=4 /dev/sdb1 missing /dev/sde1 missing
      

      (ฉันพบว่าเลย์เอาต์มีความสำคัญ .. ที่ 2 และ 4 ดูเหมือนจะซ้ำกันในการโจมตี 'ใกล้' เริ่มต้น)

    2. ตั้งค่าพาร์ติชั่นของการจู่โจมที่ฉันใช้ gparted ตั้งค่า gpt บน md127 แล้วเพิ่มพาร์ติชั่นใหม่ (ext4) ขนาดเท่าเดิมหรือมากกว่า
  3. โยกย้าย

    1. ตอนนี้รับข้อมูลมากกว่า ... ฉันเป็นคนแรกที่พยายามใช้ rsync ซึ่งทำงานได้ แต่ล้มเหลวในการเก็บวันเกิด ... ใช้ dd เพื่อโคลนจากการจู่โจมเก่าไปยังใหม่

      dd if=/dev/md0 of=/dev/md127p1 bs=1M conv=notrunc,noerror,sync
      

      รอมัน
      คุณสามารถตรวจสอบด้วยการส่ง USR1 ไปยังกระบวนการนั้น

      kill -s USR1 <pid>
      
    2. แก้ไขการจู่โจม
      gparted เป็นเครื่องมือที่ยอดเยี่ยม: คุณบอกให้ตรวจสอบและแก้ไขพาร์ติชันและปรับขนาดให้เต็มขนาดของดิสก์นั้นด้วย mouseclicks เพียงไม่กี่;)

    3. ตั้งค่า uuid ใหม่เป็นพาร์ติชั่นนั้นและอัพเดต fstab ของคุณด้วย (เปลี่ยน uuid)

    4. เก็บการโจมตีของคุณไว้ในใจ

      mdadm --examine --scan  >> /etc/mdadm/mdadm.conf
      

      และลบอันเก่าออก

      vim /etc/mdadm/mdadm.conf 
      
    5. รีบูทหากคุณไม่ได้อยู่ใน rescusystem
  4. ทำลายสิ่งเก่า

    1. ล้มเหลวคนแรกและเพิ่มไปยังการโจมตีใหม่

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

      จากนั้นทำ gpt บนอุปกรณ์นั้นและตั้งค่าพาร์ติชันใหม่ที่ว่างเปล่า

      mdadm /dev/md127 --add /dev/sdc1
      

      รอให้มัน
      คุณสามารถตรวจสอบกับ

      cat /proc/mdstat
      
    2. หยุดอันที่สอง

      mdadm --stop /dev/md0 
      

      จากนั้นทำ gpt บนอุปกรณ์ตัวสุดท้ายและตั้งพาร์ทิชันว่างใหม่อีกครั้ง

      mdadm /dev/md127 --add /dev/sdd1
      

      รอให้มันอีกครั้ง


0

ฉันทำกับ LVM การกำหนดค่าเริ่มต้น: - sda2, sdb2 - และสร้าง raid1 md1 ด้านบน sda1 และ sdb1 ถูกใช้สำหรับ raid1 ตัวที่สองสำหรับ / boot partition - md1 คือ pv ในพื้นที่กลุ่มวอลุ่มโดยมี lvm บางส่วนอยู่

ฉันได้เพิ่มดิสก์ sdc และ sdd และสร้างพาร์ทิชันที่นั่นใน sda / sdb

ดังนั้น:

  1. สร้าง md10 เป็น:

    mdadm - สร้าง / dev / md10 - ระดับ raid10 --raid-devices = 4 / dev / sdc2 หายไป / dev / sdd2

  2. ขยาย vg กับมัน:

    pvcreate / dev / md10 พื้นที่ vgextend / dev / md10

  3. ย้ายโวลุ่มจาก md1 ไปที่ md10:

    pvmove -v / dev / md1 / dev / md10

(รอจนกว่าจะเสร็จ) 4. ลดกลุ่มวอลุ่ม:

vgreduce space /dev/md1
pvremove /dev/md1
  1. หยุดอาร์เรย์ md1:

    mdadm -S / dev / md1

  2. เพิ่มดิสก์จาก md1 เก่าไปยัง md10:

    mdadm -a / dev / md10 / dev / sda2 / dev / sdb2

  3. อัปเดตการกำหนดค่าใน /etc/mdadm/mdadm.conf:

    mdadm -E --scan >> / dev / mdadm / mdadm.conf

(และลบเก่า md1)

ทุกสิ่งที่ทำบนระบบสดโดยใช้ปริมาณที่ใช้งานสำหรับ kvm's;)

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