このページでは自宅サーバーRAID構成デグレーデッドモードに移行した後の修復方法について初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
OSにRAIDデバイスを追加

RAIDを新たに作成する

ハードディスクの追加

RAID構築モデルについて

ハードディスクの領域確保

mdadmによるRAIDの作成

RAIDデバイスのマウント

ハードディスクが壊れたら

mdadmによるRAIDの修復

mdadmによるディスクの交換

mdadmによるRAIDの解除


まず障害の状況を確認しましょう

RAID デバイスを構成する ハードディスク のどれかに障害が発生したら、まずはその状況を正しく把握することが重要です。ここで判断を誤るとせっかくのRAIDを自らの手で壊してしまうことになりかねません。

まず、 "/proc/mdstat" の内容を確認しましょう。

"/proc/mdstat" の見方については /proc/mdstatの内容について を参考にしてください。

例えば "/dev/hdc" に障害が発生して LinuxOS が構成から切り離した場合は、正常時と比べると以下のように "/dev/md0" から "/dev/hdc1" が、 "/dev/md1" から "/dev/hdc2" がなくなっているのがお分かりと思います。

[root@web1 ~]# cat /proc/mdstatEnter
Personalities : [raid1] [raid5]
md0 : active raid1 hdb1[0] hdd1[2]
   58604992 blocks [2/1] [U_]
   [===>.................] recovery = 15.4% (9061568/58604992) finish=24.3min speed=33956K/sec
md1 : active raid5 hdb2[0] hdd2[2]
   194450560 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]

unused devices: <none>
[root@web1 ~]#

更に 赤字 で示すように本来RAIDを構成すべき パーティション の欠損も確認することができます。

ここでもう一つ注意すべきことは、既に "/dev/md0" の再構築が開始されていることです。

これはいうまでもなく "/dev/md0" に予めスペアパーティションとして "/dev/hdd1" が準備されているからで、 WBEL CentOS ソフトウェア RAIDはスペアパーティションが準備されていればこのように即座に修復作業を実行してくれるわけです。

RAIDの障害を発見するのが遅れた場合には既に修復作業は終わっているかもしれませんが、まだ修復が終わっていない場合は慌てずに "/proc/mdstat" の内容が、

[root@web1 ~]# cat /proc/mdstatEnter
Personalities : [raid1] [raid5]
md0 : active raid1 hdb1[0] hdd1[1]
   58604992 blocks [2/2] [UU]

md1 : active raid5 hdb2[0] hdd2[2]
   194450560 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]

unused devices: <none>
[root@web1 ~]#

のように 必ず自動修復が終了するまで待ちます 。そしてこれを障害が発生する前に保存しておいた RAIDの稼働状況の保存 の内容と比べてみます。

[root@web1 ~]# cat mdstatEnter
Personalities : [raid1] [raid5]
md0 : active raid1 hdd1[2] hdc1[1] hdb1[0]
   58604992 blocks [2/2] [UU]

md1 : active raid5 hdd2[2] hdc2[1] hdb2[0]
   194450560 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>
[root@web1 ~]#

障害発生前の"/proc/mdstat"

"/dev/md0" は自動修復が終わってRAID1構成が復活しましたので、 "[2/2] [UU]" に戻りました。また "hdd1[2]" "hdd1[1]" に変わりました。

更に "mdadm --detail --scan" を実行して内容を確認します。

[root@web1 ~]# mdadm --detail --scanEnter
ARRAY /dev/md0 level=raid1 num-devices=2 UUID=0d00e0b1:6d4f3c77:4fad808d:9b346c47
ARRAY /dev/md1 level=raid5 num-devices=3 UUID=627b0261:336aac48:92f98b62:a4aeda39
[root@web1 ~]#

これを障害が発生する前の内容 RAIDの稼働状況の保存 と比べてみましょう。

[root@web1 ~]# cat mdadm.conf.web1Enter
ARRAY /dev/md0 level=raid1 num-devices=2 spares=1 UUID=0d00e0b1:6d4f3c77:4fad808d:
9b346c47
ARRAY /dev/md1 level=raid5 num-devices=3 UUID=627b0261:336aac48:92f98b62:a4aeda39
[root@web1 ~]#

障害発生前の"mdadm --detail --scan"

赤字 で示す部分、つまり "/dev/md0" からスペアパーティションの表示が消えていますが、スペアパーティションが自動的に正式な構成パーティションとしての動作に変わったこを意味します。

"/proc/mdstat" の中で "hdd1[2]" "hdd1[1]" に変わったのはこのためです。

一方の "/dev/md1" はスペアパーティションのないRAID5ですので、 デグレーデッドモード デグレーデッドモードについて で動作しています。

以上で現在の状態は確認できました。

つまりこれから行うべき内容は、

