GPTテーブルと Raid1 mdデバイスの復旧

はじめに

 インフラ担当者として障害発生は恐ろしいものですが切り離せないものでもあります。
 今回、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>

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください