MDADM เป็นเครื่องมือที่ช่วยสร้างและจัดการ software RAID บน Linux ในบทความนี้เราจะแสดงวิธีใช้ mdadm (multiple disks admin) เพื่อสร้างอาร์เรย์ RAID จัดเก็บข้อมูล เพิ่มและจัดการดิสก์ เพิ่ม hot-spare และอื่นๆ
mdadm: วิธีติดตั้งเครื่องมือจัดการ Software Raid
เพื่อติดตั้ง mdadm ให้รันคำสั่งติดตั้ง:
- สำหรับ CentOS/Red Hat (ใช้ yum/dnf):
yum install mdadm - สำหรับ Ubuntu/Debian:
apt-get install mdadm
mdadm และไลบรารีที่เกี่ยวข้องจะถูกติดตั้ง:
Running transaction Installing : libreport-filesystem-2.1.11-43.el7.centos.x86_64 1/2 Installing : mdadm-4.1-1.el7.x86_64 2/2 Verifying : mdadm-4.1-1.el7.x86_64 1/2 Verifying : libreport-filesystem-2.1.11-43.el7.centos.x86_64 2/2 Installed: mdadm.x86_64 0:4.1-1.el7 Dependency Installed: libreport-filesystem.x86_64 0:2.1.11-43.el7.centos Complete!
การสร้าง RAID 1 (Mirror) โดยใช้ 2 ดิสก์บน Linux
ผมมีดิสก์เพิ่มเติม 2 ตัวติดตั้งบนเซิร์ฟเวอร์ Linux และต้องการสร้าง software mirror บนดิสก์เหล่านั้น (RAID1) ดิสก์ว่างเปล่า ก่อนอื่น ต้องล้าง superblock ทั้งหมดบนดิสก์ที่จะเพิ่มเข้า RAID:
# mdadm --zero-superblock --force /dev/vd{b,c}
ผมมีดิสก์สะอาด 2 ตัว: vdb และ vdc

mdadm: Unrecognised md component device - /dev/vdb mdadm: Unrecognised md component device - /dev/vdc
รายการนี้หมายความว่าดิสก์ทั้งสองไม่เคยถูกเพิ่มเข้าไปในอาร์เรย์มาก่อน
เพื่อสร้าง software RAID1 จาก 2 ดิสก์ไปยังอุปกรณ์ /dev/md0 ใช้คำสั่ง:
# mdadm --create --verbose /dev/md0 -l 1 -n 2 /dev/vd{b,c}
ที่ '-l 1' คือประเภทอาร์เรย์ (RAID1 ในกรณีนี้)
และ '-n 2' คือจำนวนดิสก์ที่เพิ่มเข้าไปในอาร์เรย์
หากต้องการสร้าง RAID0 (Stripe) เพื่อเพิ่มความเร็วอ่าน/เขียนจากการขนานคำสั่งระหว่างดิสก์ทางกายภาพหลายตัว ใช้คำสั่ง:
# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/vdb /dev/vdc
สำหรับ RAID 5 ของ 3 ดิสก์ขึ้นไป:
# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/vdb /dev/ vdc /dev/vdd
หลังจากใส่คำสั่ง ยืนยันการกระทำ และ software RAID จะถูกสร้าง:

หากแสดงรายการข้อมูลเกี่ยวกับดิสก์ของคุณ จะเห็นดิสก์ RAID md0:
# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 20G 0 disk ├─vda1 253:1 0 512M 0 part /boot └─vda2 253:2 0 19.5G 0 part / vdb 253:16 0 20G 0 disk └─md0 9:0 0 20G 0 raid1 vdc 253:32 0 20G 0 disk └─md0 9:0 0 20G 0 raid1
เพื่อสร้างระบบไฟล์ ext4 บนดิสก์ RAID1 ให้รันคำสั่ง:
# mkfs.ext4 /dev/md0

สร้างไดเรกทอรีสำรองและ mount อุปกรณ์ RAID:
# mkdir /backup
# mount /dev/md0 /backup/
# df -h
Filesystem Size Used Avail Use% Mounted on ............. ............. /dev/md0 20G 45M 19G 1% /backup
อาร์เรย์ถูก mount โดยไม่มีข้อผิดพลาด เพื่อไม่ต้อง mount อุปกรณ์ด้วยตนเองทุกครั้ง ให้ทำการเปลี่ยนแปลงต่อไปนี้ใน fstab:
# nano /etc/fstab
/dev/md0 /backup ext4 defaults 1 2