1. "/dev/md0" へのスペアパーティションの追加。

2. "/dev/md1" のRAID5の修復。

ということになります。

ところで、ハードディスクの障害の内容によっては、障害の起こったパーティションが "/etc/mdstat" から消えるのではく、

[root@web1 ~]# cat /proc/mdstatEnter
Personalities : [raid1] [raid5]
md0 : active raid1 hdd1[1] hdc1[2](F) hdb1[0]
   58604992 blocks [2/2] [UU]

md1 : active raid5 hdd2[2] hdc2[3](F) hdb2[0]
   194450560 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]

unused devices: <none>
[root@web1 ~]#

のように障害の起こっているパーティションに "(F)" マーク(Failed=不良)が付けられた状態になることもあります。

こういう場合は "mdadm" コマンド Manageモード で、

mdadm --manage [RAIDデバイス名] --remove [取り外すパーティション名] Enter

と実行して パーティションを取り除く必要がありますので注意してください

そしてこのあともう一度 "/proc/mdstat" の内容を確認して、パーティションのリストから "/dev/hdc1" "/dev/hdc2" が消えていることをチェックします。

[root@web1 ~]# mdadm --manage /dev/md0 --remove /dev/hdc1Enter
mdadm: hot removed /dev/hdc1
[root@web1 ~]# mdadm --manage /dev/md1 --remove /dev/hdc2Enter
mdadm: hot removed /dev/hdc2
[root@web1 ~]# cat /proc/mdstatEnter
Personalities : [raid1] [raid5]
md0 : active raid1 hdd1[1] hdb1[0]
   58604992 blocks [2/2] [UU]

mmd1 : active raid5 hdd2[2] hdb2[0]
   194450560 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]

unused devices: <none>
[root@web1 ~]#

ハードディスクの障害には色々なパターンがありますから、まずは現状をきちんと把握することが大事です。

関連セクションへ 関連セクション・ OSをRAID構成でインストール

このページの先頭へ↑

RAID1へのスペアパーティションの追加とRAID5の修復

必要に応じてバックアップをとり、交換用の ハードディスク が準備できたら poweroff コマンド ホスト機 の電源を切ります。

そしてハードディスクを取替えて電源を入れます。

ハードディスクの取替えについてはこのセクションの前半の解説を参考にしてください。

LinuxのRAIDの解説書
オススメです

ホスト機が起動したら、交換したハードディスクを交換前のハードディスクと同じように領域確保します。

[root@web1 ~]# cat /var/log/dmesg | grep hdcEnter  ←認識を確認します
  ide1: BM-DMA at 0xcc08-0xcc0f, BIOS settings: hdc:DMA, hdd:DMA
hdc: SAMSUNG SP1604N, ATA DISK drive
hdc: max request size: 1024KiB
hdc: 312581808 sectors (160041 MB) w/2048KiB Cache, CHS=19457/255/63, UDMA(100)
hdc: cache flushes supported
 hdc:
[root@web1 ~]# fdisk /dev/hdcEnter  ←"/dev/hdc"に対して設定を開始します。

このディスクのシリンダ数は 19457 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
  (例. DOS FDISK, OS/2 FDISK)

コマンド (m でヘルプ): nEnter  ←パーティションの新規作成コマンド"n"をタイプします。
コマンドアクション
  e  拡張
  p  基本領域 (1-4)
pEnter  ←"p"で基本領域を選択します。
領域番号 (1-4): 1Enter  ←領域番号"1"を選択します。
最初 シリンダ (1-19457, default 1):Enter  ←初期値"1"(先頭から確保)とします。
Using default value 1
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-19457, default 19457): +60000MEnter  ←他のハードディスクに合わせて領域を確保します。

コマンド (m でヘルプ): nEnter  ←パーティションの新規作成コマンド"n"をタイプします。
コマンドアクション
  e  拡張
  p  基本領域 (1-4)
pEnter  ←"p"で基本領域を選択します。
領域番号 (1-4): 2Enter  ←領域番号"2"を選択します。
最初 シリンダ (7297-19457, default 7297):Enter  ←初期値"7297"(確保可能な先頭シリンダ)とします。
Using default value 7297
終点 シリンダ または +サイズ または +サイズM または +サイズK (7297-19457, default 19457):19400Enter  ←他のハードディスクに合わせて領域を確保します。

コマンド (m でヘルプ): pEnter  ←状況表示コマンド"p"で領域を確認します。

Disk /dev/hdc: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot   Start     End   Blocks  Id System
/dev/hdc1        1    7296  58605088+ 83 Linux
/dev/hdc2      7297    19400  97225380  83 Linux

