Linux raid(CentOS 6.4)のHDD交換

HDDを入れ替えたい事情があったのでraidのHDDを交換。

 

とりあえず入れ替え前の状態を確認

# cat /proc/mdstat
Personalities : [raid1]
md2 : active raid1 sdb3[3] sda3[2]
      1875233664 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sdb1[2] sda1[1]
      511936 blocks super 1.0 [2/2] [UU]

md1 : active raid1 sda2[1] sdb2[2]
      77571968 blocks super 1.1 [2/2] [UU]
      bitmap: 1/1 pages [4KB], 65536KB chunk

unused devices: <none>

ここで/dev/sdbを抜いてHDDを交換する。/dev/md0 から /dev/sdb1 を削除する場合、

# mdadm --manage /dev/md0 --fail /dev/sdb1
# mdadm --manage /dev/md1 --fail /dev/sdb2
# mdadm --manage /dev/md2 --fail /dev/sdb3

で故障状態にした上で、

# mdadm --manage /dev/md0 --remove /dev/sdb1
# mdadm --manage /dev/md1 --remove /dev/sdb2
# mdadm --manage /dev/md2 --remove /dev/sdb3

で削除する。その後、ホットスワップ非対応のPCを使用しているので

# shutdown -h 0

でシャットダウンしてHDDを交換する。

交換後、fdiskで/dev/sdaのパーティション構成をそっくりそのまま/dev/sdbに作成する。まずは/dev/sdaを確認

# fdisk -u /dev/sda
コマンド (m でヘルプ): p

ディスク /dev/sda: 2000.4 GB, 2000398934016 バイト
ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
ディスク識別子: 0x00001b3f

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sda1   *          64     1024063      512000   fd  Linux raid 自動検出
パーティション 1 は、シリンダ境界で終わっていません。
/dev/sda2         1024064   156299327    77637632   fd  Linux raid 自動検出
/dev/sda3       156299328  3907029167  1875364920   fd  Linux raid 自動検出

コマンド (m でヘルプ): q

/dev/sdaの構成が分かったので/dev/sdbを同じ構成で作成。

# fdisk -u /dev/sdb
コマンド (m でヘルプ): p

ディスク /dev/sda: 2000.4 GB, 2000398934016 バイト
ヘッド 255, セクタ 63, シリンダ 243201, 合計 3907029168 セクタ
Units = セクタ数 of 1 * 512 = 512 バイト
セクタサイズ (論理 / 物理): 512 バイト / 4096 バイト
I/O size (minimum/optimal): 4096 bytes / 4096 bytes
ディスク識別子: 0x00001b3f

デバイス ブート      始点        終点     ブロック   Id  システム

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 1
最初 セクタ (63-3907029167, 初期値 64): 64
Last セクタ, +セクタ数 or +size{K,M,G} (64-3907029167, 初期値 3907029167):1024063

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 2
最初 セクタ (63-3907029167, 初期値 1024064): 1024064
Last セクタ, +セクタ数 or +size{K,M,G} (1024064-3907029167, 初期値 3907029167):156299327

コマンド (m でヘルプ): n
コマンドアクション
   e   拡張
   p   基本パーティション (1-4)
p
パーティション番号 (1-4): 3
最初 セクタ (63-3907029167, 初期値 156299328): 156299328
Last セクタ, +セクタ数 or +size{K,M,G} (156299328-3907029167, 初期値 3907029167):3907029167

コマンド (m でヘルプ): t
パーティション番号 (1-4): 1
16進数コード (L コマンドでコードリスト表示): fd

コマンド (m でヘルプ): t
パーティション番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): fd

コマンド (m でヘルプ): t
パーティション番号 (1-4): 3
16進数コード (L コマンドでコードリスト表示): fd

コマンド (m でヘルプ): w

パーティションを交換前のHDDと同じ容量で作成できたので、とりあえずブートローダだけは再構築する。

# mdadm --manage /dev/md0 --add /dev/sdb1

raidにHDDを追加して、

cat /proc/mdstat

で、確認。再構築が完了したらブートローダーをセットするためにgrubシェルから作業する。

# grub
> root (hd1,0)
> setup (hd1)
> root (hd0,0)
> setup (hd0)

hd1は新しく追加したHDD、hd0は元々あったHDD。これをしておかないとHDDが壊れたときに起動しなくなる。

# mdadm --manage /dev/md1 --add /dev/sdb2
# mdadm --manage /dev/md2 --add /dev/sdb3

これであとはのんびり再構築を待つだけ。