RAID5のパリティ生成アルゴリズム
「RAIDという仕組みは本当に安全なのか?」という懸念が昔からあったので、今回RAID5のParity algorithmについて研究してみました。(RAID6のParity algorithmについて研究しましたが、それはまた今度)
【RAID5の特徴】
RAID5の特徴について改めて整理すると以下のようになるかと思います。
•Block単位でパリティ分散記録する。
•水平パリティを1つ用いる。水平パリティにはXOR方式を用いることが一般的。
•HDDが1本壊れても復旧できる。
【XOR(排他的論理和)について】
RAID5ではXORを用いてパリティを生成しますので、まずはXORについておさらいしておきます。
A | B | A XOR B |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
【RAID5のパリティ生成の仕組み】
例えばデータが「1111 0101 1100 1010 0000 1111」の場合は以下のようになります。
HDD-A | HDD-B | Parity |
1111 | 0101 | 1010 |
1100 | 1010 | 0110 |
0000 | 1111 | 1111 |
仮にB列が消失した場合はどうなるでしょうか。
HDD-A | HDD-B | Parity |
1111 | ? | 1010 |
1100 | ? | 0110 |
0000 | ? | 1111 |
この場合はHDD-AとParityでXORを適用するとBが復元できます。
HDD-A | HDD-B | Parity |
1111 | 0101 | 1010 |
1100 | 1010 | 0110 |
0000 | 1111 | 1111 |
この仕組みを応用して、HDD本数が7本の場合、A-BのXOR結果とC、その結果とD、・・・とXORをしていくことになります。
HDD-A | HDD-B | HDD-C | HDD-D | HDD-E | HDD-F | Parity |
1111 | 1010 | 1100 | 0110 | 0000 | 1111 | 0000 |
仮にhdd-Bが故障した場合はどうなるでしょうか。
HDD-A | HDD-B | HDD-C | HDD-D | HDD-E | HDD-F | Parity |
1111 | ? | 1100 | 0110 | 0000 | 1111 | 0000 |
この場合もBを除いた全てとxorをしていくとBが復元できます。(xorする順番は問わない)
0000 G
1111 F
----
1111
0000 E
----
1111
0110 D
----
1001
1100 C
-----
0101
1111 A
----
1010 B
HDD-A | HDD-B | HDD-C | HDD-D | HDD-E | HDD-F | Parity |
1111 | 1010 | 1100 | 0110 | 0000 | 1111 | 0000 |
こんなシンプルな仕組みであればファームウェアのバグ発生は考えにくそうで、RAID5はそれなりに安全そうですね。
The comments to this entry are closed.
Comments
I・O DATA製のLANDISKでNo.2の故障アラートランプが点灯したので手持ちの同メーカー(Seagate)同容量(0.5Gb)でRaid再構築中、再構築失敗全てのデータが崩壊しました。
Ubuntu(DVD)で調べた結果、全てのドライブに同様のパーティション情報がの残っていましたがRaidとしては機能しませんでした。
どこに、どの様な問題があるのでしょうか?
Posted by: Hitoshi Itou | March 27, 2017 11:21 AM
それは災難でしたね。
一般論として、複数本のHDDにダメージがあるとRAID5ではXORできない箇所が生じて再構築に失敗します。
まれにファームウェアのバグで再構築に失敗ということもありますが、
今回の件はそれなりに利用実績のある製品に見えるので
その可能性は低いのではないかと推測します。
Posted by: sanonosa | March 27, 2017 06:42 PM