ฉันสามารถสลับไดรฟ์ RAID5 แบบอะตอมมิกในการจู่โจมซอฟต์แวร์ Linux ได้หรือไม่


2

หนึ่งในไดรฟ์ในอาร์เรย์ RAID 3 ดิสก์ของฉันเริ่มแสดงข้อผิดพลาดการอ่านและคำเตือน SMART ไม่เพียงพอที่จะทำให้มันถูกเตะออกจากอาเรย์ (เป็นความผิดพลาด) แต่มันส่งผลต่อประสิทธิภาพและอาจจะแย่ลง (แย่ลง) ฉันต้องการแทนที่ไดรฟ์นี้อย่างชัดเจน

ตอนนี้คำถามคือถ้าฉันเรียกใช้นี้: (sdc เป็นไดรฟ์ที่ใช้งานไม่ได้และ sdd เป็นไดรฟ์ใหม่):

mdadm /dev/md0 -a /dev/sdd1 -f /dev/sdc1 -r /dev/sdc1

Linux จะทำเครื่องหมาย sdc1 เป็นครั้งแรกว่าผิดพลาดหรือไม่อ่านจากนั้นอีกครั้งจากนั้นซิงค์ sdd1 จาก sda1 และ sdb1 (ดิสก์อีกสองตัวในอาร์เรย์) หรือไม่

ถ้าเป็นเช่นนั้นฉันมีความเสี่ยงต่อกรณีที่มีบล็อกที่ไม่สามารถอ่านได้ (แม้แต่บล็อกเดียว!) ใน sda1 หรือ sdb1 และนั่นจะทำให้การสร้างใหม่ล้มเหลว

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

มีวิธีทำออนไลน์หรือไม่ ออฟไลน์ฉันสามารถ:

  • ลงอาร์เรย์ (mdadm - หยุด)
  • dd sdc1 ไปที่ sdd1 (dd if = / dev / sdc1 of = / dev / sdd1)
  • ถอด SDC ออก
  • นำอาร์เรย์ขึ้นมาโดยใช้งานเก่าสองอันและอันใหม่ (mdadm -A -s)
  • resync

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

ดังนั้น "สร้าง sdd1 ใหม่เป็น sdc1 ใหม่รับข้อมูลจาก sda1 และ sdb1 แต่ถ้าพวกเขาล้มเหลวให้คัดลอกสิ่งที่อยู่บน sdc1"


สิ่งนี้ดูไม่เหมือนสิ่งที่ควรเป็น Wiki ชุมชน
เควินเอ็ม

คุณถูก. โง่ของฉัน
Thomas

มีวิธีลบสถานะวิกิชุมชนหรือไม่
Thomas

ไม่ดูตอนสุดท้ายเมื่อ: serverfault.com/questions/4035/…
ThorstenS

คำตอบ:


5

ทีละคำสั่งเหล่านั้นจะไม่ทำในสิ่งที่คุณต้องการ

mdadm / dev / md0 -a / dev / sdd1 
cat / proc / mdstat; # (ตอนนี้คุณควรมีไดรฟ์สำรองใน raid5)
mdadm / dev / md0 -f / dev / sdc1
cat / proc / mdstat; # (ตอนนี้คุณควรเห็นการสร้างใหม่ที่เกิดขึ้นกับ sdd1)

การทดสอบคำสั่งจริงทำให้การสร้างใหม่เกิดขึ้นจริง

อนิจจาฉันไม่เชื่อว่าคุณสามารถทำสิ่งที่คุณปรารถนาได้ในตอนนี้

นอกจากนี้ฉันมักจะอ้างอิงwikiของlinux raidและทำการทดสอบสิ่งที่ฉันเห็นโดยใช้ไฟล์ลูปแบ็ค

dd if = / dev / zero of = loopbackfile.0 bs = 1024k count = 100
losetup / dev / loop0 loopbackfile.0

