このページでは自宅サーバーに、RAID構成パーティションを設置するためのハードディスクの初期化ついて初心者/ビギナー向けに解説します。
お便利サーバー.com+相互リンクサイト内をキーワードで検索
OSにRAIDデバイスを追加

RAIDを新たに作成する

ハードディスクの追加

RAID構築モデルについて

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

mdadmによるRAIDの作成

RAIDデバイスのマウント

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

mdadmによるRAIDの修復

mdadmによるディスクの交換

mdadmによるRAIDの解除


LinuxのソフトウェアRAIDとスーパーブロックについて

追加した ハードディスク の初期化を行う前に、少しだけ LinuxOS ソフトウェア RAID スーパーブロック について説明しておきます。

RAID構成のハードディスクに障害が発生してもハードディスクの交換でデータを維持できることは容易にお解かりかもしれませんが、では、 システムを担うハードディスクに障害が発生した場合に、RAID上のデータはどうなってしまうのでしょうか

ソフトウェアRAIDは読んで字のごとく OS がその動作を管理します。

ということはOS自身が壊れてしまった、あるいはOSが インストール されているハードディスクが故障してしまった、というような場合、システムはもちろん起動できません。このときRAID上のデータはその管理すべきOSを失って取り出し不可能になってしまうのでしょうか?。

実は現在LinuxOSで採用されているソフトウェアRAIDでは、こういうケースでもデータを失うことはありませんので安心してください。

このセクションでモデルケースとして取り上げる ホスト機 ハードディスク構成は、

システム:シングルハードディスク"/dev/hda"

データ:RAID構成のマルチハードディスク"/dev/hdb,hdc,hdd"

となっていますが、例えば "/dev/hda" が完全に故障してしまい、システムのバックアップも残っていなかったとします。

こういう場合は "/dev/hda" を新しいハードディスクに取り替えて、最初から WBEL CentOS のインストールをやり直します。するとインストール時の ディスクの設定 WBEL3のディスクの設定 CentOS3のディスクの設定 WBEL4のディスクの設定 CentOS4のディスクの設定 CentOS5のディスクの設定 の画面で、既存のソフトウェアRAID構成がそのまま表示されますから、ここで フォーマットをしなければ 以前のままRAIDデバイスを使い続けることができるようになっています。

実は、現行のLinuxOSのソフトウェアRAIDの重要な情報はシステムがインストールされたパーティションではなく、ソフトウェアRAIDを構成する個々のハードディスク上に書き込まれていて、既存のシステムが機能しなくなっても再構成できるような仕組みになっています。

その情報が記録されている部分を スーパーブロック と呼びます。

以前のLinuxOSのソフトウェアRAIDにはこのスーパーブロックの仕組みが存在しなかったため、冗長性を維持するにはかならずシステムごとRAID化しなければなりませんでした。

しかしWBEL3やCentOS3、WBEL4やCentOS4、CentOS5をはじめ、現行のLinuxOSはほぼ間違いなくスーパーブロック方式になっていますので、安心してソフトウェアRAIDを利用できるようになっています。

ところでこのようにデータの冗長性に大きな役割を占めるスーパーブロックですが、これがしばしばRAID構築の 惑いの種 になることがあります。

例えば過去に一度でもLinuxOSのソフトウェアRAIDの構成ディスクとして使われたことのあるハードディスクには、 fdisk コマンドで領域を削除したり形式を変更したりしても、 スーパーブロック情報は残ったままになっています

もっとも、そのハードディスクを通常のハードディスクとして使うのであれば無視して構いませんし、ソフトウェアRAIDを組みなおせばスーパーブロック情報が新しく書き換えられますから実用上困ることはありません。

ただ、 "mdadm" で新しいRAIDを作成したり、既存のRAIDにハードディスクの追加を行おうとしたりすると必ず、

「スーパーブロック情報がありますが、作業を続行していいですか?。」

という確認のメッセージが表示されます。

これはもちろん「スーパーブロックが存在するハードディスクには、重要なデータが保管されていた可能性が高い。」という根拠に基づいたアラートですから、それなりに重要な警告ということになるでしょう。

以後、 "mdadm" によるRAID操作を行う場合にはこの点に注意して作業を行ってください。

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

このページの先頭へ↑

RAID用にハードディスクのパーティションを作る

ここで確認のために fdisk コマンド ハードディスク の状況を一覧してみましょう。

理由はよくわかりませんが、ハードディスクの表示順序は必ずしもabc順にはならないようです。
[root@web1 ~]# fdisk -lEnter

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

デバイス Boot   Start     End   Blocks  Id System
/dev/hda1  *      1     15   120456  83 Linux
/dev/hda2       16     276   2096482+ 82 Linux スワップ
/dev/hda3       277    2481  17711662+ 83 Linux

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

デバイス Boot   Start     End   Blocks  Id System

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

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

デバイス Boot   Start     End   Blocks  Id System
[root@web1 ~]#

赤字 で示している "/dev/hda" が、 WBEL4 のシステム用のハードディスクですが、既に "/dev/hda1" "/dev/hda2" "/dev/hda3" といった パーティション が作られていることがお分かりと思います。

