13 June 2009

Openfiler RAID-1デグレードの復旧 (/dev/sdaの破損時)

RAID-1のマスター側(/dev/sda)のハードディスクの故障から復旧する手順をまとめたもの

GRUBブートローダを、スレーブ側にも書き込む (非常に重要)

OpenfilerのインストーラでRAID-1としたシステムパーティションは、スレーブ側(/dev/sdb)にはGRUBブートローダが書き込まれていないため、当然、スレーブ側のみ生き残った状態では立ち上げることは出来ない。

で、正常稼動時に、マスター側、スレーブ側双方に強制的にGRUBブートローダをインストールする。

[root@localhost grub]# grub GNU GRUB version 0.95 (640K lower / 3072K upper memory) [ Minimal BASH-like line editing is supported. For the first word, TAB lists possible command completions. Anywhere else TAB lists the possible completions of a device/filename.] grub> root (hd1,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd1) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd1)"... 16 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd1) (hd1)1+16 p (hd1,0)/boot/grub/stage2 /boot/grub /grub.conf"... succeeded Done. grub> root (hd0,0) Filesystem type is ext2fs, partition type 0xfd grub> setup (hd0) Checking if "/boot/grub/stage1" exists... yes Checking if "/boot/grub/stage2" exists... yes Checking if "/boot/grub/e2fs_stage1_5" exists... yes Running "embed /boot/grub/e2fs_stage1_5 (hd0)"... 16 sectors are embedded. succeeded Running "install /boot/grub/stage1 (hd0) (hd0)1+16 p (hd0,0)/boot/grub/stage2 /boot/grub /grub.conf"... succeeded Done. grub> quit

片側のハードディスクが故障した場合の起動試験

/dev/sda 側のハードディスクを取り外して、再起動したところ

[root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid10] [raid1] md1 : active raid1 sda2[1] 522048 blocks [2/1] [_U] md2 : active raid1 sda3[1] 144512 blocks [2/1] [_U] md0 : active raid1 sda1[1] 1020032 blocks [2/1] [_U]

/dev/sdb 側のハードディスクを取り外して、再起動したところ

[root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid10] [raid1] md1 : active raid1 sda2[0] 522048 blocks [2/1] [U_] md2 : active raid1 sda3[0] 144512 blocks [2/1] [U_] md0 : active raid1 sda1[0] 1020032 blocks [2/1] [U_]

GRUBブートローダを双方に書き込んだので、どちら側からでも起動できることが分かる。

マスター側が故障した場合の復旧手順

マスター側のHDD(故障)を取り出し、スレーブ側HDDをマスター側に接続する。 (これは、新しいディスクをマスター側に入れると、ブートローダが無いため起動できないから)

新しいHDDをスレーブ側に接続する。
そして、サーバを起動する。

RAIDの状況を確認する。 スレーブ側がデグレードしている。

[root@localhost ~]# cat /proc/mdstat Personalities : [raid6] [raid5] [raid4] [raid10] [raid1] md1 : active raid1 sda2[1] 522048 blocks [2/1] [_U] md2 : active raid1 sda3[1] 144512 blocks [2/1] [_U] md0 : active raid1 sda1[1] 1020032 blocks [2/1] [_U]

20090613-of16.png
Openfilerの管理用GUIから見ると、このように表示される。

/dev/sda側と同じように、/dev/sdbにパーティションを作成する。

[root@localhost ~]# fdisk /dev/sda ← 正常なディスクの状態表示 Command (m for help): p Disk /dev/sda: 2147 MB, 2147483648 bytes 255 heads, 63 sectors/track, 261 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 127 1020096 fd Linux raid autodetect /dev/sda2 128 192 522112+ fd Linux raid autodetect /dev/sda3 193 210 144585 fd Linux raid autodetect Command (m for help): q [root@localhost ~]# fdisk /dev/sdb Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel Building a new DOS disklabel. Changes will remain in memory only, until you decide to write them. After that, of course, the previous content won't be recoverable. Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite) Command (m for help): p ← 新しいディスクにパーティションが何も無いことを念のため確認 Disk /dev/sdb: 2147 MB, 2147483648 bytes 255 heads, 63 sectors/track, 261 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System Command (m for help): n ← 以下、正常な方に合わせてパーティションを作成 Command action e extended p primary partition (1-4) p Partition number (1-4): 1 First cylinder (1-261, default 1): Using default value 1 Last cylinder or +size or +sizeM or +sizeK (1-261, default 261): 127 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 2 irst cylinder (128-261, default 128): Using default value 128 Last cylinder or +size or +sizeM or +sizeK (128-261, default 261): 192 Command (m for help): n Command action e extended p primary partition (1-4) p Partition number (1-4): 3 First cylinder (193-261, default 193): Using default value 193 Last cylinder or +size or +sizeM or +sizeK (193-261, default 261): 210 Command (m for help): p ← とりあえず、出来たパーティションを表示してみる Disk /dev/sdb: 2147 MB, 2147483648 bytes 255 heads, 63 sectors/track, 261 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 127 1020096 83 Linux /dev/sdb2 128 192 522112+ 83 Linux /dev/sdb3 193 210 144585 83 Linux Command (m for help): t ← パーティションのタイプをRAIDに変更 Partition number (1-4): 1 Hex code (type L to list codes): fd Changed system type of partition 1 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-4): 2 Hex code (type L to list codes): fd Changed system type of partition 2 to fd (Linux raid autodetect) Command (m for help): t Partition number (1-4): 3 Hex code (type L to list codes):fd Changed system type of partition 3 to fd (Linux raid autodetect) Command (m for help): p ← 最終的に、正常な方のパーティションとサイズ、タイプが同じことを確認 Disk /dev/sdb: 2147 MB, 2147483648 bytes 255 heads, 63 sectors/track, 261 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sdb1 1 127 1020096 fd Linux raid autodetect /dev/sdb2 128 192 522112+ fd Linux raid autodetect /dev/sdb3 193 210 144585 fd Linux raid autodetect Command (m for help): w The partition table has been altered! Calling ioctl() to re-read partition table. Syncing disks.

パーティションが作成できたら、リビルドを行う。

[root@localhost ~]# mdadm /dev/md0 --add /dev/sdb1 mdadm: re-added /dev/sdb1 [root@localhost ~]# mdadm /dev/md1 --add /dev/sdb2 mdadm: re-added /dev/sdb2 [root@localhost ~]# mdadm /dev/md2 --add /dev/sdb3 mdadm: re-added /dev/sdb3 [root@localhost ~]# cat /proc/mdstat ← リビルド状況の表示 Personalities : [raid6] [raid5] [raid4] [raid10] [raid1] md1 : active raid1 sdb2[2] sda2[1] 522048 blocks [2/1] [_U] resync=DELAYED md2 : active raid1 sdb3[2] sda3[1] 144512 blocks [2/1] [_U] resync=DELAYED md0 : active raid1 sdb1[2] sda1[1] 1020032 blocks [2/1] [_U] [======>..............] recovery = 34.1% (348864/1020032) finish=0.5min speed=20521K/sec

全て終了すれば、この章の最初にある 「GRUBブートローダを、スレーブ側にも書き込む (非常に重要)」 を忘れず実施しておく。

参考にしたホームページ
RAID構成ハードディスク交換
「mdadm」によるRAID5の構築