Linuxの操作ができる人用に、RAIDの構築(と、その上に Walbrixの仮想マシン用領域を作成する)方法を示します。
以降、ずっとコンソールでの話になります。

システムに接続されているハードディスクなどの一覧を得るには、lsscsi コマンドを使います。このような出力がされます。

[3:0:0:0]    disk    ATA      Hitachi HDS72161 P22O  /dev/sda 
[3:0:1:0]    cd/dvd  Optiarc  DVD RW AD-7200S  1.06  /dev/sr0 
[7:0:0:0]    disk    ATA      WDC WD2500JS-55N 10.0  /dev/sdc 
[7:1:0:0]    disk    ATA      ST3320620AS      3.AA  /dev/sdd 
[7:4:0:0]    disk    ATA      ST3320620AS      3.AA  /dev/sde 
[8:0:0:0]    disk    JetFlash Transcend 2GB    8.07  /dev/sdb 

ここでは、7:1と7:4に接続されているシーゲイトのハードディスク(sddとsde)をRAID1にしてみます。これらのハードディスクはまだシステムに接続したばかりで、Walbrixの「領域」として利用されていない状態です。

普通のLinux解説サイトだと、パーティションがどうとか理屈っぽいことの説明から入るのですが、この記事ではとにかく /dev/sddと /dev/sdeを RAID1にする最短の手順だけガイドすることにします。最近のハードディスクは安いので、ちまちまパーティションを切って運用しなくてもいいでしょう。

parted --script /dev/sdd 'mklabel gpt'
parted --script /dev/sdd 'mkpart primary 2048s -1'
parted --script /dev/sdd 'set 1 raid on'

parted --script /dev/sde 'mklabel gpt'
parted --script /dev/sde 'mkpart primary 2048s -1'
parted --script /dev/sde 'set 1 raid on'

はい、これで二つのハードディスクはRAID用に初期化されました。
新たに /dev/sdd1 と /dev/sde1 というデバイスが出現しています。LinuxのソフトウェアRAIDでは、ディスク全体をまるごと使用する場合でもいちおう原則としてパーティションの作成をすることになっています。そのため /dev/sddの1番目のパーティション(ひとつしかないけど)を作成しました。それは/dev/sdd1 というわけです。

二つのハードディスクをRAID用に初期化したら、mdadmというコマンドを使ってRAID1を作成しましょう。

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdd1 /dev/sde1

sdd1とsde1のふたつのハードディスクが合わさったRAID1ボリューム md0 を作りなさいというコマンドです。

mdadm: array /dev/md0 started.

と言われます。瞬時にRAID1が構成されました。とはいえRAID1とはミラーリングのはずです。データのコピーが瞬時に行われるわけがありません。実は /dev/md0が作成された瞬間から、バックグラウンドでふたつのハードディスクのデータ同期が行われています。

cat /proc/mdstat

としてみましょう。

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md0 : active raid1 sde1[1] sdd1[0]
      312571072 blocks [2/2] [UU]
      [>....................]  resync =  2.3% (7359552/312571072) finish=86.9min speed=58521K/sec

のような表示が出ます。いまデータ同期が2.3%進んだ所だ、というわけです。もし、同期の最中でシステムを再起動するなどした場合、同期が保留されてしまいますので mdstat --readwrite /dev/md0 として同期を再開してください。

RAIDの同期は低い優先度で扱われるため、同期中のアレイの上で他の処理を走らせると同期が極めて遅くなります。/proc/sys/dev/raid/speed_limit_min の値(デフォルトは1000kb/秒)を増やすことで、他の処理が走っていても高速に同期を行うことができます。

では次に、/dev/md0 をWalbrixの仮想マシン用領域として使えるようにします。

ボリュームを Walbrixの仮想マシン用領域として使わない場合 --addtag=wbvg の部分は不要です。
pvcreate /dev/md0
vgcreate --addtag=wbvg myraid1 /dev/md0

これで RAID1のボリューム /dev/md0を myraid1 という名前の「領域」として使えるようになりました。vgsコマンドで領域の一覧を確認してみてください(wbvgは Walbrixをインストールした際に自動的に作成される領域です)。

# vgs
  VG        #PV #LV #SN Attr   VSize   VFree  
  wbvg        1   5   0 wz--n-    90g     22g
  myraid1     1   0   0 wz--n-    298g   298g

だがここで安心してはいけない

