ทดสอบการจู่โจมซอฟต์แวร์ในกล่องทราย!
ฉันขอแนะนำให้คุณเล่น 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-11
meaing /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
โชคดี!