コラム: RAID

しかし世間では欠損ブロックを捕らえるRAIDが少ない

以前RAID は、欠損ブロックが発見されると、そのハードディスクは単純に不良品と判断し RAID グループから切り離していました。そして残ったディスクから欠損ブロックを復元し、ホストコンピュータにデータを返せば済んでいたのです。もちろん、そのRAIDグループに新しいハードディスクを加えてリビルドすれば、以前のハードディスクなら何のトラブルも無く復帰できましかし、現在のハードディスクを利用するRAIDはそうも行きません。
それは欠損ブロックの発生が、そのRAID グループ内のハードディスクで一台だけとは限らない時代となったためです。
もし、最初に欠損ブロックが見つかったディスクを安易にRAID グループから切り離してしまえば、リビルド時に他のドライブに欠損ブロックがあれば正常なリビルドができなくなります。
例えば図1 のように、HDD1 とHDD2 に欠損ブロック"×7 ”"×11 ”が存在していた場合、先にHDD1の欠損ブロックを見つけて切り離したらどうなるでしょう?

図1

リビルドの際は図2 のように列単位にパリティ計算され、スペアディスク(HDD5)に復元されたデータが書き込まれて行くのですが、欠損ブロック"×11 ”によってHDD5 の4 列目のデータは当然のことながら復元できないため、その時点でリビルドは不正終了となります。

図2

したがって、従来のRAID アルゴリズムでは、このように複数のハードディスクで発生した欠損ブロックには対応することができません。実は、ニューテックのConfidence ATA シリーズでも、複数のハードディスクにおける欠損ブロック発生が問題になり始めたのが2001 年春頃で、その年の夏頃までのファームウェアでは対応できませんでした。
特に図2 のケースでは、4 列目の欠損ブロック位置でリビルドを中断した後、リビルドを最初からやり直すため、それを無限に繰り返すといった問題がありました。(これらのトラブルについては、その経緯がニューテックのホームページにも書かれているので参照ください。)
その他にも、世間に出回っているRAID を調べてみたのですが、そのほとんどのハードウェアRAID やOS 標準のソフトウェアRAID も、このような古いアルゴリズムで動作していました。中には図2 のケースで4 列目がリビルドできないにも関わらず、まるで欠損ブロックが無かったようにリビルドを正常終了し、不正であるはずのデータブロック(?)を、そのままOSに返してきているRAID までありました。
(現在も、大半のRAID は改善されていないようです。)

でも単純なアルゴリズムで欠損ブロックは修復できる

ところで、図2 をよく見れば分かるようにHDD1 はメカ的に完全な故障をしていなければ、復元すべき4 列目の正常なデータ(ブロック10 )が残っているのです。また、HDD1の欠損ブロックは、単純に新しいデータを上書きすれば機能を回復でき、その行為が品質の低い領域に対してスクリーニングとなるのであれば、むしろ切り離すべきではないのでしょうか。もちろん、スクリーニングの進んでいない新しいディスクへのリビルドを考えても、どの道、欠損ブロックのリスクは伴うのです。
さて、この欠損ブロックは障害とせず、上書きして回避するとすれば単純に図3 のように他のディスクからデータを復元し書き込めば良いのです。

図3

また、欠損ブロック"×11 ”も見つかった際、同じ理屈でHDD1、3 、4 の4 列目のデータから復元できます。もちろん、ミラーリングのRAID- 1ならもっと簡単で、正常なもう一方のハードディスクからデータを読み取り、それを欠損ブロックに上書きしてやれば良いわけです。
以上のように、単純なアルゴリズムを追加するだけで、欠損ブロックのリカバリーが可能です。
Confidence ATA シリーズには、こういったアルゴリズムが昨年の夏頃からのファームウェアに追加されています。
また、高容量のハードディスクをサポートするConfidence 100/2000 以降の製品やDuoK2 シリーズには、同アルゴリズムを組み込んだファームウェアも既に用意されています。SCSIやFC のハードディスクは、IDE に比べ欠損ブロックの発生確率がかなり低いため、ファームウェア対応が後追いとなってしまい、お客様には大変ご迷惑をおかけしました。
なお、Duo K2 については弊社でのアップデートとなりますので、ニューテックのカスタマケア課までご相談ください。

何でRAID-3や5が他のディスクからデータを復元できるの

