เกิดความสงสัยขึ้นมา ขณะคอนฟิกเซิร์ฟเวอร์ที่มีดิสก์หลายๆ ก้อน เพื่อทำหน้าที่เป็น file server ว่า ระหว่างการใช้ mdadm และ lvm เพื่อรวมดิสก์แต่ละก้อนเข้าด้วยกันทำเป็น RAID-0 อย่างไหนจะเร็วกว่ากัน เลยทดสอบและนำผลลัพธ์แต่ละคอนฟิกมาเปรียบเทียบกัน
และเพื่อความครบถ้วนของการเปรียบเทียบ เลยทดสอบคอนฟิกทั้งเป็นแบบ linear และ stripe (RAID-0) จากการใช้คำสั่งทั้งสองด้วย โดยแยกเป็นสองบทความ ในตอนแรกจะใช้คำสั่ง mdadm ก่อน
หมายเหตุ
- โดยทั่วไป คำว่า RAID-0 หมายถึงการคอนฟิกแบบ stripe
- ข้อควรระวังการเลือกใช้คอนฟิก RAID-0 เพียงอย่างเดียว ถ้าดิสก์ก้อนใดก้อนนึงเสียไป มีโอกาสทำให้ข้อมูลบางส่วนหรือทั้งหมดเสียหายได้ โดยทั่วไปนิยมคอนฟิก RAID-0 ทับไปบนคอนฟิก RAID-1 หรือ RAID-5 เพื่อทำเป็น RAID-10, หรือ RAID-50
- ความเสียหายของข้อมูลเมื่อดิสก์ก้อนหนึ่งเสีย ในการคอนฟิกแต่ละแบบจะไม่เหมือนกันเช่น ถ้าคอนฟิกเป็นแบบ “linear” การกู้ข้อมูลกลับคืนมาจะมีโอกาสมากกว่า เพราะข้อมูลส่วนใหญ่จะถูกเขียนลงบนดิสก์ก้อนเดียว แต่ข้อเสียของ “linear” คือความเร็วในการเขียนข้อมูลจะน้อยกว่าแบบ “stripe”
ทดสอบดิสก์แต่ละก้อน
ก่อนจะเริ่มคอนฟิก RAID-0 ขอเริ่มทดสอบดิสก์ทีละตัว เพื่อดูความเร็วคร่าวๆ ในการเขียนข้อมูล
ตัวอย่างการสร้างพาร์ทิชั่นของดิสก์แต่ละก้อน
[root@fc10-disk ~]# fdisk -l /dev/sdc ... Device Boot Start End Blocks Id System /dev/sdc1 1 24321 195358401 83 Linux
[root@fc10-disk ~]# fdisk -l /dev/sdd ... Device Boot Start End Blocks Id System /dev/sdd1 1 24321 195358401 83 Linux
สร้าง filesystem เป็นแบบ xfs ในแต่ละพาร์ทิชั่น และ mount เข้ากับพาธที่สร้าง
[root@fc10-disk ~]# mkfs.xfs -f /dev/sdc1 [root@fc10-disk ~]# mkfs.xfs -f /dev/sdd1
[root@fc10-disk ~]# mkdir /mnt/sdc1 [root@fc10-disk ~]# mkdir /mnt/sdd1 [root@fc10-disk ~]# mount /dev/sdc1 /mnt/sdc1 [root@fc10-disk ~]# mount /dev/sdd1 /mnt/sdd1
ทดสอบการเขียนไฟล์ขนาด 2 GB ในแต่ละพาร์ทิชั่น
[root@fc10-disk sdc1]# cd /mnt/sdc1/
[root@fc10-disk sdc1]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 38.4796 s, 52.0 MB/s
[root@fc10-disk sdd1]# cd /mnt/sdd1/
[root@fc10-disk sdd1]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 42.4467 s, 47.1 MB/s
ได้ความเร็วประมาณ 50 MB/s
ยกเลิกการ mount ดิสก์แต่ละก้อน
[root@fc10-disk sdd1]# cd [root@fc10-disk ~]# umount /mnt/sdc1 [root@fc10-disk ~]# umount /mnt/sdd1
คำสั่ง mdadm สร้างดิสก์แบบ linear
คอนฟิกแรกจะใช้คำสั่ง mdadm เพื่อสร้างดิสก์เป็นแบบ “linear” ซึ่งเป็นการนำพื้นที่ดิสก์ทั้งสองก้อนมาต่อเรียงกัน เวลาเขียนข้อมูลจะเขียนบนดิสก์ตัวเดียวก่อน ถ้าก้อนแรกเต็มถึงจะเขียนดิสก์อีกก้อน
[root@fc10-disk ~]# mdadm --create --verbose /dev/md0 --level=linear --raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm: chunk size defaults to 64K
mdadm: array /dev/md0 started.
ตรวจสอบสถานะของดิสก์
[root@fc10-disk ~]# mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Jun 7 12:35:05 2009 Raid Level : linear Array Size : 390716672 (372.62 GiB 400.09 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent
Update Time : Sun Jun 7 12:35:05 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0
Rounding : 64K
UUID : 450c959b:c5d34b87:792b422a:65152846 Events : 0.1
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 49 1 active sync /dev/sdd1
สร้าง filesystem เป็นแบบ xfs และ mount เข้ากับพาธที่สร้าง
[root@fc10-disk ~]# mkfs.xfs -f /dev/md0 [root@fc10-disk ~]# mkdir /mnt/md0 [root@fc10-disk ~]# mount /dev/md0 /mnt/md0/
ดูขนาด filesystem ที่สร้างได้
[root@fc10-disk ~]# cd /mnt/md0/
[root@fc10-disk md0]# df -k .
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md0 390585600 4256 390581344 1% /mnt/md0
ทดสอบการเขียนไฟล์ขนาด 2 GB บนคอนฟิก “linear”
[root@fc10-disk md0]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 37.9349 s, 52.7 MB/s
ความเร็วที่ได้จะใกล้เคียงกับการเขียนไฟล์ลงดิสก์ก้อนเดียว
ยกเลิกการ mount ดิสก์ และปิด (stop) การใช้ดิสก์แบบ linear
[root@fc10-disk md0]# cd [root@fc10-disk ~]# umount /mnt/md0 [root@fc10-disk ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0 [root@fc10-disk ~]# cat /proc/mdstat Personalities : [linear] unused devices: <none>
คำสั่ง mdadm สร้างดิสก์แบบ stripe (RAID-0)
คอนฟิกที่สอง จะใช้คำสั่ง mdadm เพื่อคอนฟิกดิกส์สองกันเป็นแบบ stripe หรือ RAID-0 เวลาเขียนข้อมูลจะเขียนลงบนดิสก์ทั้งสองก้อนพร้อมกัน ทำให้ความเร็วเพิ่มขึ้น
หมายเหตุ การระบุออปชั่น “–level” เป็นแบบ “stripe” หรือ “raid-0” ให้ผลเหมือนกัน
[root@fc10-disk ~]# mdadm --create --verbose /dev/md0 --level=stripe --raid-devices=2 /dev/sdc1 /dev/sdd1
mdadm: chunk size defaults to 64K
mdadm: /dev/sdc1 appears to be part of a raid array:
level=linear devices=2 ctime=Sun Jun 7 13:28:06 2009
mdadm: /dev/sdd1 appears to be part of a raid array:
level=linear devices=2 ctime=Sun Jun 7 13:28:06 2009
Continue creating array? y
mdadm: array /dev/md0 started.
ตรวจสอบสถานะของดิสก์
[root@fc10-disk ~]# mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Jun 7 13:40:02 2009 Raid Level : raid0 Array Size : 390716672 (372.62 GiB 400.09 GB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent
Update Time : Sun Jun 7 13:40:02 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0
Chunk Size : 64K
UUID : 1ee50769:2becc762:fb9a3596:c284b115 Events : 0.1
Number Major Minor RaidDevice State
0 8 33 0 active sync /dev/sdc1
1 8 49 1 active sync /dev/sdd1
สร้าง filesystem เป็นแบบ xfs และ mount เข้ากับพาธที่สร้างไว้
[root@fc10-disk ~]# mkfs.xfs -f /dev/md0 [root@fc10-disk ~]# mount /dev/md0 /mnt/md0/
ดูขนาด filesystem ที่สร้างได้
[root@fc10-disk ~]# cd /mnt/md0/
[root@fc10-disk md0]# df -k .
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md0 390585344 4640 390580704 1% /mnt/md0
ทดสอบความเร็วการเขียนข้อมูลบนดิสก์ RAID-0
[root@fc10-disk md0]# dd if=/dev/zero of=file-2g.bin bs=1000000 count=2000
2000+0 records in
2000+0 records out
2000000000 bytes (2.0 GB) copied, 20.7292 s, 96.5 MB/s
ความเร็วที่ได้ใกล้เคียงกับผลรวมของความเร็วในการเขียนข้อมูลลงดิสก์แต่ละก้อน
ยกเลิกการ mount ดิสก์ และปิด (stop) การใช้ดิสก์แบบ “stripe”
[root@fc10-disk md0]# cd [root@fc10-disk ~]# umount /mnt/md0 [root@fc10-disk ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0 [root@fc10-disk ~]# cat /proc/mdstat Personalities : [linear] [raid0] unused devices: <none>