เพิ่งจะแก้ไขปัญหา inactive RAID (mdadm) บนลีนุกซ์เสร็จสิ้น ข้อมูลที่อยู่ใน RAID กลับมาใช้งานได้อีก เลยขอแชร์เล่าประสบการณ์กัน
ปัญหาที่พบคือเครื่องแฮงไปเพราะดิสก์ก้อนหนึ่งที่คอนฟิกอยู่ใน RAID มีปัญหา หลังจากที่กดปิดเครื่องแล้วบู๊ตเครื่องกลับมาใหม่ RAID ไม่สามารถใช้งานได้ ขึ้นสถานะ inactive
หมายเหตุ ข้อมูลในดิสก์เป็นเรื่องใหญ่ พึงทำความเข้าใจให้แน่ใจ และมีสติก่อนดำเนินการแก้ไขปัญหา วิธีในบทความนี้เป็นเพียงแค่วิธีหนึ่งในการแก้ไขปัญหาแบบหนึ่งที่ผู้เขียนเจอเท่านั้น ผู้เขียนไม่รับผิดชอบความเสียหายข้อมูลใดๆ ทั้งสิ้นที่เกิดจากการใช้คำสั่งในบทความนี้
ลองใช้คำสั่ง cat /proc/mdstat สถานะของ md0 ขึ้นเป็น inactive
[root@server ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : inactive sdb1[0](S) sde1[3](S) sdc1[1](S)
8790796579 blocks super 1.2
unused devices: <none>
ดูรายละเอียดคอนฟิกของ RAID ด้วยคำสั่ง mdadm –detail
[root@server ~]# mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Mon May 6 10:14:38 2013 Raid Level : raid5 Used Dev Size : -1 Raid Devices : 4 Total Devices : 3 Persistence : Superblock is persistent
Update Time : Sun Jun 2 05:00:02 2013
State : active, degraded, Not Started
Active Devices : 3
Working Devices : 3
Failed Devices : 0
Spare Devices : 0
Layout : left-symmetric Chunk Size : 512K
Name : server.example.com:5 (local to host server.example.com) UUID : ... Events : 96000
Number Major Minor RaidDevice State
0 8 17 0 active sync /dev/sdb1
1 8 33 1 active sync /dev/sdc1
2 0 0 2 removed
3 8 65 3 active sync /dev/sde1
คอนฟิก RAID ของเครื่องนี้เป็น raid5 ชื่อ /dev/md0 ประกอบด้วยดิสก์ทั้งหมด 4 ก้อน (Raid Devices) แต่ตอนนี้เหลืออยู่แค่ 3 ก้อน (Active Devices) คือ /dev/sdb1 /dev/sdc1 /dev/sde1 ดิสก์ Number 2 หายไป (removed)
การแก้ไขต้องหยุด (stop) การรัน md0 ก่อน
[root@server ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0
ลองดูสถานะของ RAID หลังจาก stop
[root@server ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] unused devices: <none>
ใช้คำสั่ง mdadm ระบุออปชั่น –assemble ตามด้วยชื่อ raid /dev/md0 ตามด้วยดิสก์ที่อยู่ใน RAID เฉพาะก้อนที่ใช้งานได้ (Active)
[root@server ~]# mdadm --assemble /dev/md0 /dev/sdc1 /dev/sde1 /dev/sdb1 mdadm: /dev/md0 assembled from 3 drives - not enough to start the array while not clean - consider --force.
สังเกตว่ามีข้อความเตือนขึ้นมาว่า การประกอบ RAID (assemble) จากดิสก์ 3 ก้อน ไม่เพียงพอต่อการรัน RAID ต้องระบุออปชั่น –force
ดูสถานะ RAID หลังประกอบไม่สำเร็จ ยังคงขึ้น inactive
[root@server ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : inactive sdb1[0](S) sde1[3](S) sdc1[1](S)
8790796579 blocks super 1.2
unused devices: <none>
หยุด (stop) การทำงาน md0 อีกครั้ง
[root@server ~]# mdadm --stop /dev/md0 mdadm: stopped /dev/md0
รันคำสั่ง mdadm ระบุออปชั่น –assemble ตามด้วยชื่อ raid ชื่อดิสก์เหมือนเดิม แต่เพิ่มออปชั่น –force
[root@server ~]# mdadm --assemble /dev/md0 /dev/sdc1 /dev/sde1 /dev/sdb1 --force
mdadm: Marking array /dev/md0 as 'clean'
mdadm: /dev/md0 has been started with 3 drives (out of 4).
ลองดูสถานะหลังจากเพิ่มออปชั่น –force
[root@server ~]# cat /proc/mdstat
Personalities : [raid6] [raid5] [raid4]
md0 : active raid5 sdb1[0] sde1[3] sdc1[1]
8790795264 blocks super 1.2 level 5, 512k chunk, algorithm 2 [4/3] [UU_U]
ถึงตอนนี้ถ้าไม่มีข้อผิดพลาดอื่นๆ RAID ก็สามารถกลับมาใช้งานได้แล้ว เราสามารถ mount ดิสก์ขึ้นมาเรียกดูข้อมูลได้
แต่สถานะตอนนี้ ถือเป็นความเสี่ยง เพราะจากตัวอย่างในที่นี้ เราสร้าง RAID 5 จากดิสก์ 4 ก้อน หาย (remove) ไปแล้ว 1 ก้อน หากดิสก์ก้อนใดเสียเพิ่มมาอีก ข้อมูลทั้งหมดจะสูญหายได้ ต้องรีบหาดิสก์มาเปลี่ยนแทนตัวที่มีปัญหาทันที
ราตรีสวัสดิ์ครับ