コマンド (m でヘルプ): tEnter  ←領域システム変更コマンド"t"を実行します。
領域番号 (1-4): 1Enter  ←領域番号"1"を選択します。
16進数コード (L コマンドでコードリスト表示): fdEnter  ←領域システムコード"fd"を指定します。
領域のシステムタイプを 1 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): tEnter  ←領域システム変更コマンド"t"を実行します。
領域番号 (1-4): 2Enter  ←領域番号"2"を選択します。
16進数コード (L コマンドでコードリスト表示): fdEnter  ←領域システムコード"fd"を指定します。
領域のシステムタイプを 2 から fd (Linux raid 自動検出) に変更しました

コマンド (m でヘルプ): pEnter  ←状況表示コマンド"p"で領域を確認します。

Disk /dev/hdc: 160.0 GB, 160041885696 bytes
255 heads, 63 sectors/track, 19457 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス Boot   Start     End   Blocks  Id System
/dev/hdc1        1    7296  58605088+ fd Linux raid 自動検出
/dev/hdc2      7297    19400  97225380  fd Linux raid 自動検出

コマンド (m でヘルプ): wEnter  ←"w"で領域情報をシステムに書き込みます。
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
[root@web1 ~]#

領域の確保が終わったら、修復するRAIDデバイスを umount コマンド でファイルシステムからアンマウントします。

実際にはファイルシステムで稼働中でもRAIDの修復は可能なのですが、修復作業はそれなりにホスト機にもハードディスクにも負荷がかかりますので、修復中はできるだけハードディスクに別のアクセスが発生しないように、という配慮です。

[root@web1 ~]# umount /dev/md0Enter
[root@web1 ~]# umount /dev/md1Enter
[root@web1 ~]#

次に "mdadm" コマンド Manageモード 、すなわちRAID操作モードで、

mdadm --manage [RAIDデバイス名] --add [追加するパーティション名] Enter

と実行してRAIDの修復を行います。

コマンドの実行は root アカウント から行います。

[root@web1 ~]# mdadm --manage /dev/md0 --add /dev/hdc1Enter
mdadm: hot added /dev/hdc1
[root@web1 ~]# mdadm --manage /dev/md1 --add /dev/hdc2Enter
mdadm: hot added /dev/hdc2
[root@web1 ~]#

RAID1の "/dev/md0" は既に自動修復が終わっていますので、新しくスペアディスクがセットされるだけです。この作業はすぐに終了して、RAID5の "/dev/md1" の再構築がはじまります。

[root@web1 ~]# cat /proc/mdstatEnter
Personalities : [raid1] [raid5]
md0 : active raid1 hdc1[2] hdb1[0] hdd1[1]
   58604992 blocks [2/2] [UU]

md1 : active raid5 hdc2[3] hdd2[2] hdb2[0]
   194450560 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
   [==>..................] recovery = 11.0% (10712472/97225280) finish=57.1min speed=25224K/sec
unused devices: <none>
[root@web1 ~]#

修復 プロセス が終了したら、 "mdadm --detail --scan" を実行して再構築されたRAIDデバイスの内容を確認します。

ちなみにRAIDの再構築中は、追加中のパーティションはスペアパーティション扱いで表示されます。
[root@web1 ~]# cat /proc/mdstatEnter
Personalities : [raid1] [raid5]
md0 : active raid1 hdc1[2] hdb1[0] hdd1[1]
   58604992 blocks [2/2] [UU]

md1 : active raid5 hdc2[1] hdd2[2] hdb2[0]
   194450560 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]

unused devices: <none>
[root@web1 ~]# mdadm --detail --scanEnter
ARRAY /dev/md0 level=raid1 num-devices=2 spares=1 UUID=0d00e0b1:6d4f3c77:4fad808d:
9b346c47
ARRAY /dev/md1 level=raid5 num-devices=3 UUID=627b0261:336aac48:92f98b62:a4aeda39
[root@web1 ~]#

そして最後に修復の終わったRAIDデバイスを mount コマンドでファイルシステムに マウント します。

[root@web1 ~]# mount /dev/md0Enter
[root@web1 ~]# mount /dev/md1Enter
[root@web1 ~]#

以上で障害前のRAID構成に戻りました。

関連セクションへ 関連セクション・ OSをRAID構成でインストール

このサイトは リンクフリー です。趣味や勉強のためでしたら、引用、転用、コピー、朗読、その他OKです。このサイトへのリンクについては こちら をご覧ください。今のところ更新予定はありませんのでご了承ください。
”Linux”は、Linus Torvalds 氏の各国における登録商標です。”Red Hat”及びRed Hatのロゴおよび Red Hat をベースとしたすべての商標とロゴは、各国におけるRed Hat, Inc. 社の商標または登録商標です。その他のプログラム名、システム名、製品名などは各メーカー、ベンダの各国における登録商標又は商標です。