* RAID の弱点 [#u3520c25]

** 冗長化手法 [#q3d0082c]

まずは 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

とする.

** 縮退時 [#ca54a405]

子ボリュームの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

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

** 再構築 [#gbcde817]
縮退状態の 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 の内容を復元可能である.
もちろん,再構築中でも仮想ボリュームとしてのサービスは可能である.

** 魔の時間 [#u7132164]

というあたりまでが RAID のセールストークである.
ここで気をつけて欲しいのは
> 縮退〜再構築完了の期間は冗長性が無い

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

** 再構築の危険性 [#s0fb6ff0]

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

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

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

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

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

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

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

** 計算例 [#qa628736]
子ボリューム数4の RAID5 で,子ボリューム全体の MTBF を T とする.
ハードディスクの故障のしかたにも色々あるのだが,ここでは
- セクタの read / write エラーのみを考慮.ディスク全体にアクセスできないようなエラーは考えない
- 故障は均一に確率的に発生する

とする.

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

> T/4/r

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

> T/3/(1-r)

である.

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

#ref(raid5.png)
#ref(raid5.png,center)

となる(縦軸は対数にしてあります).
となる(縦軸は対数).

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

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

ということである.

なお,蛇足として

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

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

(以下追記)
** 計算例2 [#sd728d0b]

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

縮退までの平均間隔は

> T/2/r

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

> T/1/(1-r)

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

#ref(raid1.png,center)

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

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS