ソフトウェアRAIDでのインストール

Wrote 2007.1.17

■ ソフトウェアRAID

ソフトウェアRAIDってハードウェアRAIDより悪い?

正直ソフトウェアRAIDというといまいち良い印象がない。実際システムの堅牢性などを考えるとハードウェアRAIDの方が正直安心できると思うが、まじめに導入を考えると結構高価な物になる。
最近はRAID0/1に限ればAccordance社ARAID99-1000LやARAID99-1500、外付けならSTARDOM SOHO RAID SR3610-2S-SB2等比較的安価なハードウェアRAIDも手に入るようになった(一応当方では全部実運用中の物)。

一頃MS-WindowsのソフトウェアRAIDの悪評が「ソフトウェアRAID」の評判を落としたような気もしないでもない(笑。いままでLinuxのソフトウェアRAIDは使ったことが無かったが、既存のマザーボードのIDEポートや古いUltra ATAボードなどを利用してそれなりのRAIDシステムが構築できるならそれはそれで利用価値はあるかもしれない。
リサイクルパーツでRAIDマシンを作ろうというのが発端。

ソフト/ハードどどちらも一長一短あるので使用する立場によって一概にどちらが良いとも言い切れないが業務などで安全性重視でRAID1/5を使うならハードウェアRAIDで決まりだろう。普通ホットスワップも対応しているのでシステムを止めずに運用ができる。
ソフトウェアRAIDは安価に構築できる点が最大のメリット。画像などの大きなデータを扱うテンポラリ的な領域が欲しい場合はソフトウェアRAID0で低コストでそこそこの高速性が手に入るかもしれない。特にRAID5のハードウェアは未だに高価なのでかなり安価に構築できる。
多分ソフトウェアRAID1/5を用いた場合の最大の心配はHDDドライブが故障した場合にシステムがハングしないかどうかだと思う。つまりHDDドライブが故障しておかしな挙動を示した場合に予想外の挙動にドライバもおかしくなってしまいLinuxシステム自体が不安定になる可能性がありそうなこと。本来ならHDDひとつ故障してもそのまま連続稼動可能な(スペアドライブを積んでいるならなおさら)目論見が外れてガッカリする可能性かもしれない。
もし比較的重要なところにソフトウェアRAID1/5を使うなら、OSごとシステムがクラッシュしても良い準備をしておくべきだと思う。例えば代替えマシンに短時間に同環境を構築できるインストーラやインストール手順のマニュアル化やデータ類は定期的にバックアップしておくなど。

安価なPCI RAIDボードもでているが?

Promise Technology製 Fasttrak66導入メモでも書いているが安価なPCI RAIDボードは結局RAID部分はデバイスドライバ等で処理しているのでソフトウェアRAIDと言えるらしい。
最近の製品では一部の機能をハードウェアに持たせたRAIDアクセラレータと呼ばれる物もあるようだがこれは使った事がないのでなんともいえない。どちらにしても要はドライバでRAID機能を管理していると思う。

この辺を調べていくとハードウェアRAIDでない限り市販の安価なRAIDボードでもLinuxのRAIDシステムでもしくみの上では大差ないのでは?と思うようになった。

つまり極端な話IDEポートが複数あればLinuxならば市販の安価なソフトウェアRAID製品と同等なしくみで動作は可能ということ。ただし速度等は構成次第なのでどちらがどうとは言いようがない。

■ インストール

インストール準備

インストールには sarge安定版 (stable)リリースの公式な名刺サイズCDイメージ debian-31r4-i386-businesscard.iso を使用した。名刺サイズCD-Rに焼こうとしたが容量不足で焼けなかった。どうやら容量が40MBを超えているようで手持ちの名刺サイズCD-Rには入りきらなかったようだ。(最近の名刺サイズCD-Rは容量が増えてるのか?)
なので今回は普通の12cm CD-Rに焼いてインストールに使用した。

マザーボードのブートデバイスをCD-ROMブートにして先のCD-Rにてブート。
ENTER で進む。

Press F1 for HELP, or ENTER to boot:

続いて以下の設定をシステムに合わせて選択して進む。

言語の選択/Choose language : 日本語
キーボード配置の選択 : 日本 - 106キー
ネットワーク設定 : 適時
アーカイブミラー:
 日本、ring.asahi-net.or.jp 等の国内サーバが速くて無難。
 プロキシは普通設定不要。(設定するならipアドレズでも必ず先頭にhttpが必要。例 http://192.168.1.1:80 等)

その後ハードウェア検出に進む。ここでマザーボード上の(使用しているならPCIボード上の)IDEチップが認識されて、次のパーティショニングで「IDE3 マスタ (hdc)」等と接続先のHDDが見えるはず。

HDDが見えない場合はインストーラにドライバが含まれていない可能性がある。その際は別途がんばるしかない(泣、がんばり方は認識できないチップ次第なので一概に言えない。
一応ALT+F2を押し&ENTERで仮想コンソールに切り替わるので、lsmod や ls /lib/modules/カーネルVer番号/kernel/driver/ide/pci とかその辺を眺めて使っているドライバがあるか確認はできるが、普通PCIバスにチップは接続されているはずなので余程なにか理由が無い限りは自動認識するはず。つまり見えなかったら別途ドライバを探すしかない。
ドライバが存在するのにたまたまインストーラに含まれていない場合は別途ドライバを持ってきて組み込むなど面倒な話になるのであんまりお勧めではないかもしれない。

次にパーティションに進む。

パーティション設定について

使用ハードによって前述のハードウェアの認識とドライバの組み込みが正常に終わるかが第一関門になるが、次の肝はパーティション設定になる。

今回は15GB HDD(IBM製 DPTA-351500)2台を IDEのプライマリコネクタとセカンダリコネクタに各1台づつ接続。HDDのジャンパ設定はマスターにしているがジャンパは接続するIDE側、HDDの仕様などで変わる場合があるので機材に合わせて設定する。

パーティションのつくり方にいくつか考慮する点がある。

スワップ領域
もし速度を上げる目的だけならRAID0にする必要はあまりない。単純に複数のドライブにスワップ領域を従来通りに確保するだけでカーネルが効率よく使用してくれるらしい。この実装はかなり古くからカーネルで対応されているそうだ。多分その方がRAIDドライバを介さないので高速かもしれない。
勿論RAID0にスワップを設定可能だし、RAID1に設定もできる。
カーネルイメージを格納するパーティション
RAID1には設定可能だが、RAID0に設定できなかった。何か方法があるのかもしれないが今のところうまくいく方法は見つけられていない。GRUBインストールの途中50%くらいでハングアップする。
ひとたびカーネルが読み込まれれば / ファイルシステムもマウントできるしくみが導入されているので困ることはないのだが(昔は/etc/mtabあたりを参照していたのでできなかったらしい)。
検証はしていないので以下憶測。
どちらにしてもGRUB起動時はまだRAIDドライバが動いてないので(そもそもRAIDドライバが動作する為のカーネルをこれから読み込むところなので)RAID0のような分散記録だとカーネルの読み出しができる気がしない。もしできるとすればGRUB自体にRAID0で分散記録されたカーネルイメージを読み込む機能が実装されていないとできないだろうと考えるが、これは普通に考えると無さそう。GRUBの実装がすごいことになりそうなので。
RAID1で動くというのは実は片方のドライブのカーネルイメージのありかを(CHS等で)GRUBはポイントしているだけで単に従来通りのしくみでブートしているだけに過ぎないのかもしれない。つまり実のところ厳密にはRAID1ではないのかもしれない。ということはRAID1でミラーリングされたカーネルイメージを有効利用するにはGRUBにミラー元、ミラー先の2つのカーネルイメージに対するブートエントリが作れれば少しはマシかもしれない。片方のHDDが故障してももう一方のHDDのカーネルイメージは健在なはず、そちらをGRUBでブート指定すればめでたくブートできるかもしれない。
従来パーティションとの混在も可能
例えば先のカーネルイメージ格納部分(debianなら/bootになる)だけ従来どおり領域確保して、他の部分だけRAID0/1に設定することも可能。

あとは目的に沿ったRAIDタイプでボリュームを作るだけで良い。他は従来と同じインストール手順で進んでいく。

RAID1 パーティション設定

ここでは例としてパーティションを swap、/boot、 / の3つをRAID1で確保する設定を行なってみる。
設定状態を以下のようにすれば良いだけ。
ポイントはRAID化する為にはまず個々のHDDの領域の確保で「RAIDの物理ボリューム」として確保しておく。その後ソフトウェアRAIDの設定で各「RAIDの物理ボリューム」を組み合わせてRAIDデバイスxを作成する。以下であれば3つmd0〜3のように仮想的なRAIDデバイスができるのでそこに領域確保してファイルタイプ、マウント先などを設定する。

物理デバイス設定

デバイス名 デバイス 基/論 領域容量 利用方法 起動フラグ
hdc(IDE3) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ
2.基本 128MB RAIDの物理ボリューム オン
3.基本 14.8GB RAIDの物理ボリューム オフ
hde(IDE5) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ
2.基本 128MB RAIDの物理ボリューム オン
3.基本 14.8GB RAIDの物理ボリューム オフ

ソフトウェアRAIDの設定 (MDデバイスの作成>マルチディスクデバイスのタイプ から設定)
※起動フラグの設定欄が出ないときがあるがその際は無視。

デバイス名 デバイス 基/論 領域容量 利用方法 マウントポイント
md0 RAID1 デバイス1 1.基本 128MB swap なし
md1 RAID1 デバイス2 2.基本 128MB ext3 /boot
md2 RAID1 デバイス3 3.基本 14.8GB ext3 /

以下はパーティショニングの手順。


■ 他のRAID設定について

参考までに他のRAID設定のパーティションのきり方の例を以下に記述。

RAID0 パーティション設定

パーティション設定について」で書いた通り今のところカーネルイメージの格納先(debianなら/boot)をRAID0で領域確保するとうまくいかない。
なので /boot だけはRAID1でRAIDアレイを確保、他をRAID0で確保する形にすれば一応可能。
※もしくは/boot はRAIDアレイにせず普通にext3で確保しても良い。

物理デバイス設定

デバイス名 デバイス 基/論 領域容量 利用方法 起動フラグ
hdc(IDE3) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ
2.基本 128MB RAIDの物理ボリューム オン
3.基本 14.8GB RAIDの物理ボリューム オフ
hde(IDE5) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ
2.基本 128MB RAIDの物理ボリューム オン
3.基本 14.8GB RAIDの物理ボリューム オフ

RAIDアレイ設定

デバイス名 デバイス 基/論 領域容量 利用方法 マウントポイント
md0 RAID0 デバイス1 1.基本 128MB swap なし
md1 RAID1 デバイス2 2.基本 128MB ext3 /boot
md2 RAID0 デバイス3 3.基本 14.8GB ext3 /



■ うまくいかなかったRAID5設定例

インストール時点でのRAID5化は今のところうまくいかず諦めた。
/boot はRAID1に設定しているにもかかわらずカーネルイメージのパッケージインストールの82%付近で長時間待たされた後に必ず失敗する。
HDDドライブ全てのパーティションがRAID1設定ならうまくいくのに、RAID1、RAID5混在等にすると失敗する感じ。
インストール後に別なHDDドライブをRAID5化するのはできるのかもしれないが・・・。

RAID5 パーティション設定

この設定はダメ元で一応試してみたもの。/boot がRAID5なので多分うまくいかない。
フォーマットは通る。「ベースシステムのインストール」でカーネルパッケージ「kernel-image-2.4-686」の82%付近でエラーで中断する。この時エラーになるまでかなり長時間処理している。

物理デバイス設定

デバイス名 デバイス 基/論 領域容量 利用方法 起動フラグ 備考
hdc(IDE3) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ swap ABIT-BP6 on board
HPT366
Primary
2.基本 128MB RAIDの物理ボリューム オン /boot
3.基本 14.8GB RAIDの物理ボリューム オフ /
hde(IDE5) DJNA-351500 1.基本 128MB RAIDの物理ボリューム オフ swap ABIT-BP6 on board
HPT366
Secondary
2.基本 128MB RAIDの物理ボリューム オン /boot
3.基本 15.1GB RAIDの物理ボリューム オフ /
hdg(IDE6) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ swap Fasttar66 SPAN 1+0
PDC20262
Primary
2.基本 128MB RAIDの物理ボリューム オン /boot
3.基本 14.8GB RAIDの物理ボリューム オフ /
hdi(IDE9) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ swap Fasttar66 SPAN 1+0
PDC20262
Secondary
2.基本 128MB RAIDの物理ボリューム オン /boot
3.基本 14.8GB RAIDの物理ボリューム オフ /

RAIDアレイ設定

デバイス名 デバイス 基/論 領域容量 利用方法 マウントポイント
md0 RAID5 デバイス1 1.基本 394.4MB swap なし
md1 RAID5 デバイス2 2.基本 394.6MB ext3 /boot
md2 RAID5 デバイス3 3.基本 44.3GB ext3 /

RAID5 パーティション設定 試行2

/boot のみRAID1に設定。フォーマットは通る。「ベースシステムのインストール」でカーネルパッケージ「kernel-image-2.4-686」の82%付近でエラーで中断する。この時エラーになるまでかなり長時間処理している。

物理デバイス設定

デバイス名 デバイス 基/論 領域容量 利用方法 起動フラグ アレイ先 備考
hdc(IDE3) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オン /boot ABIT-BP6 on board
HPT366
Primary
2.基本 128MB RAIDの物理ボリューム オフ swap
3.基本 14.8GB RAIDの物理ボリューム オフ /
hde(IDE5) DJNA-351500 1.基本 128MB RAIDの物理ボリューム オン /boot ABIT-BP6 on board
HPT366
Secondary
2.基本 128MB RAIDの物理ボリューム オフ swap
3.基本 15.1GB RAIDの物理ボリューム オフ /
hdg(IDE6) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ swap Fasttar66 SPAN 1+0
PDC20262
Primary
2.基本 128MB RAIDの物理ボリューム オフ /
hdi(IDE9) DPTA-351500 1.基本 128MB RAIDの物理ボリューム オフ swap Fasttar66 SPAN 1+0
PDC20262
Secondary
2.基本 128MB RAIDの物理ボリューム オフ /

RAIDアレイ設定

デバイス名 デバイス 基/論 領域容量 利用方法 マウントポイント
md0 RAID1 デバイス1 1.基本 128MB ext3 /boot
md1 RAID5 デバイス2 2.基本 394.6MB swap swap
md2 RAID5 デバイス3 3.基本 44.3GB ext3 /

追記2007.1.28:
RAID1でインストール後デバイスファイルを見てみるとデフォルトではデバイスファイルが/dev/hdhまでしか作られていなかった。
RAID5インストール時点では/dev/hdi も使用していたので何か関係があるかもしれない?

追記2007.1.29:
RAID5 の構成物理ボリュームを /dev/hdh まででのデバイスで構成すればインストールは成功した。やはり何かデバイスファイルがらみでdebianインストーラが〜/dev/hdh までしか想定していない可能性はありそうだ。
RAID5でのインストールはRAID1よりも時間がかかるので不安ならALT+F3で状況確認や、ALT+F2で ログやプロセスを確認してみれば良い。

■ RAID5成功例

debianインストーラ debian-31r4-i386-businesscard.iso を用いた場合ディスクアレイのデバイス名がhda〜hdh の範囲外だとRAID構築がうまくいかない結果が何度も見られた。
hda〜hdh の範囲内であればRAID5でもインストーラから構築に成功した。(制約上カーネルイメージ格納先の /boot だけは非RAIDかRAID1にする必要はある)

普通アクセス効率を考えるとRAIDアレイは各IDEコネクタに1台装着することになる為ハード構成によってはどうしてもhdh以降にデバイス名が振られてしまう可能性がある。

やや強引な回避策としてはとりあえず hdh より後ろにアサインされてしまうHDDドライブを hdh以前のどこか空いているスレーブに装着してインストールしてしまう。

例えば4台のHDDでRAID5としてインストールしたい場合、
hdc,hde,hdg,hdi という状況があるとしたら、
hdc,hde,hdg,hgh としてとりあえずインストールしてしまう。
後から hgh を hgi のコネクタに付け替えてリビルドしてしまうという手。
どうもRAIDアレイの構成台数だけは後から変更できないようなのでとにかく4台でいったんインストールしてしてしまう。

Linuxシステムのインストールが完了した後に一度電源を切り、hghのHDDをhgiのコネクタに付け替えて起動する。
するとRAID5なので1台欠損でも3台で起動はできる。
(この時もしも/dev/hdi デバイスファイル名がなければ手動で作成すること。参考:デバイスファイルの作成の仕方

/dev/hdi1 をRAID5のmdデバイスにhotaddする。
(/dev/hdi1には予めRAID5のアレイにできる容量で ファイルタイプautodetect(0xfd)のボリュームがあること)

RAID5のmdボリュームが/dev/md1 の場合に /dev/hdi1 をRAIDアレイとして追加する例

# mdadm --manage /dev/md1 --add /dev/hdi1

これで自動でリビルドが始まるので、以下で確認する。

# cat /proc/mdstat

上記でリビルド状況が見れる。およそのリビルド残時間なども表示される。
リビルドが完了すれば、当初の目的通りの、
hdc,hde,hdg,hdi という状況でも稼動になる。

面倒だがこれなら理論上 hdc〜hdh の6台までのRAID5をインストール時点で構築可能になる。その後別なコネクタに移したいのなら1台ずつ移動&リビルドを繰り返すことになる・・・。
インストール後にRAID5を構築するならこんな面倒はいらないのだが・・・。

ともかくこれでインストールから / 等のLinuxシステム格納先のディレクトリ群もRAID5化できることがわかった。再度付け加えておくがRAID1よりもRAID5でのインストールはやや時間がかかるので気長にやった方が良い。


Home Up