ที่ให้คุณมีไฟล์ 100 เมกะไบต์ที่มีให้เป็น / dev / loop0 สร้างอีกสองสามคู่และคุณสามารถใช้ mdadm (เช่น "mdadm - สร้าง / dev / md0 --level = 5 - กลัวอุปกรณ์ = 3 / dev / loop0 / dev / loop1 / dev / loop2) โดยไม่มีผลกระทบจริง ไดรฟ์หรือข้อมูล


หมายเหตุฉันเคยบอกว่า

mdadm / dev / md0 -a / dev / sdd1
mdadm --grow / dev / md0 --raid-disk = 4

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



มีค่าเพิ่มหรือไม่โดยการเพิ่มและผิดพลาดในคำสั่งที่แยกต่างหากซึ่งตรงข้ามกับที่ฉันใช้ (ค่อนข้างมากจาก manpage) ของ "mdadm / dev / md0 -a / dev / sdd1 -f / dev / sdc1 -r / dev / sdc1" ?
โทมัส

5

ทดสอบการจู่โจมซอฟต์แวร์ในกล่องทราย!

ฉันขอแนะนำให้คุณเล่น arround ภายในSandbox
ในฐานะที่เป็น mdadm สามารถทำงานกับภาพไฟล์และไม่เพียง แต่กับ devicefiles เหมือน
เช่น/dev/sda or /dev/mapper/vg00/lv_home- ทำไม don`t คุณทดสอบการย้ายถิ่นของคุณ
ภายใน softwarerraid สองบนเครื่องของคุณ:?)

Linux OS

ฉันทำสิ่งนี้ภายใต้เดเบียน / เลนนี่และทุบตี:

# cat /etc/debian_version && uname -r && bash --version
5.0.2
2.6.26-2-amd64
GNU bash, version 3.2.39(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2007 Free Software Foundation, Inc.

ขั้นตอนที่ 1

ในขณะที่ root สร้างดิสเก็ตต์ 4x128MB เช่นนี้(คุณต้องมีพื้นที่ดิสก์ว่างบน 512 MB สำหรับ /)

sudo su 
mkdir -p ~/raidtest/{root,home} && cd ~/raidtest
for i in sd{a,b,c,d} ; do
  dd if=/dev/zero bs=128 count=1M of=$i
done

ให้ดูว่าเกิดอะไรขึ้น:

# ls -hon --time-style=+
total 512M
drwxr-xr-x 2 0 4,0K  home
drwxr-xr-x 2 0 4,0K  root
-rw-r--r-- 1 0 128M  sda
-rw-r--r-- 1 0 128M  sdb
-rw-r--r-- 1 0 128M  sdc
-rw-r--r-- 1 0 128M  sdd

ขั้นตอนที่ 2

การแบ่งไฟล์

ฉันสร้างพาร์ติชัน 3 (20MB, 40MB และ 56MB) สำหรับการแลกเปลี่ยน, / และ / home บน sda ผ่านอุปกรณ์ลูป:

# losetup /dev/loop0 sda
# ! echo "n
p
1

+20M
t
fd
n
p
2

+40M
t
2
fd
n
p
3


t
3
fd
w" | fdisk /dev/loop0

ตกลงดูว่าเกิดอะไรขึ้น:

# fdisk -l /dev/loop0
    Disk /dev/loop0: 134 MB, 134217728 bytes
255 heads, 63 sectors/track, 16 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Disk identifier: 0xe90aaf21

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1               1           3       24066   fd  Linux raid autodetect
/dev/loop0p2               4           9       48195   fd  Linux raid autodetect
/dev/loop0p3              10          16       56227+  fd  Linux raid autodetect

คัดลอกพาร์ทิชันนี้ไปยังวน {1,2,3} ^ = sd {b, c, d}

# losetup /dev/loop1 sdb
# sfdisk -d /dev/loop0 | sfdisk /dev/loop1
# losetup /dev/loop2 sdc
# sfdisk -d /dev/loop0 | sfdisk /dev/loop2
# losetup /dev/loop3 sda
# sfdisk -d /dev/loop0 | sfdisk /dev/loop3

ทางเลือก:หากคุณติดตั้งแยกส่วนแล้วให้เรียกใช้ partprobe บนอุปกรณ์เพื่ออัปเดตตารางเมล็ด

# partprobe /dev/loop0
# partprobe /dev/loop1
# partprobe /dev/loop2
# partprobe /dev/loop3

ขั้นตอนที่ 3

ใช้kpartxเพื่อสร้างอุปกรณ์ต่อพาร์ติชันภายใต้/dev/mapper/

aptitude install kpartx dmsetup
# kpartx -av /dev/loop0
add map loop0p1 (254:3): 0 48132 linear /dev/loop0 63
add map loop0p2 (254:4): 0 96390 linear /dev/loop0 48195
add map loop0p3 (254:5): 0 112455 linear /dev/loop0 144585
# kpartx -av /dev/loop1
add map loop1p1 (254:6): 0 48132 linear /dev/loop1 63
add map loop1p2 (254:7): 0 96390 linear /dev/loop1 48195
add map loop1p3 (254:8): 0 112455 linear /dev/loop1 144585
# kpartx -av /dev/loop2
add map loop2p1 (254:9): 0 48132 linear /dev/loop2 63
add map loop2p2 (254:10): 0 96390 linear /dev/loop2 48195
add map loop2p3 (254:11): 0 112455 linear /dev/loop2 144585
# kpartx -av /dev/loop3
add map loop3p1 (254:12): 0 48132 linear /dev/loop3 63
add map loop3p2 (254:13): 0 96390 linear /dev/loop3 48195
add map loop3p3 (254:14): 0 112455 linear /dev/loop3 144585

ขั้นตอนที่ 4

สร้าง raid5 ของคุณและดูสถานะ
เรายังคงหยั่งราก! บนเวิร์กสเตชันของฉันฉันสวม `t ใช้การโจมตีเพียง LVM ดังนั้นฉันต้องโหลดเคอร์เนลโมดูลและติดตั้งแพคเกจ mdadm

# modprobe raid5
# aptitude install mdadm
# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
unused devices: <none>

ฉันใช้ md {10,11,12} สำหรับการทดสอบนี้ ระวังว่ามันไม่ได้ใช้กับระบบของคุณ (ซึ่งอาจผิดปกติ)!
--force และ -x 0 ถูกใช้เนื่องจากไม่เช่นนั้น mdadm จะทำให้หนึ่งพาร์ติชันเป็นอะไหล่:

## the 20MB Partition
# mdadm --create --force -l 5 -n3 -x 0 /dev/md10 /dev/mapper/loop0p1 /dev/mapper/loop1p1 /dev/mapper/loop2p1
mdadm: array /dev/md10 started.
## the 40MB Partition
# mdadm --create --force -l 5 -n3 /dev/md11-x 0 /dev/mapper/loop0p2 /dev/mapper/loop1p2 /dev/mapper/loop2p2
mdadm: array /dev/md11 started.
## the 56MB Partition
# mdadm --create --force -l 5 -n3 /dev/md12-x 0 /dev/mapper/loop0p3 /dev/mapper/loop1p3 /dev/mapper/loop2p3
mdadm: array /dev/md12 started.

ดูเหมือนว่าตอนนี้:

# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md12 : active raid5 dm-11[2] dm-8[1] dm-5[0]
      112256 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md11 : active raid5 dm-10[2] dm-7[1] dm-4[0]
      96256 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

md10 : active raid5 dm-9[2] dm-6[1] dm-3[0]
      48000 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>

ข้อมูล
ผลลัพธ์ไม่ดี mdstat แสดงเพียงแค่dm-3 .. dm-11meaing /dev/mapper/loop*
แต่ls -lsa /dev/disk/by-idแสดงให้คุณเห็นการทำแผนที่ปัจจุบัน

เอาต์พุตของฉันใน md10 เริ่มต้นด้วย dm-9 (ความหมาย / dev / mapper / loop0p1) เนื่องจากการทดสอบที่ฉันทำในขณะที่เขียนบทความนี้และ LVM ของฉันใช้ dm- {0,1,2}
คุณยังสามารถใช้mdadm --examine --scanหรือข่าวสารเพิ่มเติมอย่างละเอียดผ่านทางmdadm -Q --detail /dev/md10 /dev/md11 /dev/md12

ขั้นตอนที่ 5

ในขณะที่รูทสร้างระบบไฟล์และสลับแบบเงียบ ๆ

# mkswap /dev/md10 > /dev/null 2>&1
# mke2fs -m0 -Lroot /dev/md11 -F > /dev/null 2>&1
# mke2fs -m0 -Lhome /dev/md12 -F > /dev/null 2>&1

เมานต์ Raiddevices ใหม่ของคุณ:

# swapon /dev/md10
# mount /dev/md11 root/
# mount /dev/md12 home/

ดูที่โครงสร้างและหาก / dev / md10 เป็น swap-partition ที่ถูกต้อง:
(เวิร์กสเตชันของฉันยังใช้ / dev / mapper / vg00-swap ดังนั้นลำดับความสำคัญสูงกว่า)

# \tree
.
|-- home
|   `-- lost+found
|-- root
|   `-- lost+found
|-- sda
|-- sdb
|-- sdc
`-- sdd

# cat /proc/swaps
Filename                                Type            Size    Used    Priority
/dev/mapper/vg00-swap                   partition       9764856 53688   -1
/dev/md10                               partition       47992   0       -2

ว้าวทำงานได้ดีมากกับกล่องทราย แต่มันก็เป็นเช่นนั้นเมื่อคุณต้องการเล่นกับ mdadm - ใช้มัน!

ตอนนี้คุณมี raid5 ที่ทำงานอยู่และสามารถทดสอบการโยกย้ายที่
ฉันคิดว่ามีคำตอบที่ยอดเยี่ยมที่นี่ - ทดสอบอย่างระมัดระวังในระบบของคุณ!

ขั้นตอนสุดท้าย

หลังจากเสร็จสิ้นการทดสอบของคุณปิด mds ของคุณและลบของคุณ /dev/loop*

# mdadm --stop /dev/md10
# mdadm --stop /dev/md11
# mdadm --stop /dev/md12
# kpartx -dv /dev/loop0
# kpartx -dv /dev/loop1
# kpartx -dv /dev/loop2
# kpartx -dv /dev/loop3

นำขึ้นมาอีกครั้งหลังจากรีบูต

sudo su
cd ~/raidtest
# connecting the files to /dev/loop*
losetup /dev/loop0 sda
losetup /dev/loop1 sdb
losetup /dev/loop2 sdc
losetup /dev/loop3 sdd

# access to the partions in /dev/loop*
kpartx -av /dev/loop0
kpartx -av /dev/loop1
kpartx -av /dev/loop2
kpartx -av /dev/loop3

# start the raid again
mdadm --assemble /dev/md10 /dev/mapper/loop0p1 /dev/mapper/loop1p1 /dev/mapper/loop2p1
mdadm --assemble /dev/md11 /dev/mapper/loop0p2 /dev/mapper/loop1p2 /dev/mapper/loop2p2
mdadm --assemble /dev/md12 /dev/mapper/loop0p3 /dev/mapper/loop1p3 /dev/mapper/loop2p3

# show active raids
cat /proc/mdstat

หลังการทดสอบ: คัดลอก partitiontable ไปยัง / dev / sdd

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

sfdisk -d /dev/sda | sfdisk /dev/sdd

ตอนนี้คุณสามารถเพิ่ม/dev/sddการจู่โจมของคุณ

ข้อมูล
หากล้มเหลวเนื่องจากผู้ขาย / รุ่นของฮาร์ดดิสก์ที่แตกต่างกันคุณต้องเล่นกับ -uS (sectors), -uB (blocks), -uC (cylinders) or -uM (megabytes)- ปรึกษาman sfdisk!

บางส่วนในชีวิตจริงของฉันที่ P-ATA <-> P-ATA แต่ SCSCI <-> P-ATA ทำงานได้ดียกเว้นว่าขนาดของอุปกรณ์ใหม่จะเท่ากันหรือใหญ่กว่าฮาร์ดดิสก์อื่น ๆ
Softwareraid มีความยืดหยุ่นสูงมาก!

อัปเดต /etc/mdadm/mdadm.conf ของคุณ

หากคุณมี/etc/mdadm/mdadm.confโปรดดูและอัปเดต! mdadm สามารถช่วยให้คุณแสดงไวยากรณ์ที่ถูกต้อง:

mdadm --detail --scan

โชคดี!


0

มีความเสี่ยงที่จะระบุชัดเจนขั้นตอนต่อไปคือการสำรองข้อมูลใช่ไหม หรือเด่นกว่าสอง

ประสบการณ์ของฉันกับการสร้าง RAID5 ใหม่มีโอกาสเกิดความล้มเหลวได้ไม่ว่าด้วยเหตุผลใดก็ตาม

หากคุณกังวลเกี่ยวกับสถานะของ sda1 หรือ sdb1 ให้ปิดการกู้คืนซีดีและตรวจสอบไดรฟ์ออฟไลน์


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

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

RAID ไม่ใช่กลยุทธ์การสำรองข้อมูลของฉัน นั่นไม่ใช่สิ่งที่ฉันพูด ใช่ฉันจะทดสอบอ่านไดรฟ์ล่วงหน้า
โทมัส

0

ฉันไม่แน่ใจ แต่ฉันเชื่อว่าอาจเป็นไปได้ที่การจู่โจม Linux เปลี่ยนจาก RAID5 เป็น RAID6

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

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


นั่นฟังดูไม่น่าเชื่อ คุณแน่ใจหรือไม่ว่าคุณกำลังคิดว่าจะเพิ่มการโจมตี 5 จาก n ดิสก์เป็น n + 1 เพราะสิ่งที่คุณสามารถทำได้ใน Linux
โทมัส

ทำไมมันถึงฟังดูไม่น่าเชื่อ? RAID6 นั้นเกือบจะเหมือนกับ RAID5 แต่ก็มีเพียง 2 อุปกรณ์แบบพาริตี้แทนที่จะเป็นแบบเดียว
Zoredache

เห็นได้ชัดว่าการแปลงนี้อยู่ในรายการสิ่งที่ต้องทำ แต่ยังไม่สามารถทำได้ neil.brown.name/blog/20050727143147
Zoredache

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

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