วิธีดูสถานะหรือตรวจสอบความสมบูรณ์ของอาร์เรย์ RAID
เพื่อตรวจสอบความสมบูรณ์ของข้อมูลในอาร์เรย์ ใช้คำสั่งต่อไปนี้:
#echo 'check' > /sys/block/md0/md/sync_action
จากนั้นดูเอาต์พุตของไฟล์ต่อไปนี้:
#cat /sys/block/md0/md/mismatch_cnt
หากได้ 0 อาร์เรย์ของคุณปกติ:

เพื่อหยุดการตรวจสอบ ให้รัน:
#echo 'idle' > /sys/block/md0/md/sync_action
เพื่อตรวจสอบสถานะของ RAID ทั้งหมดบนเซิร์ฟเวอร์ ใช้คำสั่ง:
# cat /proc/mdstat
Personalities : [raid1] md0 : active raid1 vdc[1] vdb[0] 20954112 blocks super 1.2 [2/2] [UU]
คุณสามารถดูข้อมูลโดยละเอียดของ RAID เฉพาะได้ด้วยคำสั่ง:
# mdadm -D /dev/md0

รายการหลักในเอาต์พุตคำสั่ง:
- Version – รุ่นข้อมูลเมตา
- Creation Time – วันที่และเวลาที่สร้าง RAID
- Raid Level – ระดับของอาร์เรย์ RAID
- Array Size – ขนาดพื้นที่ดิสก์ RAID
- Used Dev Size – ขนาดพื้นที่ที่อุปกรณ์ใช้
- Raid Device – จำนวนดิสก์ใน RAID
- Total Devices – จำนวนดิสก์ที่เพิ่มเข้า RAID
- State – สถานะปัจจุบัน (clean — ปกติ)
- Active Devices – จำนวนดิสก์ที่ทำงานอยู่ใน RAID
- Working Devices – จำนวนดิสก์ที่ทำงานปกติใน RAID
- Failed Devices – จำนวนอุปกรณ์ที่ล้มเหลวใน RAID
- Spare Devices – จำนวนดิสก์สำรองใน RAID
- Consistency Policy – พารามิเตอร์ตั้งค่าประเภทการซิงโครไนซ์หลังล้มเหลว (rsync คือการซิงโครไนซ์เต็มรูปแบบหลังกู้คืน RAID bitmap, journal, ppl modes พร้อมใช้งาน)
- UUID – ตัวระบุอาร์เรย์ RAID
คุณสามารถดูข้อมูลสรุปได้ด้วย fdisk:
# fdisk -l /dev/md0
Disk /dev/md0: 21.5 GB, 21457010688 bytes, 41908224 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
การกู้คืนจากความล้มเหลวของดิสก์ใน RAID, การเปลี่ยนดิสก์
หากดิสก์หนึ่งใน RAID ล้มเหลวหรือเสียหาย คุณอาจเปลี่ยนด้วยอีกตัวหนึ่ง ก่อนอื่น ตรวจสอบว่าดิสก์เสียหายและต้องเปลี่ยนหรือไม่
# cat /proc/mdstat
Personalities : [raid1] md0 : active raid1 vdb[0] 20954112 blocks super 1.2 [2/1] [U_]
จากคำสั่งก่อนหน้า คุณเห็นว่ามีเพียงดิสก์เดียวที่ทำงานอยู่ [U_] ก็หมายความว่ามีปัญหา เมื่อดิสก์ทั้งสองปกติ ผลลัพธ์คือ [UU]
ข้อมูลโดยละเอียดของ RAID ก็แสดงว่ามีปัญหา:
# mdadm -D /dev/md0
/dev/md0: Version : 1.2 Creation Time : Tue Dec 31 12:39:22 2020 Raid Level : raid1 Array Size : 20954112 (19.98 GiB 21.46 GB) Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Tue Dec 31 14:41:13 2020 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 State : clean, degraded
– บรรทัดสุดท้ายแสดงว่าดิสก์หนึ่งใน RAID เสียหาย
ในกรณีนี้ /dev/vdc ต้องเปลี่ยน ในการกู้คืนอาร์เรย์ ต้องลบดิสก์ที่เสียและเพิ่มดิสก์ใหม่
ลบดิสก์ที่ล้มเหลว:
# mdadm /dev/md0 --remove /dev/vdc
เพิ่มดิสก์ใหม่เข้าไปในอาร์เรย์:
# mdadm /dev/md0 --add /dev/vdd
การกู้คืนดิสก์จะเริ่มอัตโนมัติหลังจากเพิ่มดิสก์ใหม่:
# mdadm -D /dev/md0
/dev/md0: Version : 1.2 Creation Time : Tue Dec 31 12:39:22 2020 Raid Level : raid1 Array Size : 20954112 (19.98 GiB 21.46 GB) Used Dev Size : 20954112 (19.98 GiB 21.46 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Tue Dec 31 14:50:20 2020 State : clean, degraded, recovering Active Devices : 1 Working Devices : 2 Failed Devices : 0 Spare Devices : 1 Consistency Policy : resync Rebuild Status : 48% complete Name : host1:0 (local to host host1) UUID : 9d59b1fb:7b0a7b6d:15a75459:8b1637a2 Events : 42 Number Major Minor RaidDevice State 0 253 16 0 active sync /dev/vdb 2 253 48 1 spare rebuilding /dev/vdd rebuild Status : 48% complete shows the current array recovery state. spare rebuilding /dev/vdd shows which disk is being added to the array. After rebuilding the array, check its state: State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0
วิธีเพิ่มหรือลบดิสก์ไปยัง Software RAID บน Linux
หากต้องการลบอุปกรณ์ RAID mdadm ที่สร้างไว้ก่อนหน้านี้ ให้ unmount:
# umount /backup
จากนั้นรันคำสั่ง:
# mdadm -S /dev/md0
mdadm: stopped /dev/md0
หลังจากทำลายอาร์เรย์ RAID มันจะไม่ถูกตรวจจับเป็นอุปกรณ์ดิสก์แยกต่างหาก:
# mdadm -S /dev/md0
mdadm: error opening /dev/md0: No such file or directory
คุณสามารถสแกนดิสก์ที่เชื่อมต่อทั้งหมดและสร้างอุปกรณ์ RAID ที่ลบไปก่อนหน้านี้ (ล้มเหลว) ใหม่ตามข้อมูลเมตาบนดิสก์ทางกายภาพ รันคำสั่ง:
# mdadm --assemble —scan

หากต้องการลบดิสก์ที่ทำงานอยู่ออกจากอาร์เรย์และเปลี่ยนใหม่ ให้ทำเครื่องหมายดิสก์ว่าเป็นดิสก์ที่ล้มเหลวก่อน:
# mdadm /dev/md0 --fail /dev/vdc
จากนั้นลบได้ด้วยคำสั่ง:
# mdadm /dev/md0 --remove /dev/vdc
คุณสามารถเพิ่มดิสก์ใหม่ได้เช่นเดียวกับกรณีดิสก์ล้มเหลว:
# mdadm /dev/md0 --add /dev/vdd
วิธีเพิ่มดิสก์ Hot-Spare ไปยังอาร์เรย์ MDADM
คุณสามารถเพิ่มดิสก์ hot-spare เพิ่มเติมเพื่อ rebuild อาร์เรย์ RAID อย่างรวดเร็วหากดิสก์ที่ทำงานอยู่ล้มเหลว เพิ่มดิสก์ว่างเข้าไปในอุปกรณ์ md ที่คุณต้องการ:
# mdadm /dev/md0 --add /dev/vdc
เมื่อตรวจสอบสถานะ RAID เราจะเห็นดิสก์เป็น spare:

เพื่อให้แน่ใจว่า hot-swap ทำงาน ให้ทำเครื่องหมายดิสก์ใดดิสก์หนึ่งว่า failed และตรวจสอบสถานะ RAID:
# mdadm /dev/md0 --fail /dev/vdb
หลังจากตรวจสอบ คุณจะเห็นว่าการ rebuild อาร์เรย์เริ่มต้นขึ้น

ดิสก์ /dev/vdb ถูกทำเครื่องหมายว่า failed และดิสก์ hot-spare กลายเป็นดิสก์ RAID ที่ทำงานอยู่หนึ่งดิสก์ กระบวนการ rebuild เริ่มต้น
เพื่อเพิ่มดิสก์ที่ทำงานได้เพิ่มเติมเข้าไปใน RAID คุณต้องทำตาม 2 ขั้นตอนนี้
เพิ่มดิสก์ว่างเข้าไปในอาร์เรย์:
# mdadm /dev/md0 --add /dev/vdb
ตอนนี้ดิสก์นี้จะแสดงเป็น hot-spare เพื่อทำให้มัน active ให้ขยายอุปกรณ์ md RAID:
# mdadm -G /dev/md0 —raid-devices=3
จากนั้นอาร์เรย์จะถูก rebuild:

หลังจาก rebuild เสร็จ ดิสก์ทั้งหมดจะกลายเป็น active:
Number Major Minor RaidDevice State 3 253 32 0 active sync /dev/vdc 2 253 48 1 active sync /dev/vdd 4 253 16 2 active sync /dev/vdb
วิธีลบอาร์เรย์ MDADM RAID
หากต้องการลบ software RAID drive ของคุณอย่างถาวร ให้ใช้แผนผังต่อไปนี้:
# umount /backup – unmount อาร์เรย์จากไดเรกทอรี
# mdadm -S /dev/md0 — หยุดอุปกรณ์ RAID
จากนั้นล้าง superblock ทั้งหมดบนดิสก์ที่สร้างขึ้น:
# mdadm --zero-superblock /dev/vdb
# mdadm --zero-superblock /dev/vdc
Mdmonitor: การตรวจสอบสถานะ RAID และการแจ้งเตือนทางอีเมล
ดีมอน mdmonitor สามารถใช้ตรวจสอบสถานะของ RAID ได้ ก่อนอื่น คุณต้องสร้างไฟล์ /etc/mdadm.conf ที่มีการกำหนดค่าอาร์เรย์ปัจจุบัน:
# mdadm –detail –scan > /etc/mdadm.conf
ไฟล์ mdadm.conf ไม่ถูกสร้างโดยอัตโนมัติ คุณต้องสร้างและอัปเดตด้วยตนเอง
เพิ่มที่อยู่อีเมลของผู้ดูแลที่ต้องการรับการแจ้งเตือนในกรณีปัญหา RAID ไปที่ท้ายไฟล์ /etc/mdadm.conf:
MAILADDR raidadmin@woshub.com
จากนั้นรีสตาร์ทบริการ mdmonitor ด้วย systemctl:
# systemctl restart mdmonitor
ระบบจะแจ้งเตือนคุณทางอีเมลหากมีข้อผิดพลาด mdadm หรือดิสก์เสียหาย
MDADM RAID ที่ Inactive
ในกรณีของความล้มเหลวของฮาร์ดแวร์หรือการปิดเครื่องฉุกเฉิน อาร์เรย์ RAID แบบซอฟต์แวร์อาจกลายเป็น inactive ดิสก์ทั้งหมดถูกทำเครื่องหมายว่า inactive แต่ไม่มีข้อผิดพลาด
# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] md0 : inactive vdc[1] vdb[0] 20954112 blocks super unused devices: <none>
ในกรณีนี้ ต้องหยุดอาร์เรย์ด้วยคำสั่ง:
# mdadm --stop /dev/md0
และประกอบใหม่:
# mdadm --assemble --scan –force
หากอุปกรณ์ md ลงทะเบียนใน /etc/fstab ให้ mount ใหม่ด้วยคำสั่ง:
# mount -a
มีหลายวิธีในการสร้าง software RAID ในระบบปฏิบัติการที่ติดตั้งอยู่แล้ว ในกรณีนี้ คุณจะต้องคัดลอกตารางพาร์ติชันทั้งหมดไปยังดิสก์ใหม่ด้วยตนเอง และย้ายเนื้อหาของดิสก์ระบบไปยัง RAID ที่ประกอบด้วยดิสก์เดียวด้วยตนเอง จากนั้นล้างดิสก์แรกและเพิ่มเข้า RAID แก้ไข initramfs และโหลดบูต GRUB ดังนั้น จึงดีกว่าที่จะเลือกโหมดการติดตั้ง CentOS บน software RAID ระหว่างการปรับใช้เซิร์ฟเวอร์
mdadm ทำให้การจัดการ software RAID บน Linux ง่ายขึ้น ในบทความนี้ผมอธิบายสิ่งสำคัญเมื่อทำงานกับเครื่องมือนี้ และครอบคลุมคำถามทั่วไปที่เกิดขึ้นเมื่อทำงานกับ RAID โดยใช้ mdadm