このページではRAIDで運用している自宅サーバーハードディスクの故障時の復旧方法について初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
OSをRAID構成でインストール

RAIDを構築する

RAIDについて諸々

ハードRAIDとソフトRAID

RAIDの種類と選択について

RAIDでOSをインストール(〜CentOS5)

RAIDでOSをインストール(CentOS6)

起動設定とメンテナンス

ハードディスクの交換

RAID再構築の準備

RAIDの再構築(raidtools)

RAIDの再構築(mdadm)


ハードディスクが故障したら

ハードディスク はいきなり壊れてしまうこともありますが、普通は「なんだか音が大きくなってきた」あるいは「最近ハードディスクの読み書きが遅くなってきた」というような 故障の前兆 が見られるのが普通です。

そのハードディスクを クライアント機 に使っている場合はそれに加えて、操作中に 「ハードディスクの読み書きエラー」 という OS からのメッセージをもらうことが、ハードディスク故障の予告になります。

サーバー機 に組み込まれているハードディスクの場合は、実際にサーバー機を操作する機会が少ないのでこういった「予兆」を掴みにくいのですが難点です。

しかしながら、サーバー上で メールサーバー を稼動させ、 サーバーからのレポートをメールで受け取る のようにサーバーの動作レポートをメールで受け取れるように設定しておけば、サーバー上で比較的多い頻度で読み書きエラーが発生したときには、サーバーを直接調べなくてもメールでその内容を知ることができます。

以下は、実際に稼働中の WBEL3 で、ハードディスクの故障が起こったときのメールの内容の一部です。

################### LogWatch 4.3.2 (02/18/03) ####################
    Processing Initiated: Sat Feb 18 04:02:03 2006
    Date Range Processed: yesterday
   Detail Level of Output: 0
     Logfiles for Host: ****************
################################################################
          中略
Feb 17 14:49:32 md5: no spare disk to reconstruct array! -- continuing in degraded mode
Feb 17 14:49:32 md3: no spare disk to reconstruct array! -- continuing in degraded mode
Feb 17 14:49:32 md2: no spare disk to reconstruct array! -- continuing in degraded mode
Feb 17 14:49:32 md1: no spare disk to reconstruct array! -- continuing in degraded mode
Feb 17 14:49:32 md6: no spare disk to reconstruct array! -- continuing in degraded mode
          .
          .
          .

つまり、それまでRAIDを構成していた パーティション が、ハードディスクの故障によって読み書き不能になった結果、

「スペアのパーティションが存在しないため、RAIDの再構築ができません。デグレーデッドモード デグレーデッドモードについて で動作を続けます。」

と処理した結果をレポートしているわけです。

こういう「ただ事ではなさそうな」レポートを受け取ったら、 サーバー ログイン して "/proc/mdstat" /proc/mdstatについて の内容を確認してください。大抵は、

これは、この コンテンツ の解説どおりにRAIDを 構築中のLinuxサーバー で、プライマリ-スレーブに接続したハードディスク hdb が欠損した状態を示しています。
正常な場合の "/proc/mdstat" 正常な場合の/proc/mdstat と比較してみてください。
Personalities : [raid1]
read_ahead 1024 sectors
Event: 8
md9 : active raid1 hda9[0]
   104320 blocks [2/1] [U_]

md8 : active raid1 hda8[0]
   4867584 blocks [2/1] [U_]

md7 : active raid1 hda7[0]
   1020032 blocks [2/1] [U_]

md6 : active raid1 hda6[0]
   3068288 blocks [2/1] [U_]

md5 : active raid1 hda5[0]
   4096448 blocks [2/1] [U_]

md3 : active raid1 hda3[0]
   1020032 blocks [2/1] [U_]

md2 : active raid1 hda2[0]
   2096384 blocks [2/1] [U_]

md1 : active raid1 hda1[0]
   104320 blocks [2/1] [U_]

unused devices: <none>

のようにデグレーデッドモードになっているはずです。

このように、読み書きの異常などでWBELやCentOSのシステムから「はじき出されたパーティション」が出来てしまったハードディスクは、 「二度とサーバーには使用しない」 ことをお勧めします。

そういう「前科持ち」のハードディスクでも、もう一度初期化し直せば再利用できないことはないかもしれませんが、一度でも異常の起こったハードディスクは近い将来にもう一度同じ異常が発生する危険性が大です。

