« 「インフラエンジニアの教科書」という本を書きました | Main | LinuxでのNIC冗長化(bonding)を少し深く考えてみる »

November 04, 2013

RAID5のパリティ生成アルゴリズム

「RAIDという仕組みは本当に安全なのか?」という懸念が昔からあったので、今回RAID5のParity algorithmについて研究してみました。(RAID6のParity algorithmについて研究しましたが、それはまた今度)

【RAID5の特徴】
RAID5の特徴について改めて整理すると以下のようになるかと思います。

•Block単位でパリティ分散記録する。
•水平パリティを1つ用いる。水平パリティにはXOR方式を用いることが一般的。
•HDDが1本壊れても復旧できる。


【XOR(排他的論理和)について】
RAID5ではXORを用いてパリティを生成しますので、まずはXORについておさらいしておきます。

ABA XOR B
000
011
101
110

【RAID5のパリティ生成の仕組み】
例えばデータが「1111 0101 1100 1010 0000 1111」の場合は以下のようになります。

HDD-AHDD-BParity
111101011010
110010100110
000011111111

仮にB列が消失した場合はどうなるでしょうか。

HDD-AHDD-BParity
1111?1010
1100?0110
0000?1111

この場合はHDD-AとParityでXORを適用するとBが復元できます。

HDD-AHDD-BParity
111101011010
110010100110
000011111111

この仕組みを応用して、HDD本数が7本の場合、A-BのXOR結果とC、その結果とD、・・・とXORをしていくことになります。

HDD-AHDD-BHDD-CHDD-DHDD-EHDD-FParity
1111101011000110000011110000

仮にhdd-Bが故障した場合はどうなるでしょうか。

HDD-AHDD-BHDD-CHDD-DHDD-EHDD-FParity
1111?11000110000011110000

この場合もBを除いた全てとxorをしていくとBが復元できます。(xorする順番は問わない)

0000 G
1111 F
----
1111
0000 E
----
1111
0110 D
----
1001
1100 C
-----
0101
1111 A
----
1010 B

HDD-AHDD-BHDD-CHDD-DHDD-EHDD-FParity
1111101011000110000011110000

こんなシンプルな仕組みであればファームウェアのバグ発生は考えにくそうで、RAID5はそれなりに安全そうですね。

※最後に「インフラエンジニアの教科書」という本を出版させていただきました!という宣伝で締めさせていただきます。

|

« 「インフラエンジニアの教科書」という本を書きました | Main | LinuxでのNIC冗長化(bonding)を少し深く考えてみる »

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

The comments to this entry are closed.

TrackBack


Listed below are links to weblogs that reference RAID5のパリティ生成アルゴリズム:

« 「インフラエンジニアの教科書」という本を書きました | Main | LinuxでのNIC冗長化(bonding)を少し深く考えてみる »