はじめに
インフラ担当者として障害発生は恐ろしいものですが切り離せないものでもあります。
今回、2台のHDDでソフトウェアRAID md0(/boot用)とmd1(/用)として構成したmdデバイス上にインストールしたCentOS6で、2台目のHDD sdbが故障したため、sdbを新しいものに交換してCentOS6を起動した、というところからの復旧について紹介します。
復旧作業
まず、無事だった1つ目のHDD sdaのパーティション構成を確認します。その後、同じ構成となるように2つ目のHDD sdbをパーティション設定します。2つのHDDが同じパーティション構成となったら、mdデバイス(RAID1)として機能するよう、復旧させます。
sdaのパーティション構成の確認
partedコマンドを使用して、sdaのパーティション構成を確認します。下記の場合、パーティションは2つあります。
[root@server02 ~]# parted /dev/sda unit B print
モデル: ATA ST3000DM001-1CH1 (scsi)
ディスク /dev/sda: 3000592982016B
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 17408B 104875007B 104857600B ext3 boot
2 104875008B 3000592965119B 3000488090112B raid
sdbのパーティション作成
partedコマンドを使用して、sdaのパーティション構成と同じサイズとなるようパーティションを作成します。
[root@server02 ~]# parted /dev/sdb
GNU Parted 2.1
/dev/sdb を使用
GNU Parted へようこそ! コマンド一覧を見るには 'help' と入力してください。
(parted) print
エラー: /dev/sdb: ディスクラベルが認識できません。
新品のHDDのため、パーティションテーブルがまだ設定されていないようです。GTPパーティションテーブルを作成して、sdaと同じサイズのパーティションを作成します。
(parted) mklabel gpt
(parted) unit B
(parted) print
モデル: ATA ST3000DM001-1CH1 (scsi)
ディスク /dev/sdb: 3000592982016B
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
(parted) mkpart
パーティションの名前? []?
ファイルシステムの種類? [ext2]?
開始? 17408
終了? 104875007
警告: The resulting partition is not properly aligned for best performance.
無視(I)/Ignore/取消(C)/Cancel? I
(parted) print
モデル: ATA ST3000DM001-1CH1 (scsi)
ディスク /dev/sdb: 3000592982016B
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 17408B 104875007B 104857600B
1つ目のパーティションが作成できました。続いて2つ目のパーティションを作成します。
(parted) mkpart
パーティションの名前? []?
ファイルシステムの種類? [ext2]?
開始? 104875008
終了? 3000592965119
警告: The resulting partition is not properly aligned for best performance.
無視(I)/Ignore/取消(C)/Cancel? I
(parted) print
モデル: ATA ST3000DM001-1CH1 (scsi)
ディスク /dev/sdb: 3000592982016B
セクタサイズ (論理/物理): 512B/4096B
パーティションテーブル: gpt
番号 開始 終了 サイズ ファイルシステム 名前 フラグ
1 17408B 104875007B 104857600B
2 104875008B 3000592965119B 3000488090112B
(parted) quit
通知: 必要であれば /etc/fstab を更新するのを忘れないようにしてください。
作成したパーティションの確認
次のコマンドを実行して、OSから見られるパーティションを確認しておきます。sdb1とsdb2が無事作成されていることが確認できます。
[root@server02 ~]# ls -l /dev/sd*
brw-rw---- 1 root disk 8, 0 11月 10 08:38 2015 /dev/sda
brw-rw---- 1 root disk 8, 1 11月 10 08:12 2015 /dev/sda1
brw-rw---- 1 root disk 8, 2 11月 10 08:12 2015 /dev/sda2
brw-rw---- 1 root disk 8, 16 11月 10 08:43 2015 /dev/sdb
brw-rw---- 1 root disk 8, 17 11月 10 08:40 2015 /dev/sdb1
brw-rw---- 1 root disk 8, 18 11月 10 08:40 2015 /dev/sdb2
mdデバイスの状態確認
パーティション構成が揃ったので、あとはmdデバイス管理用のコマンドmdadmを使用してRAID1として復旧するだけです。その前に、現状mdデバイスはどの様になっているのか確認してみます。
[root@server02 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sda1[0]
102336 blocks [2/1] [U_]
md1 : active raid1 sda2[0]
2930164012 blocks super 1.0 [2/1] [U_]
unused devices: <none>
当然といえば当然ですが、sda1とsda2だけの片系運用となっています。
mdデバイスの復旧
mdデバイスの状態が確認できたので、あとはmdデバイス管理用のコマンドmdadmを使用して、sda1とsda2のデータをsdb1とsdb2にそれぞれ同期してRAID1として復旧するだけです。
[root@server02 ~]# mdadm --manage /dev/md0 -a /dev/sdb1
mdadm: added /dev/sdb1
[root@server02 ~]# mdadm --manage /dev/md1 -a /dev/sdb2
mdadm: added /dev/sdb2
同期状況の確認
mdデバイスの同期はパーティションのサイズやIO負荷状況により左右されます。同期中は下記のような表示となり、進捗を確認できます。
[root@server02 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
102336 blocks [2/2] [UU]
md1 : active raid1 sdb2[2] sda2[0]
2930164012 blocks super 1.0 [2/1] [U_]
[>....................] recovery = 0.0% (108224/2930164012) finish=451.1min speed=108224K/sec
unused devices: <none>
復旧後確認
mdデバイスが正常に復旧するとつぎのように”[UU]”と表示されて、2つのHDDがオンラインになっていることを確認できます。これで復旧は完了です。
[root@server02 ~]# cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdb1[1] sda1[0]
102336 blocks [2/2] [UU]
md1 : active raid1 sdb2[1] sda2[0]
2930164012 blocks super 1.0 [2/2] [UU]
unused devices: <none>