もったいないと思うかもしれませんが、ハードディスクはお金で買えても、消えてしまったデータはお金で元に戻すことはできません。

こういう場合は思い切って別のハードディスクに交換してしまいましょう。

関連セクションへ 関連セクション・ OSにRAIDデバイスを追加

このページの先頭へ↑

ハードディスクの交換

RAID の再構築に用いる交換用の ハードディスク は、デグレーデッドで動作しているハードディスクの容量以上のものを使用しましょう。

ハードディスクの容量は、カタログ表記上は同じであってもメーカーや型番によって数%ほど実際の容量が異なる場合が普通です。

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

つまり、現在稼動中のハードディスクと同じ容量表示のハードディスクを使ってしまうと、実際にRAIDを再構築するときに「少し容量が足りない」というケースも起こりうることになります。

例えば、デグレーデッドで動作している hda の総容量が120 GB であれば、それとRAIDの対になる交換用のハードディスクには160GBのものを用いる、というのが間違いのない方法です。

もちろん、それでは約40GBが余ってしまうことになるわけですが、これはそのうち何か別の利用方法が見つかったときのためにとっておいても良いわけです。

また、交換に用いるハードディスクに中古品を用いるときは、そのハードディスクが以前に 「何らかの OS の起動ディスクとして使われていたもの」 の場合は注意が必要です。

なぜならもしもそういうハードディスクを、デグレーデッドで稼動しているハードディスクより優先して起動するポートに取り付けてしまうと、そのハードディスク上の ブートローダ から起動してしまうことになるからです。

初期化の状態はどうでも構いません。そのハードディスクから起動できなくなってしまえばそれでOKです。

こういう場合は、いったん別のホスト機などを使って初期化し、ブートローダーを削除してから使用してください。

さて、ハードディスクの準備ができたら、 構築中のLinuxサーバー root アカウント ログイン して、 poweroff コマンド ホスト機 の電源を切ります。

[root@web1 ~]# poweroff Enter
 ※メッセージが表示されながら電源が切れます。

電源が切れたら、 誤って電源を入れてしまわないように念のためにホスト機から電源コードを抜き 、ケースを開けて壊れたハードディスクをはずしてください。

WBEL3 CentOS3 でRAIDを構築した場合は raidtools が使用されますので、 新しいハードディスクを元のポート 以外 の位置に取り付けると、 "/etc/raidtab" の書き換えが必要になります /etc/raidtabについて

そして、壊れたハードディスクが取り付けられていたポートに交換用のハードディスクを取り付けてください。

取り付けが終わったらホスト機に電源コードを挿し込みますが、 BIOS での設定内容 ホスト機の起動設定について によっては電源を差し込むと同時にホスト機が起動してしまうかもしれませんので、起動してしまっても構わない状態で電源を差し込んでください。

関連セクションへ 関連セクション・ OSにRAIDデバイスを追加

このページの先頭へ↑

RAID用に新しいハードディスクを初期化する

今回のモデルケースでは、

RAID 1を構成するhdaとhdbのうち、hdbが故障したために新しい ハードディスク をhdbとしてRAIDを再構築する。」

という作業を行います。

ハードディスク交換後にホスト機を起動したら、 サブネット 内の適当な クライアント機 から SSHクライアント 構築中のLinuxサーバー ログイン します SSHクライアントでサーバーに接続する(WBEL3) SSHクライアントでサーバーに接続する(CentOS3) SSHクライアントでサーバーに接続する(WBEL4) SSHクライアントでサーバーに接続する(CentOS4) SSHクライアントでサーバーに接続する(CentOS5)

それから su コマンド ユーザーアカウント "root" に変更します。

[tanaka@web1 ~]$ su -Enter
Password: "root"のパスワードを入力します。 Enter
[root@web1 ~]#

LinuxOS でハードディスクの操作を行うには fdisk コマンド を利用します。

この場合デバイス名は "/dev/hdb" ですから、次のようにコマンドを実行して "/dev/hdb" の設定を行います。

[root@web1 ~]# fdisk /dev/hdbEnter

デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも
含んでいません
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。

