2003/05/13
RAIDframeは
Carnegie-Mellon Universityで作られたソフトウエアRAIDの機構です。
NetBSD-1.6ではGENERICカーネルで使える状態になっています。FreeBSD-5.0でもNetBSDのものがportされています。
RAIDframeでは/dev/raid[0-7]などのRAID擬似デバイスをraidレベル0,1,4,5のディスクとして扱うことができます。
RAID擬似デバイス名とraidレベルとは全く関連はありません。
raid0デバイスはraidレベル0のデバイス、ということではありません。
RAID擬似デバイスに対し物理ディスクデバイスを割り付け、それをRAID擬似デバイスからディスクとしてアクセスすることになります。raidレベルは物理ディスクの関連付け時点で決定します。
RAIDframeの構成概要図を示します。
まず、最初の段階として、
2つの物理ディスク領域を使いraid0擬似デバイスをraidレベル1(ミラー)で構成する
場合を考えてみます。
NetBSD-1.6では、GENERICカーネルで利用できます。NetBSD-1.5以前では有効になっていませんので、次の擬似デバイスを追加してカーネルを再構築する必要があります。
|
有効になっていれば、ブート時に次のようなメッセージが出力されます。
|
デフォルトで有効でなかった場合は、次のデバイスファイルがあるかを確認してください。
|
存在しなければ次のコマンドで作成しておきましょう。
|
RAIDframeで利用する物理ディスクパーティションを用意します。
ちゃんと使うのであれば、物理的に違うディスクの、同じ大きさのパーティションを利用することになるでしょう。とりあえず実験的にやるのであれば、同じ物理ディスク内でも、同じ大きさのパーティションを割り付けることで動作の確認は可能です。ここでは、次のように割り振ることにします。
# dmesg wd0 | grep sectors # disklabel wd0 |
物理ディスクは30GBのものが1台で、そのうちのg,hパーティションをRAID用にしています。この例ではサイズがgよりhのほうが1シリンダ分多いです。
物理パーティションの容量が多少違っても、小さい領域に合わせてRAIDが構成されますので、あまった部分は利用されないだけです。ちゃんと使うときは、同じジオメトリで同じ速度のディスクを利用してください。
まず、ディスクのパーティションを決定する必要があります。パーティション構成にはdisklabelコマンドを利用します。disklabel -i によるインタラクティブモードが便利です。
|
|
インタラクティブモードにすると、ある程度の計算を省くことができます。慣れている人は自由にラベルを記述してください。
必要な物理ディスクパーティションの数は、RAIDレベルや構成により変わってきます。ここではraid1をスペアデバイスなしで構成するため、必要なパーティションが2つ、ということです。
これで物理ディスクの設定は終了です。ファイルシステムを作成する必要はありません。
RAIDデバイスの構成を決定する定義ファイルを記述します。
/etc/rc.d/raidframeから読み込まれるファイルは、/etc/raid[0-9].confとなっています。
raid[0-9]はraid擬似デバイス名を表します。ここではraid0デバイスをraidレベル1(ミラーリング)で構成しますので、記述するファイルは
/etc/raid0.conf です。次のように記述します。
# cat /etc/raid0.conf |
|
raid0.confは、raidctlコマンドに与えられる定義ファイルになります。
詳しいことはマニュアルに譲りますが、単純なミラーなら上記設定で動きます。
これまで設定した構成に従いRAIDを初期化します。
RAID構成の操作にはraidctlコマンドを利用します。
# raidctl -C /etc/raid0.conf raid0 |
定義ファイルに従い定義 |
RAIDデバイスの初期化が終了すれば、ディスクとしてアクセスすることができます。
まだこの状態ではラベルのついていないディスクが構成されたに過ぎません。
このあと、ディスクにラベルをつけ、ファイルシステムを作成すれば、mountすることができます。
RAIDデバイスの初期化(raidctl
-iv)はとても時間がかかります。
Duron 700MHz, UDMA66-IDE, 同一ディスク上でRAID1構成, 容量8GBで約45分を必要としました。
RAIDデバイスは一度構成されれば、あとは通常のディスクと変わらずアクセスできます。
通常のディスク追加と同様にしてラベルをつけ、ファイルシステムを作成してください。
以前に一度構成している場合(何度かトライしてラベル生成を終了している場合も)は、以前のディスクラベルが残っているかもしれません。このような場合は、
dd if=/dev/zero of=/dev/rraid0d bs=1k count=8
とすることで、ラベルを削除することができます。
# newfs /dev/raid0e |
|
マウントできることを確認したら、/etc/fstabに起動時にマウントするよう記述しておきましょう。
|
ここまでできていれば、あとは通常のディスクと同様に運用できます。再起動して、正しくマウントされるかを確認してください。
日々の運用では、RAIDディスクに異変がないかをチェックする程度です。
RAIDステータスは、raidctl -s, raidctl -g などでチェックできます。
|
|
RAIDframeでは物理ディスク領域を「Component」と呼んでいます。
(ccdによる論理ディスクでもかまいませんが)
コンポーネントの状態は次のようになっています。
ステータス |
状態 |
---|---|
optimal |
正常稼動中 |
failed |
制御配下にない |
reconstructing |
再構成中 |
spared |
代替ディスク待機中 |
used_spare |
代替ディスク利用中 |
failedの状態であれば異常が発生していますので、ディスク交換などの措置を取ります。
運用中に次の状態になってしまったら、何らかの障害が発生しています。
|
|
この状態になっていることを知るには、通常はコマンドを打つか、地道にログをチェックするしかありません。もし異常発生時に知りたいのであれば、なんらかのスクリプトを組むなどして、定時監視する仕組みが必要です。
RAIDデバイスの回復は、次の手順を踏むことになります。
システムを停止し、異常があった物理ディスクを交換する。
起動して物理ディスクにRAIDパーティションを作成する。
raidctl -R により、再構成を行う。
物理ディスクにRAIDパーティションを作成する手順は、先に記述したものと同等ですのでここでは記述しません。RAIDパーティションが作成できたら、raidctlにより再構成します。
|
|
再構成が終了すれば、再びRAIDデバイスは元の状態に戻ります。
raidctl -R に与えるコンポーネントは不良が発生しているほうです。取り返しがつかないことにならないように、十分注意してください。
ミラー構成や、RAIDレベル5構成の場合は、再構成中にRAIDデバイスに書かれた内容は通常通り書き込まれます。但し、再構成中に正常なディスクも異常になった場合は復旧の手立てはありませんので、大量の書き込みが生じない状態で再構成を行うべきです。
再構成が終了すると、再び正常な状態で運用を継続できます。
RAID1構成にスペアコンポーネントを定義して動的に更新できる状態にしてあれば、運用状態そのままで再構成を行うことができます。システム停止の必要はありません。
スペアコンポーネントを定義したraid0.confを次に記述します。
# cat /etc/raid0.conf |
|
スペアを定義している場合に、強制的にwd0hコンポーネントを再構成してみるとスペアディスクが利用され、再構成が行われる様子が確認できます。
|
|
ホットスワップ可能なディスクシステムに対してスペアディスクを定義しておけば、運用中であってもディスクの交換が可能になることがわかります。
RAID5構成では、複数のディスクにパリティとデータを分散して置きます。スペアコンポーネントが定義されていればRAID1と同様にホットスワップが可能です。
RAID5は速度と安全性をある程度両立させることが可能ですが、使えるディスク容量は分散した容量1つ分分減少します。(4GBを3台に分散すると8GBが実容量)
また、IDEなどで同一ディスクに複数のコンポーネントを定義すると、性能が極端に低下します。
3+1台構成のRAID5定義を次に示します。
# cat /etc/raid0.conf |
|
RAIDframeのマニュアルには、ここに書かれていることと同様のサンプルが記述されています。また、ブートディスクをRAID化する方法も記述されていますので一読すべきです。
RAIDデバイスの制御にはraidctlコマンドを利用します。主なオプションを記述しておきます。
コマンドオプション |
意味 |
---|---|
raidctl -a compo dev |
RAIDデバイスdevにコンポーネントcompoを追加する |
raidctl -C config dev |
RAIDデバイスdevを定義ファイルconfigにより強制定義する |
raidctl -c config dev |
RAIDデバイスdevを定義ファイルconfigにより定義する |
raidctl -I serial dev |
RAIDデバイスdevにシリアル番号serialをつける。シリアル番号はデバイスの特定に利用されるだけなので、同一システムに複数のRAIDデバイスがなければなんでもよい |
raidctl -i[v] dev |
RAIDデバイスdevを初期化する。-vオプションをつけることで進行状況が表示できる |
raidctl -s dev |
RAIDデバイスdevの状態を確認する |
raidctl -R compo dev |
RAIDデバイスdevのコンポーネントcompoを再構成する |
raidctl -f compo dev |
RAIDデバイスdevのコンポーネントcompoを強制的にfailerにする |
raidctl -F compo dev |
RAIDデバイスdevのコンポーネントcompoを強制的にfailerにする。スペアデバイスがあれば即時にスペアを利用し、指定されたコンポーネントは再構成する |
raidctl -G dev |
RAIDデバイスdevの構成から定義ファイルを生成表示する |
raidctl -u dev |
RAIDデバイスdevの定義をシステムから消去する |