RAID>基本的な考え方

内容

基本的な考え方

当ページは,2000年から2008年くらいにWikiに書いていたものを2014年4月に,当WordPressに移したものです.内容的には陳腐化している部分もあると思います.

あくまで,他人様のお役に立つと言うよりは,自分のメモです.

さて本題に入ります.LinuxのHowtoシリーズにあった,Software RAIDに関するHowtoに記されていた考え方が,私の基礎です.

しかし,関係のHowtoの更新が行われず陳腐化してしまったようです.正式に残っているのも,Root-RAID-Howtoのみで,それもObsoleteである旨注釈が付いています.

現在は,RAID関係のHowtoは,Wikiにメンテされています.

かれこれ,10以上の実用的な^^; RAIDシステムを組み上げ,管理してきた経験から,固まってきた考え方をまとめてみます.

どこが壊れるか

まず,どこが壊れるかを想定することが重要です.RAIDアレーおよび関連システムの修復が必要になるのは次のケースです.

  • ハードディスクの故障
  • ディスクコントローラーの故障
  • メインボード(マザーボード.以下MB)の故障

HDD式のビデオレコーダーが発売されて以来,3.5インチハードディスクの品質は著しく向上して故障する率が非常に低くなりました(MTBFが大幅に向上).統計的なことは言えませんが,経験的には,メインボードの故障とハードディスクの故障の頻度は大差ないように思います.そして,コントローラーが一番壊れにくい(ただし,コントローラーもPCIバスに差したものよりもMB上のオンボードのものが壊れるケースのほうが多いのでやっかい).

寿命が長くなりますから,壊れたときに同じハードディスク,MB, コントローラーは入手不可能と考えなければいけません.したがって,内部で何をやっているか解らないチップ組み込み式のRAIDコントローラー(MB組み込みも含めて)は避けたほうが無難です.

組み込みRAIDコントローラーが付いていても使わなければ良いんです.パフォーマンス的にも,Software RAIDのほうがオンチップRAIDよりたいていいいそうです.Core i5/i7を 使っていれば,高性能なCPUが暇をもてあましていますから^^;

たいてい,一番壊れて欲しくないところが壊れます.

どう組むか

なるべく少ない構成要素で組む

これは,基本中の基本です.RAIDシステムの修理が必要になるのは,構成要素のどれかがひとつが故障した場合です.システムとしての故障率は,概ねそれぞれの構成要素の故障率の和になります.ハードディスクを多数ケースに詰め込むと熱的に厳しい環境となってハードディスクの寿命を縮めます.

インターフェースを分ける

これは,かつてHowtoに書かれていたゴールデンルールの1つと記憶しています.ひとつのコントローラーで複数台のハードディスクを接続していた場合,コントローラーが故障した場合,たいていつながっている全てのディスクがソフト的に同時に破壊されます.

Root partitionは必ずRAIDにする

いい加減な業者の売っているサーバーは,/homeや/var以下など,データ領域をRAIDにして,Root partitionを単純なディスクにしているケースが多いです.ハードディスクの故障は,もちろん使用頻度にも依存しますが,温度と通電時間のほうが大きな要素だと思います.
Software RAIDのサーバーなどの複雑なシステムで,(RAIDでない) Root partitionが故障した場合,エライ事になります.私は,何度か非RAIDのRootディスクの手抜きシステムの故障に遭遇したことがありますが,最終的には,ファイルを救出できるだけ救出して,そのシステムはあきらめディスクを交換してクリーンインストールとなり,RAIDの恩恵が何ら受けられません.

チップ式のRAIDコントローラーを使わない

お手軽簡単で良いのですが,ハードディスクの健康状態を監視するためのツールをインストールする必要があります.コントローラー1個が故障したら,それでお手上げとなります.そして,同じコントローラーは手に入りませんよ^^;

initrdは使わない

どうしても使わなければならないケース以外は,システムを複雑にするという理由から,initrdの使用は避けた方が良いです.initrdが保存してある部分が使用不能だと,修復作業が非常にたいへんになる場合があります(いや,間違いなくたいへん^^; ).

Kernel 2.6.x以降では,initrdをKernelの圧縮ファイルに含められるので,かつてよりは状況は改善しました.しかし,復旧作業で,モジュールの入れ替えなどが必要な場合めんどうなので,どうしても必要ということでなければ避けた方がいいという考えは変わりません.

以上から,今日的には,大容量のシリアルATAのディスクを2台使ったRAID Level 1とするのが一番安くて強いシステムと思います.シリアルATAのコントローラーを増設して,2台のディスクは別々のコントローラーからつなぎ,もちろん,Root partitionもRAIDアレーとします.