このディスクのシリンダ数は 2039 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
  (例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

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

色々警告文らしきものが出ますが、これはこういったツールの「お約束」なのでとりあえず全部無視してかまいません。

fdiskコマンドが対話型で起動していれば、最後に、

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

というプロンプトが表示されます。

ここで p Enter とタイプすると、ハードディスクの状態が表示されます。

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

Disk /dev/hdb: 16.7 GB, 16776732672 bytes
255 heads, 63 sectors/track, 2039 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

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

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

hdb が新品のハードディスクの場合は上のように何も パーティション は表示されませんが、例えば WindowsOS で使用していたハードディスクを hdb として接続している場合は以下のように表示されることがあります。

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

Disk /dev/hdb: 16.7 GB, 16776732672 bytes
255 heads, 63 sectors/track, 2039 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス ブート  始点   終点 ブロック  ID システム
/dev/hdb1       1    765  6144831  7 HPFS/NTFS
/dev/hdb2      766   2039 10233405  f Win95 拡張領域 (LBA)
/dev/hdb5      766   2039 10233373+  7 HPFS/NTFS

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

こういう場合は、LinuxOS用のパーティションを作成する前にこれらの古いパーティションをすべて削除しておく必要があります。

パーティションの状況にもよりますが、こういう場合は以下のように作業してパーティションを削除してください。

/dev/hdb5 は、拡張パーティション /dev/hdb2 の中に作られた論理パーティションです 拡張パーティションと論理パーティションについて(WBEL3) 拡張パーティションと論理パーティションについて(CentOS3) 拡張パーティションと論理パーティションについて(WBEL4) 拡張パーティションと論理パーティションについて(CentOS4) 拡張パーティションと論理パーティションについて(CentOS5)
従って論理パーティションの「受け皿」である拡張パーティション /dev/hdb2 を削除すれば、 /dev/hdb5 も一緒に削除されることになります。
コマンド (m でヘルプ): pEnter

Disk /dev/hdb: 16.7 GB, 16776732672 bytes
255 heads, 63 sectors/track, 2039 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス ブート  始点   終点 ブロック  ID システム
/dev/hdb1       1    765  6144831  7 HPFS/NTFS
/dev/hdb2      766   2039 10233405  f Win95 拡張領域 (LBA)
/dev/hdb5      766   2039 10233373+  7 HPFS/NTFS

コマンド (m でヘルプ): dEnter   ←パーティションを削除するコマンドです。
領域番号 (1-5): 1Enter       ←基本パーティション/dev/hdb1を指定します。

コマンド (m でヘルプ): dEnter
領域番号 (1-5): 2Enter       ←拡張パーティション/dev/hdb2を指定します。

コマンド (m でヘルプ): dEnter   ←削除すべきパーティションの有無を確認します。
No partition is defined yet!  ←パーティションがすべて削除されたことを示します。

コマンド (m でヘルプ): wEnter  ←削除情報を書き込み、fdiskを終了します。
領域テーブルは交換されました!

ioctl() を呼び出して領域テーブルを再読込みします。
ディスクを同期させます。
[root@web1 ~]# fdisk -l /dev/hdbEnter  ←"-l"オプションで状況表示します。(対話形式に移行せず、"p"コマンドと同じ内容を表示するオプションです。)

Disk /dev/hdb: 16.7 GB, 16776732672 bytes
255 heads, 63 sectors/track, 2039 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス ブート  始点   終点 ブロック  ID システム ←領域が削除されました。
[root@web1 ~]#

以上で新しく追加したハードディスクの初期化が終了しました。

関連セクションへ 関連セクション・ OSにRAIDデバイスを追加

このページの先頭へ↑

新しいハードディスクの情報を確認・修正する

RAID の再構築に用いる新しい ハードディスク の準備ができたら、これを現在稼動中の hda と同じ状態に パーティション を確保しますが、まずはパーティションの確保作業がきちんとできるように hdb のハードディスクのパラメータを hda に揃えましょう。

まず現在の hda のハードディスクの状態を確認します。

以下のようにタイプして fdisk で状況を表示させてください。

fdisk は通常は 対話方式 で操作を行うツールですが、 "-l" オプション付きで実行すると対話方式に移行せず、指定したハードディスクの状態だけを表示します。
[root@web1 ~]# fdisk -l /dev/hdaEnter

Disk /dev/hda: 16.7 GB, 16776732672 bytes
255 heads, 63 sectors/track, 2039 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

デバイス ブート  始点   終点 ブロック  ID システム
/dev/hda1  *     1    13  104391  fd Linux raid 自動検出
/dev/hda2      14    274  2096482+ fd Linux raid 自動検出
/dev/hda3      275    401  1020127+ fd Linux raid 自動検出
/dev/hda4      402   2039 13157235  5 拡張領域
/dev/hda5      402    911  4096543+ fd Linux raid 自動検出
/dev/hda6      912   1293  3068383+ fd Linux raid 自動検出
/dev/hda7     1294   1420  1020096  fd Linux raid 自動検出
/dev/hda8     1421   2026  4867663+ fd Linux raid 自動検出
/dev/hda9     2027   2039  104391  fd Linux raid 自動検出
[root@web1 ~]#

要は、この情報に合わせてhdbを設定していけば良いわけですが、後でチェックが確実にできるように、これも印刷しておきましょう。

次に、同じくfdiskを対話モードで起動して hdb の設定を行います。以下のようにタイプしてください。

[root@web1 ~]# fdisk /dev/hdbEnter

このディスクのシリンダ数は 2039 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
  (例. DOS FDISK, OS/2 FDISK)
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって
正常になります

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

ディスクの状態によって、ここで表示される警告文は若干異なる場合が異なりますが、ここで p Enter とタイプして、

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

Disk /dev/hdb: 16.7 GB, 16776732672 bytes
255 heads, 63 sectors/track, 2039 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

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

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

のように何もパーティション情報が表示されなければOKです。

さてここで、先に表示させた hda と、この hdb のハードディスクのパラメータの、カラーで表示している部分の値に注目してください。

このケースではhdaとhdbが全く同じ容量になっていますが、全く同じ機種のハードディスクを使用する場合には大抵こうなります。

まず、 で表示した部分ですが、これはそのハードディスクの総容量を示します。

hda よりも hdb のほうが容量が小さい場合にはRAIDが再構築できない可能性があります。

もちろん、あらかじめ hda よりも容量の大きなハードディスクとして hdb を接続しているはずですからこの部分は大丈夫のはずですが、念のため確認しておいてください。

もちろん、実際にこんな数の磁気ヘッドがあるはずはありません。せいぜい数個です。
詳細は割愛しますが、ヘッドを実際の数で扱うと ハードウェア の管理上不具合が出るための措置で、これは BIOS レベルで辻褄合わせの計算をやって求めた数値というわけです。

で表示した部分はそのハードディスクの論理的な磁気ヘッドの数を示します。

最近のハードディスクはほとんどが 255 という値になっていますが、少し古めの仕様のハードディスクの場合はこの数値が異なって表示される場合があります。

ハードディスクのパーティションの設定は、容量単位として一般的に用いられる バイト ではなく、 シリンダ という論理的な単位を基準に行います。

従って、二つのハードでディスクでパーティションの容量を一致させながら設定を行いたいとき、それぞれの1シリンダあたりの容量が異なっていると、面倒な計算をしなければならなくなります。

つまりヘッド数が 255 以外の場合でも、 hda hdb の数値が一致していれば問題はありません。
結構稀なケースかもしれませんが。

というわけですから、もしもこのシリンダ数が異なっている場合には hdb の値を hda の値に合わせておきます。

これは物理的な値の変更ではなく、論理的な値のすり合わせに過ぎませんのでハードディスクの実際のパラメータが変更されることはありませんので安心して作業してください。

例えば、

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

Disk /dev/hdb: 16.7 GB, 16776732672 bytes
240 heads, 63 sectors/track, 2039 cylinders
Units = シリンダ数 of 15120 * 512 = 7741440 bytes

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

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

のようにヘッド数が hda の値(255)とは異なる値で表示された場合は、次のように操作して hdb のヘッド数を255に変更します。

コマンド (m でヘルプ): xEnter       ←上級者設定モードに移行します。

上級者コマンド (m でヘルプ): hEnter    ←ヘッド数の変更コマンドをタイプします。
ヘッド数 (1-256, 初期値 240): 255Enter   ←ヘッド数をタイプします。

上級者コマンド (m でヘルプ): rEnter    ←基本設定モードに戻ります。

コマンド (m でヘルプ): pEnter       ←もう一度状況を表示してみます。

Disk /dev/hdb: 16.7 GB, 16776732672 bytes
255 heads, 63 sectors/track, 2039 cylinders    ←ヘッド数が変更されました。
Units = シリンダ数 of 16065 * 512 = 8225280 bytes

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

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

これで新しいハードディスクにパーティションを作成する準備ができました。引き続きパーティションの作成作業を行いますので、このまま次のパートに進んでください。

関連セクションへ 関連セクション・ OSにRAIDデバイスを追加

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