ただこれだけの設定では、ミラーリングの片方が故障してしまった時にそれを人間が知る術がありません。放っておくと、マシンが動かなくなってはじめて両方のハードディスクが故障したことに気付くというハメになります。ハードウェアRAIDであれば、けたたましいブザー音が鳴ったりディスクのLEDが赤く光ったりするので片割れの異常に気付くことができるのですが、ソフトウェアRAIDの場合はそういった自己主張の強い方法で通知をしてもらうことは出来ないため、かわりにディスクの異常検知をメールで通知するように設定しておくことで悲劇を避けることが出来るかもしれません。

RAIDの異常を監視させるには、まず先ほどの /etc/mdadm.confの中にある MAILADDR 行に、異常検知のメールを送信する宛先アドレスを書き込みます(デフォルトではコメントアウトされているのでコメントインしてください)。

さらにメールを送信出来るようにするために SMTPサーバの情報を /etc/ssmtp/ssmtp.confに書き込みます。mailhub= 行にSMTPサーバ名(や、必要ならポート番号やTLS情報など)を設定してください。

RAIDの監視デーモンを起動するには /etc/init.d/mdadm start とします。次回のシステム起動時に自動起動させるには、さらに rc-update add mdadm default と入力してください。

監視デーモンが走り出したら、本当に監視しているかテストしてみましょう。RAID1を構成しているハードディスクの片方を抜いてしまいます。ここでは、/dev/sde を抜きました。しばらくしてから lsscsi を取ってみると、/dev/sdeは居なくなります。

[3:0:0:0]    disk    ATA      Hitachi HDS72161 P22O  /dev/sda 
[3:0:1:0]    cd/dvd  Optiarc  DVD RW AD-7200S  1.06  /dev/sr0 
[7:0:0:0]    disk    ATA      WDC WD2500JS-55N 10.0  /dev/sdc 
[7:1:0:0]    disk    ATA      ST3320620AS      3.AA  /dev/sdd 
[8:0:0:0]    disk    JetFlash Transcend 2GB    8.07  /dev/sdb 

cat /proc/mdstat で RAIDの状態を確認してみてください。

Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] 
md0 : active raid1 sdd1[0] sde1[2](F)
      312571072 blocks [2/1] [U_]

sde1が(F)、つまり Failになっていることが確認出来ます。
この状態になってから数分以内にシステムからメールが飛べば監視はうまくいっています。
メールが飛んで来ない場合は、SMTPサーバの指定が正しいか、SMTPサーバにリレーを拒否されていないか、迷惑メールフォルダ行きにされていないかをチェックしてみてください。

では、抜いたハードディスクを元に戻します。lsscsiを取ってみましょう。

[3:0:0:0]    disk    ATA      Hitachi HDS72161 P22O  /dev/sda 
[3:0:1:0]    cd/dvd  Optiarc  DVD RW AD-7200S  1.06  /dev/sr0 
[7:0:0:0]    disk    ATA      WDC WD2500JS-55N 10.0  /dev/sdc 
[7:1:0:0]    disk    ATA      ST3320620AS      3.AA  /dev/sdd 
[7:4:0:0]    disk    ATA      ST3320620AS      3.AA  /dev/sdf 
[8:0:0:0]    disk    JetFlash Transcend 2GB    8.07  /dev/sdb 

なんと /dev/sde だったハードディスクが /dev/sdf に変わってしまっています。Linuxではハードディスクの抜き差しをする度に名前が変わってしまうのです。とはいえ、名前が変わったところで対応を間違えなければどうということはありません。

現在、RAID1ボリュームは /dev/sdd1 の片系だけで動作している状態なので、本当はもともとこのRAID1の一員だった /dev/sdf1を「新品の交換用ハードディスクだということにして」新たにRAID1に加えてやりましょう。

mdadm /dev/md0 --add /dev/sdf1

このコマンドがうまくいけば、mdadm: re-added /dev/sdf1 と言われます。
これで /dev/sdd1と /dev/sdf1 の2台体勢による RAID1が復活しました。

RAIDは構築だけではなくて、障害検知と復旧の手順も確認してから運用しましょう。

RAIDの解除方法

何らかの理由で、組んだRAIDを解除したい場合もあるでしょう。WBの領域(ボリュームグループ)として使用している場合はまず、

vgremove myraid1
pvremove /dev/md0

として領域を開放してください。解放する前に、中には何の論理ボリューム(仮想マシン)も無くなっている必要があります。

領域を開放したら、RAIDを停止し、それぞれのハードディスク上に記録されているRAIDに関する情報を消去します。

mdadm --stop /dev/md0
mdadm --zero-superblock /dev/sdd1 /dev/sde1

RAIDを非アクティブ化する方法

アレイを解除せずにそのままハードディスクを外したい場合(RAID構成そのままでアレイを他のマシンに付け替える場合など)は、

mdadm --stop /dev/md0

としてアレイを非アクティブにし、それからハードディスクを外して下さい。