การเปลี่ยน Hard Disk ที่เป็น SW RAID 1 ใน Linux

ตรวจสอบว่า Hard Disk ลูกไหนที่เสีย
#cat /proc/mdstat
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 sda2[0] sdb2[1]
8384448 blocks super 1.1 [2/2] [_U]

md2 : active raid1 sda3[0] sdb3[1]
957755200 blocks super 1.1 [2/2] [_U]
bitmap: 5/8 pages [20KB], 65536KB chunk

ถ้ามันปกติ ที่ เน้นไว้จะเป็น UU แต่ sda เสีย เลยขึ้นว่า _U แต่ถ้า sdb พังก็จะเป็น U_

Recover Software RAID
1.) อันดับแรก คือบอกว่า HDD fail ไปก่อน
จริงๆไม่ต้องสั่ง fail ก็ได้ เพราะว่ามัน fail อยู่แล้ว แต่เอาไว้เผื่อสำหรับคนอยากเปลี่ยน HDD ก็คือจะต้องสั่ง fail ให้มันก่อนที่จะ remove drive
อันนี้ของผมมีทั้งหมด 3 partition md0 md1 md2 ก็ remove จับเรียงเลยครับ
#สมมุติว่า disk ที่เสียคือ /dev/sda
#สมมุตว่า disk ที่ไม่เสียคือ /dev/sdb

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 อีกที จะเห็นประมานนี้
#cat /proc/mdstat
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

4) หลังจากนั้นก็เปลี่ยน HDD
หลังจากนั้นเสียบ HDD ก้อนใหม่แล้ว เข้าไป fdisk-l ดูอีกทีว่า disk เพิ่มมาแล้วรึยัง
#fdisk -l
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 จากอันเก่า


** คำสั่งนี้เป็นคำสั่งที่ค่อนข้างอันตราย ต้องใจว่า ว่าระบุ HDD ถูก ไม่งั้นข้อมูลไปทั้งหมดนะครับ **
#sfdisk -d /dev/sdb | sfdisk --force /dev/sda
อธิบาย
/dev/sdb คือ disk เดิมในใน Server ที่ไม่เสีย
/dev/sda คือ disk ลูกใหม่ที่เราเอามาเปลี่ยนแทนลูกที่เสีย
ส่วนที่ต้อง --force เพราะว่าใน centos 6 ถ้าเราไม่ใส่ไว้มันจะบอกว่า เฮ้ยย นี่มันไม่ใช่ partition ที่มันต้องการให้เป็น แต่อย่าสนใจ เราแบ่งมาแล้ว

หลังจากนั้นรอแป๊บ มันจะรันๆๆๆ แล้วเราก็จะเห็นว่ามันก๊อป partition มาหมดแล้ว
#fdisk -l
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

5) หลังจากนั้น จับ 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 ได้เลยครับ

#watch -n 5 cat /proc/mdstat
Every 5.0s: cat /proc/mdstat                                                                         Thu Nov 14 08:07:59 2013

Personalities : [raid1]
md0 : active raid1 sda1[2] sdb1[0]
      972566464 blocks [2/1] [U_]
      [>....................]  recovery =  0.2% (1997696/972566464) finish=161.9min speed=99884K/sec
.....

Rating

Average: 3 (2 votes)