一方 グリーン で示しているのが今回新たに増設したハードディスクですが、新品のハードディスクあるいは取り付け前にパーティションがすべて削除されていたハードディスクの場合は、このように何も領域は表示されないはずです。

LinuxOS 以外の OS で使われていたハードディスクでも、パーティションはきちんと表示されます。

もちろんここでパーティションの存在が確認できても次のステップで削除すれば良いだけなのですが、通常パーティションが作成してあるハードディスクは 過去に何らかの目的で使われていた ことを意味します。

ということはひょっとすると大事なデータが残っているかもしれませんから、心当たりがあるときは作業を中止してハードディスクの内容を確認したほうが良いかもしれません。

さて、今回のケースでは全く同じハードディスクを3本使用しますから容量も全く同一です。

ところが同じ160 GB のハードディスクでも、モデルやメーカーが異なれば 幾分は 容量が異なるのが普通です。

RAIDを構成する場合は同じ容量のパーティションを組み合わせる必要がありますから、このディスク一覧で 「総容量が最も小さいハードディスクから順番に」 fdiskコマンドを対話型で起動し、パーティションの確保作業を行っていきます。

ちなみに、処理対象のハードディスクに既にパーティションが存在するときは、新しいパーティションを確保する前にこれを削除する必要があります。

パーティションの削除の方法については fdisk操作による既存領域の削除について に掲載していますので参考にしてください。

[root@web1 ~]# fdisk /dev/hdbEnter  ←"/dev/hdb"に対して設定を開始します。

このディスクのシリンダ数は 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  ←60GBをMB単位で指定して領域を確保します。

コマンド (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/hdb: 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/hdb1        1    7296  58605088+ 83 Linux
/dev/hdb2      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/hdb: 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/hdb1        1    7296  58605088+ fd Linux raid 自動検出
/dev/hdb2      7297    19400  97225380  fd Linux raid 自動検出

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

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

対話型ですのでパーティション操作そのものは難しくないと思います。

ここで確保するパーティションはRAIDデバイスを構成するためのものですから、最後に領域のシステムを "fd Linux raid 自動検出" に変更することを忘れないようにしてください。

また、上の例で二つ目のパーティションを確保するとき、終点シリンダを明示的に指定しなければハードディスクの残りの領域すべて(つまり7297-19457シリンダ)を "/dev/hdb2" として確保することができますが、ここでは 少しだけ容量を残して 7297-19400シリンダで確保を行っています( 赤字 で示す部分です)。

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

実用上はこんな面倒なことをしなくても良いのですが、後々RAIDを構成するハードディスクのどれかが破損して交換を余儀なくされたときに重要な意味を持ちます。

先ほど少し触れましたが、例えば160GBのハードディスクといっても、モデルやメーカーによって若干の誤差があります。

例えばこのハードディスクは、

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

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

デバイス Boot   Start     End   Blocks  Id System
[root@web1 ~]#

となっていますが、このハードディスクが壊れて新しいハードディスクに交換したとき、その内容が、

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

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

デバイス Boot   Start     End   Blocks  Id System
[root@web1 ~]#

だとすると、わずかですがハードディスクの総容量が 交換前よりも小さくなってしまう ことになります。

"mdadm" では、 1% 以上の容量差があるとRAIDを構築できないようになっています。

RAIDは 同じ容量のパーティションの組み合わせ で運用するのが原則ですから、交換後のハードディスクの容量が交換前よりも小さい場合は、RAIDの再構成のためのパーティション容量が確保できなくなってしまうことがあります。

そこで最初にRAID構築のためのパーティションを確保するときにはハードディスクの総容量を使い切らないように配慮しておくわけです。

今回のケースでは全シリンダ数 "19457" に対して "19400" までしか確保していませんから、実際の確保容量の合計は、

8225280 bytes × 19400 cylinders = 159570432000 bytes

と、 わずかに160GBを下回る容量 を確保したことになります。

つまり将来交換に使用するハードディスクの総容量がこれ以上であれば問題なく利用できることになるわけですが、カタログ上160GBという表記のあるハードディスク製品ならば、 必ず160GB の容量はあるはずですから、これでRAIDの再構築の容量が確保できなるなるという問題は解消するわけです。

さて、あとは同じ要領で残り二つのハードディスクについてもパーティションを確保します。

そして最終的に、

[root@web1 ~]# fdisk -lEnter

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

デバイス Boot   Start     End   Blocks  Id System
/dev/hda1  *      1     15   120456  83 Linux
/dev/hda2       16     276   2096482+ 82 Linux スワップ
/dev/hda3       277    2434  17334135  83 Linux

Disk /dev/hdb: 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/hdb1        1    7296  58605088+ fd Linux raid 自動検出
/dev/hdb2      7297    19400  97225380  fd Linux raid 自動検出

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 自動検出

Disk /dev/hdd: 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/hdd1        1    7296  58605088+ fd Linux raid 自動検出
/dev/hdd2      7297    19400  97225380  fd Linux raid 自動検出
[root@web1 ~]#

となるように設定すればOKです。

次のステップで引き続きRAIDデバイスの構築に進みます。

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

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