[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[orca-users:00511] Re: サーバー機について



黒川先生、皆様、いつもお世話になっております。永島です。
★純粋に技術的な話です★

>  私、RIAD を研究していて、矛盾しているなーと思ったのが、
> RAID (0,1,2,3,4,5)は、壊れても、データを再現できるので、
> Fail Safe であるとかいうのですけど。

エラー検出:
N-bitのデータは、2進数のN次元空間の1点として表現されます。
簡単さのために、2次元としましょう。
全部で(0,0)(0,1)(1,0)(1,1)の4通りの情報が表現できます。
エラー検出のためにこれに付加ビットを付け加え、(N+1)bitとすると、これは
(N+1)次元空間の1点となります。
例えば、これをパリティビットとします。ここでは「偶パリティ」とすると
先ほどの4点は2次元平面上の4点から、(0,0,0)(0,1,1)(1,0,1)(1,1,0)という
3次元空間内の4点に「写像」されます。
ここで、もし、この3ビットの任意のビットデータに異常が発生し、
(0)だったはずのものが(1)に、または、(1)だったはずのものが(0)になったと
します。この時例えば、(0,0,0)は、(1,0,0)(0,1,0)(0,0,1)の3通りに
変わる可能性がありますが、この3通りは、上記の4点のどれにも該当しません。
パリティの計算をすると 1+0+0=1 であり、奇数になることから簡単に
異常が検出できます。
ただしこのパリティビットの追加では、異常の検出はできても訂正までは
できませんし、2ビットのエラーに対しては無力です。

エラー訂正:
上で利用した例を再度利用します。
1-bitのデータ(0),(1)に2ビット加えて、2ビット以上のハミング距離に
なるように、残りの2ビットを決めます。
例えば、データ(0)は、(0,0,0)に、(1)は(1,1,1)に射影します。
この2点間のハミング距離は 3 です。
もし、データ(0,0,0)に1bitのエラーが、3つあるビットのどれかに発生したと
します。可能な状態は(0,0,1)(0,1,0)(1,0,0)の3通り。
これらは、(0,0,0)でも(1,1,1)でもないので、エラーであることが検出できます。
更に、(0,0,0)とのハミング距離は 1、(1,1,1)からのハミング距離は 2 
なので、元のデータは(0,0,0)であることがわかります。
つまり1-bitのエラーの訂正が可能です。
2-bitのエラーが発生したとします。この場合は、どのような組み合わせで発生
しても、(0,0,0),(1,1,1)以外の状態になります。すなわち、2-bitの異常を検出可能です。

一般的には、N-bitのデータを、より高次元の空間(N+X)次元空間にあるルールで
射影します。
データエラーはこの空間内の正しい点からエラービット数だけ離れたところの
点として分布します(検出できます)。よって、Xが十分大きければ、この分布は
重なり合うことがほとんどないので、エラー発生後のデータ点の本来の位置がわかります。
これが、冗長ビットによるエラー訂正の原理です。

RAID-0/1以外のエラー訂正は、メモリのそれと原理はおなじです。

また、このエラー訂正は、ディスク、メモリ上のエラーであって、例えばRAID
コントローラ自体の異常を検出するには別途方法が必要です。
部品点数が増えれば増えるほど、一般的には故障の確率は増大しますので、
RAIDコントローラボードとHDDを追加することによる原理的な信頼性の向上と
故障率の増大のトレードオフを勘案しなくてはなりません。

なお、RAID-0 はストライピングですので、高速化はできてもデータ保全はできません。

以上、よろしくお願いいたします。
-- 
N: Michio Nagashima O: JMARI/JMA
U: http://www.orca.med.or.jp/	http://www.jmari.med.or.jp/
T: 03-3946-2121 D: 03-3942-7192  iFAX: 020-4665-4780
C: 090-8941-5020 i-mode mailto:NagashimaMichio@xxxxxxx