ไม่เห็นว่ามีบทความนี้อยู่ในนี้เลยแฮะ ล่าสุดของตัวเองพังก็เลยจับมาเขียนก็แล้วกัน
อันดับแรก เช็คก่อนว่า disk พังมั้ย จะเห็นจาก logs ประมานนี้
ata1.00: status: { DRDY ERR }
ata1.00: error: { UNC }
ata1.00: configured for UDMA/133
ata1: EH complete
ata1.00: exception Emask 0x0 SAct 0x8 SErr 0x0 action 0x0
ata1.00: irq_stat 0x40000008
ata1.00: failed command: READ FPDMA QUEUED
ata1.00: cmd 60/08:18:b0:85:a9/00:00:00:00:00/40 tag 3 ncq 4096 in res 51/40:07:b1:85:a9/00:00:00:00:00/40 Emask 0x409 (media error) <F>
end_request: I/O error, dev sda, sector 11109809
md/raid1:md1: Disk failure on sda2, disabling device.
md/raid1:md1: Operation continuing on 1 devices.
หลังจากนั้นลองเช็คสถานะดู ก็จะเห็นประมานนี้ (อันนี้กรณี sda พังนะครับ มีทั้งหมดสองลูก sda sdb)
cat /proc/mdstat
จะได้ output ประมานนี้
Personalities : [raid1]
md0 : active raid1 sda1[0] sdb1[1]
10485632 blocks super 1.0 [2/2] [_U]
bitmap: 0/1 pages [0KB], 65536KB chunk
md1 : active raid1 sdb2[1] sda2[0]
8384448 blocks super 1.1 [2/2] [_U]
md2 : active raid1 sdb3[1] sda3[0]
957755200 blocks super 1.1 [2/2] [_U]
bitmap: 5/8 pages [20KB], 65536KB chunk
ถ้ามันปกติ ที่ เน้นไว้จะเป็น UU แต่อันนี้ sda พัง มันเลยขึ้นว่า _U
ก็คือ sda พัง แต่ถ้า sdb พังก็จะเป็น U_ [B]
Recover Software RAID
1.) อันดับแรก คือบอกว่า HDD fail ไปก่อน[/B]
จริงๆไม่ต้องสั่ง fail ก็ได้ เพราะว่ามัน fail อยู่แล้ว แต่เอาไว้เผื่อสำหรับคนอยากเปลี่ยน HDD ก็คือจะต้องสั่ง fail ให้มันก่อนที่จะ remove drive
อันนี้ของผมมีทั้งหมด 3 partition md0 md1 md2 ก็ remove จับเรียงเลยครับ
mdadm --manage /dev/md0 --fail /dev/sda1
mdadm --manage /dev/md1 --fail /dev/sda2
mdadm --manage /dev/md2 --fail /dev/sda3
2.) หลังจากนั้น Remove HDD ออกจาก Array
mdadm --manage /dev/md0 --remove /dev/sda1
mdadm --manage /dev/md1 --remove /dev/sda2
mdadm --manage /dev/md2 --remove /dev/sda3
3.) เช็ค Raid Array อีกที จะเห้นประมานนี้
Personalities : [raid1]
md0 : active raid1 sdb1[1]
10485632 blocks super 1.0 [2/2] [_U]
bitmap: 0/1 pages [0KB], 65536KB chunk
md1 : active raid1 sdb2[1]
8384448 blocks super 1.1 [2/2] [_U]
md2 : active raid1 sdb3[1]
957755200 blocks super 1.1 [2/2] [_U]
bitmap: 5/8 pages [20KB], 65536KB chunk
หลังจากนั้นก็เปลี่ยน HDD กรณีของผมคือผมใช้ Supermicro รองรับ Hot-Swappable HDD ก็เลยดึงออก เปลี่ยนใหม่เลย
แต่ถ้าเป็นรุ่นอื่นที่ไม่ได้ hot-swappable ก็ shutdown เพิ่ม drive เปิดขึ้นมา แล้วก็ทำตามได้เลยครับ
หลังจากนั้นเสียบ drive เข้าไป fdisk-l ดูอีกทีว่า disk เพิ่มมาแล้วรึยัง กรณีผมไม่ต้อง scan, eject hdd เลยครับ
ผมใช้ CentOS 6 อันอื่นอาจจะใช้ ยังไงก็ลองสั่ง eject ไปละกัน
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
OS เห็น HDD ลูกใหม่แล้ว เสร็จแล้วก็ทำการ clone partition จากอันเก่า
** คำสั่งนี้เป็นคำสั่งที่ค่อนข้างอันตราย make sure ว่าระบุถูก ไม่งั้นข้อมูลไปทั้งหมดนะครับ **
sfdisk -d /dev/sdb | sfdisk --force /dev/sda
อธิบาย
/dev/sdb คือ disk คือลูกที่มีการแบ่ง partition ไว้และมีข้อมูลอยู่แล้ว ส่วน /dev/sda คือ disk ลูกใหม่ที่ใส่เข้าไป
ส่วนที่ต้อง --force เพราะว่าใน centos 6 ถ้าเราไม่ใส่ไว้มันจะบอกว่า เฮ้ยย นี่มันไม่ใช่ partition ที่มันต้องการให้เป็น แต่อย่าสนใจ เราแบ่งมาแล้ว
หลังจากนั้นรอแป๊บ มันจะรันๆๆๆ แล้วเราก็จะเห็นว่ามันก๊อป partition มาหมดแล้ว
Disk /dev/sda: 1000.2 GB, 1000204886016 bytes
255 heads, 63 sectors/track, 121601 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x00000000
Device Boot Start End Blocks Id System
/dev/sda1 * 1 653 5242880 fd Linux raid autodetect
Partition 1 does not end on cylinder boundary.
/dev/sda2 653 1698 8388608 fd Linux raid autodetect
/dev/sda3 1698 121602 963129344 fd Linux raid autodetect
หลังจากนั้น จับ add partition เข้า array ใหม่
mdadm --manage /dev/md0 --add/dev/sda1
mdadm --manage /dev/md1 --add/dev/sda2
mdadm --manage /dev/md2 --add/dev/sda3
ถือว่าเสร็จสิ้นการ replace hdd แล้ว
หลังจากนั้นเช็ค /proc/mdstat เพื่อดูสถานะการ sync data ได้เลยครับ