ところで、何で他のディスクからデータが復元できるの?
と、RAID- 3 や5 を理解していない人のために、簡単なデータ復元の理屈を解説しておきます。
簡単に言えば、小学校低学年の頃の算数を思い出してください。
テストで、こういった問題は出ませんでしたか?

1 +2 +3 =6 という式を基にテスト:以下の□の部分に数字を入れなさい。

1 +2 +□=6
1 +□+3 =6
□+2 +3 =6

どの問題も、□の中の数字は簡単に計算できますね。
つまり、RAID にとって□の部分が欠損ブロックまたは壊れたディスクなのです。したがって数字1 ・2 ・3 の実データが入るブロック部分と、パリティに値する数字6 の部分があれば、どのブロックが無くなっても回復できます。もちろん、パリティが欠損ブロックだった場合、以下のような式になりますから同じように回復できますね。

1 +2 +3 =□

しかし、RAID- 3 や5 で問題となるのは、この□が2 つ以上になった場合、もちろん計算ができなくなることです。
当然

□+2 +□=6

では、2 つある□に色々な数字を入れることができます。
つまり、こうなった時は、新しいRAID アルゴリズムを導入したとしてもリカバリーできないトラブルとなるので、例えRAIDとはいえ欠損ブロックをOS に通知します。もちろん、この障害がハードディスクの故障であれば、ボリューム全体が使えなくなる大問題ですす。
したがって、RAID 装置を使っていても、バックアップは必要なのです。
さて、もう一歩、ステップアップして解説を進めます。
ところで単純に足し算すると、当然、桁あふれが起こるじゃないかと思われた人もいると思います。

7 +8 +9 =24

データディスクもパリティディスクも同じ大きさの入れ物なのに、こうして桁あふれした場合、桁あふれしたデータはどこに保存するの?
実はRAID では足し算を使っていません。コンピュータの内部では数字を2 進数で扱っているので数字は0と1しか存在しないため、もっと便利な演算子があるのです。
それは、論理演算にある排他論理和(XOR )です。
ここで、解説をもっと単純化するために、RAID-3 や5 で最小構成であるデータディスク2台とパリティディスク1台の構成に変更します。
さて、排他論理和には次の規則があります。

図4

※もちろん論理式なので桁あふれしません。
見て分かるように2 進数で両方の数字が違う時に答えが1 (真)です。
ここで、排他論理和の便利な所は"XOR"と"="を入れ替えても式が成立する点です。

図5

となれば、"XOR ”と"=”の入れ替えだけではなく、3 つの数字をどのように入れ替えても式
は成立します。

(1) 0 =0XOR0

同じ数字を入れ替えても意味無いので省略。

図6

さて、この式で表した数字を左から、ディスク1 、ディスク2 、パリティと考えてください。どのディスクに欠損ブロックが生じても全て同じXOR で 桁あふれもなく計算できますね。

1XOR □=1

この場合、単純に下の式として計算できます。

1XOR1 =□

□がどこにあっても、こんな風に式を成立させられます。

もちろん、ディスクをどの順に入れ替えても、ディスク台数が何台になろうとも、壊れた部分の復元には残ったディスクの全てをXOR すれば再生されるのです。次の式はディスクが4 台の時の例ですが、同じように数字を入れ替えて見てください。いずれも式が成立しますね。

(0XOR0 )XOR1 =1
しかし、あれ!それでは1 と0 以外の大きな数字はどうなるの?例えばコンピュータで表すByteデータでは?となるのですが、その心配はありません。実際にはビット単位で、同じ桁どうしでXOR しています。
例えば

図7

となります。これが、一般にハードディスクのデータブロックサイズ512Byte でも、同じように512Byte ×8bit で4096bit 列のXOR です。
このbit 列が何bit になろうとも同じ方法で計算されるため、桁あふれのしないパリティデータが生成でき、そして、パリティ生成時もデータ復元時も全て同じXOR式だけでの簡素化したプログラムを実現しています。

また、ソフトウェアRAID では、このXOR 式を全てCPU で行うため、処理の重いシステムでは実用的ではないのですが、ハードウェアRAID の場合は専用IC でXOR 演算するので、高速で、かつ、CPU に負担をかけないため、どういったシステム環境でも実用的である点がメリットです。

ページの先頭へ戻る