แก้ไขปัญหา RAID บนลีนุกซ์ใช้งานไม่ได้ ขึ้น inactive

เพิ่งจะแก้ไขปัญหา 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 ก้อน หากดิสก์ก้อนใดเสียเพิ่มมาอีก ข้อมูลทั้งหมดจะสูญหายได้ ต้องรีบหาดิสก์มาเปลี่ยนแทนตัวที่มีปัญหาทันที

ราตรีสวัสดิ์ครับ

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.