以上をまとめますと,

  1. システム構成はなるべく簡素化する
  2. ルートパーティションは必ずRAIDにする
  3. 1つのパーツが壊れたらお手上げ,という部分を残さない
  4. オンチップ,オンボードのRAIDコントローラーは使わない

RAID Level別の特色・コメントなど

RAID Level 1

公私とも,主要なLinuxマシンは,RAID化しています.みな,Software RAIDでもちろんRoot partitionもRAIDにしています.RAID Level 5が2台であとは,Level 1です.

個人や少人数グループ用のマシンには,RAID Level 1が適していると思います.そのメリットは,

  • ハードディスク2台で組める
  • ディスク1台でも動く
  • スナップショットの保存
  • 危険なupdateの実行前の状態の保存

ということです.この2番目のディスク1台で動くというのは,すごいことで,正常にシンクロされているアレーの2台のディスクのひとつを別のマシンに入れると,そのまんま動くのです.新たなディスクをそれぞれのマシンに付ければそれぞれがRAID Level 1として動きます.完璧なクローンの誕生です.

このように「増殖」できますし,片方を外して戸棚にしまっておけば(もちろんPCには別のディスクを付けます),完璧な「スナップショット」としてのバックアップになります.

Software RAIDは,ATA, S-ATA, IEEE-1394, USB, SCSIなど混在できますから,このスナップショット的なバックアップは,柔軟性もあります.もちろん,スペアディスクを内蔵させておけば,同様のことができますが,落雷などで,全部同時に壊れることもありますから,外付け(取り外しによる交換)のほうがより安心です.

そして,GLIBCなど,installに失敗したらシステムのbootはおろか,修復も困難になる基本ソフトのupdateの場合,片側のディスクの接続を外してブートさせて,installします.成功したら,外したディスクを接続して起動させて,raidhotaddさせればよいし,失敗したら,今度は外して,updateしなかったディスクで起動して,失敗したディスクをあとでraidhotaddすればよいです.
Wed, 27 Apr 2005, 2007-04-22

2008-03-11の注
今日ではraidtoolsはobsoleteとなり,mdadmを使います.

RAID Level 5 2005-10-05

今日ではハードディスクが大容量化して,一生かかってもデータで埋め尽くせないほどになってしまいましたから,たいていはRAID Level 1で事足ります.

しかし,RAID Level 5には,使い道があります.それは,データのセキュリティー向上です.1つのディスクが壊れた場合,中身の心配なしに廃棄することができます.

RAID Level 5の1台のディスクからは1 byteたりとも,データは読み出せません.そして,RAID Level 5以外の“壊れた”ディスクでは,廃棄前に中身を完全に消すことはできません^^;

ですから,個人的な情報や業務の情報を保存するのに良いと思います.Serial-ATAが主流になって3,4台のディスクをPCの内外に設置するのもたやすいです.

Multipath 2011-08-18

Multipathを初めて試してみました.できあがりの構成は,

 md1 : active raid1 sdb2[0] sdc2[1]
 4891712 blocks [2/2] [UU]
 md3 : active raid5 sdc3[0] md0[2] sdb3[1]
 611337344 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
 md0 : active raid0 sda1[0] sdd1[1]
 316359744 blocks 64k chunks

となっていて,md1は,/bootとして,Kernelイメージを保存,md0は,160GBx2をストライピング(RAID Level 0)し,320GBとして,他の2機の320GBと合わせて,RAID Level 5のmd3(ROOT)を構成しています.

起動時のKernel認識に任せきると,md3が先に構成されて,md0が脱落した形で起動しますので,initrdを仕込み,initで,

if [ -x /sbin/mdadm ]; then
/sbin/mdadm -s
/sbin/mdadm -E -s >/etc/mdadm.conf

# The next 3 lines were added by the author.
/sbin/mdadm -A /dev/md0 /dev/sda1 /dev/sdd1
sleep 3
/sbin/mdadm -A /dev/md3 /dev/sdb3 /dev/sdc3 /dev/md0

/sbin/mdadm -A -s
fi

としています(要は,もともとあるmdadm -A -sの前にmd0, md3の順でRAIDを起動(=arrange)させる).

4機のディスクのうち1台がトラブった時点で,冗長性がゼロとなります.

mdadm 2007-08-07

RAIDTOOLSのメンテは終わり,mdadmを使うようになった(使うしかなくなった^^; ).

Notes:
1. 二つ以上ではたいていお手上げ^^;
二つ以上ではたいていお手上げ^^;