RAID の弱点

冗長化手法

まずは RAID の冗長化手法についておさらいする. RAID1 の場合,仮想ボリューム V の内容はそのまま子ボリューム V1, V2 の双方に記録される. 図にすると以下のようになる.

 V1  V2      V
+---+---+  +---+
| A | A |  | A |
+---+---+  +---+
| B | B |  | B |
+---+---+  +---+
| C | C |  | C |
+---+---+  +---+
|   |   |  |   |

RAID5 の場合は,パリティを持つブロックを配置する. 図上で p0, p1, ... とあるのがパリティブロックである.

 V1  V2  V3      V
+---+---+---+  +---+
| A | B | p0|  | A |
+---+---+---+  +---+
| C | p1| D |  | B |
+---+---+---+  +---+
| p2| E | F |  | C |
+---+---+---+  +---+
|   |   |   |  | D |

パリティの計算は

p0 = A xor B
p1 = C xor D
p2 = E xor F

とする.

縮退時

子ボリュームの1つが故障し,RAID から切り離された状態を縮退(degrade)と呼ぶ.

上記 RAID1 の場合,V2 が故障したとすると

 V1      V
+---+  +---+
| A |  | A |
+---+  +---+
| B |  | B |
+---+  +---+
| C |  | C |
+---+  +---+
|   |  |   |

となる. 仮想ボリュームの内容は残りのドライブに保持されているので,仮想ボリュームとしてのサービスは続行可能である.

上記 RAID5 で V3 が故障した場合は

 V1  V2      V
+---+---+  +---+
| A | B |  | A |
+---+---+  +---+
| C | p1|  | B |
+---+---+  +---+
| p2| E |  | C |
+---+---+  +---+
|   |   |  | D |

一見,D と F のデータが失われたように見えるが,上記のパリティの計算式より

D = p1 xor C
F = p2 xor E

であるので,やはり失われたデータは無く,仮想ボリュームとしてのサービスは続行可能である.

再構築

縮退状態の RAID アレイに良品のボリュームを追加し,元の状態に戻す過程を再構築(rebuild) と呼ぶ.

RAID1 の場合は,生き残っている子ボリュームの内容をそのままコピーするだけである.

 V1  V2      V
+---+---+  +---+
| A ->A |  | A |
+---+---+  +---+
| B ->B |  | B |
+---+---+  +---+
| C ->C |  | C |
+---+---+  +---+
|   ->  |  |   |

この再構築の状態であっても失われたデータは無いので,仮想ボリュームとしてのサービスはもちろん可能である.

RAID5 の場合は少し複雑で

 V1  V2  V3      V
+---+---+---+  +---+
| A | B ->p0|  | A |
+---+---+---+  +---+
| C | p1->D |  | B |
+---+---+---+  +---+
| p2| E ->F |  | C |
+---+---+---+  +---+
|   |   ->  |  | D |

ここでは

p0 = A xor B
D = C xor p1
F = p2 xor E

という関係が成り立つので,V3 の内容を復元可能である. もちろん,再構築中でも仮想ボリュームとしてのサービスは可能である.

魔の時間

というあたりまでが RAID のセールストークである. ここで気をつけて欲しいのは

縮退〜再構築完了の期間は冗長性が無い

ということである. つまり,この期間に別の故障が発生すると RAID 仮想ボリュームはサービスを続行することができなくなる.

再構築の危険性

更に,「再構築」という動作にも危険が伴う.

まず,

ボリューム全体をすべて使い切って,すべてのデータに常にアクセスする

という運用はほとんど無いだろう. (逆に,そういう運用の場合はこの危険性は無視していい)

例えば

仮想ボリューム上のファイルシステムのディスク使用量が 10% 程度である

とか

仮想ボリューム上のファイルシステムのディスク使用量が 95% だが,そのほとんどは通常はアクセスせず,アクセスするのはディスク上の 10% のデータだけである

という場合を考えてみよう.

まず,縮退するきっかけとしては,使用している 10% の領域へのアクセスである. が,再構築する場合は,ディスク全体,つまり普段使用していない 90% の領域へのアクセスも発生する. この領域にエラーがあるとすると,再構築不能,つまり RAID クラッシュとなる.

計算例

子ボリューム数4の RAID5 で,子ボリューム全体の MTBF を T とする. ハードディスクの故障のしかたにも色々あるのだが,ここでは

  • セクタの read / write エラーのみを考慮.ディスク全体にアクセスできないようなエラーは考えない
  • 故障は均一に確率的に発生する

とする.

通常アクセスする領域の割合を r (0 <= r <= 1) とすると,この使用条件で縮退の発生する間隔は

T/4/r

となる. 縮退時の健全な3つの子ボリューム上の,通常アクセスしない領域の MTBF は

T/3/(1-r)

である.

ここで,この2つの MTBF をグラフにすると

raid5.png

となる(縦軸は対数).

このグラフから読み取れることは

  • 通常アクセスする領域が約 40% 未満の場合,RAID の再構築で失敗すると見るべきである

ということである.

なお,蛇足として

  • r > 0.25 の領域で,縮退間隔が子ボリューム単体の故障間隔よりも小さな値となる

ということも読み取れる.

(以下追記)

計算例2

子ボリュームが 2 の RAID1 についても同様の計算を行ってみる.

縮退までの平均間隔は

T/2/r

このとき,健全なボリュームのアクセスしない領域の MTBF は

T/1/(1-r)

同様に plot すると下図のようになる.

raid1.png

グラフの読み方も同様なので省略.


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2008-02-19 (火) 22:18:30 (4484d)