見出し画像

RAIDのデータ復旧のしくみ(1)

こんにちは、辻村です。以前、「壊れても耐える仕組み、RAIDについて」と題して、RAIDの種類についてお話ししました。その中でも、少し触れましたが、RAIDを構成していると、故障して読み出せなくなってしまったディスク装置のデータを残りのデータやパリティと呼ばれる値から復旧することできます。2回に分けて、データがなぜ復旧できるのかと言うことについてお話ししたいと思います。実装するにあたっては数学が活躍しているわけですが、可能な限り数式は使わず、説明していこうと思います。なお、参考にした論文には簡単に書いてありますので、もし分かりにくかったら私の力不足です。

今回のお話の内容

今回は以下のような順番でお話をしていきます。
足し算と引き算ができれば理解ができます。

・RAID-5って何でしたっけ?
・データが復旧できる理由
・RAIDの装置中のディスクの場所と過去の障害事例
・RAID-5で復旧できない場合
・次回への準備運動

RAID-5って何でしたっけ?

まずは、RAID-5についてのおさらいです。

RAID-5を理解するには、まずRAID-4を簡単に理解する必要があります。RAID-4は、それぞれのディスクのデータから、パリティというものを計算して、パリティを専用のディスクに書くというものです。この方法では、パリティ用のディスクが壊れると、新しいパリティ用ディスクに全データについてパリティを計算して書き込む必要があります。また、通常使っている場合でもすべての書き込みの際に必ずパリティディスクを使うことになるので、パリティディスクの性能が足かせとなって性能が出ません。

RAID-5はこの欠点を補うために、パリティを各ディスクを毎回変えています。今回の話題を理解してもらうには、パリティディスクの場所は変わらないRAID-4と同じと考えて読み進めてもらって大丈夫です。

データが復旧できる理由

データの復旧ができる理由を説明するにあたって、ちょっと寄り道になりますが、簡単な算数をやってみましょう。Pはいくつになるでしょうか?

1 + 2 + 3 = P … (1) 

計算を間違っていなければ、6になるはずです。では、次がどうでしょう? a はいくつになるでしょうか?

 a + 2 + 3 = 6 … (2) 

答えは、a = 1 です。この計算をするときに、6 - (2+3) のような計算をしたはずです。つまり、引き算をしたと言うことですね。これは、事前に足し算を使ってPを求めておき、引き算をすることで、a を復旧できると言うことです。今は具体的な数字を入れましたが、変数を使って書き直してみましょう。

 a + b + c = P  … (3) 

話を戻して、a, b, c をそれぞれをディスクのデータと考え、その和をパリティ P と考えたらどうでしょう?事前に P を求めておき、壊れたディスクのデータは、ほかのディスクにあるデータの総和を Pから引けば、計算をすることができます。

上の例では単純な足し算をしましたが、実際には、パリティPを求めるときには2進数で表現し、排他的論理和(XOR)という演算をします。2進数は0か1で表されますが、値が同じなら 0、値が異なるなら1となる演算です。これをおこなうことによって、引き算にあたる計算をXORを使って簡単におこなうことができます。これが RAID-5 でデータを復旧できる理由です。

RAIDの装置中のディスクの場所と過去の障害事例

さて、ここで、もう一つ計算をしてもらいましょう。安心してください。算数です。

 2 + a + 3 = 6   … (4) 

a はいくつでしょう?式(2)と同様、やはり答えは 1となります。実は、(4)の式は、(3)の式のaとbを入れかえたものです。先ほどの式(3)と同じ文字を使って(4)の式を表現すると、以下のようになります。

b + a + c = p … (5) 

みて分かるように、bとaが入れ替わっても同じ答えが出ています。実は、RAID装置を作る側からすると、これは実に困った性質なのです。

ファイルが書き込まれると、a, b, c の順に書き込むわけです。そして、読み出すときは、a, b, c がきちんと順に読み出されることを期待しています。ところが、(5)の式のb + a + c = p の式は、Pパリティではディスクが入れ替わったことが検出できないことを示しています。つまり、事前にディスクのをRAID装置の中での位置を決めておかなければいけないと言うことです。

「どこにどのディスクが入っているか」という順番を LSI Logicさんの言葉で、「ピースオーダー (piece order)」と言います。装置によってはディスクドライブ自身にRAID内での位置情報を書き込んでピースオーダーを分かるようにしているものも存在しますが、通常は、RAIDを構成したときと同じようにディスクを戻さないとと正常にデータを読み出すことはできません。

過去に風の噂で聞いた事例は、引越の時のトラブルです。RAID装置からディスクを全部抜いて梱包して発送したものの、引っ越し先でピースオーダーを間違えてディスクをRAIDに入れてしまいデータが読み出せなかったことがあったそうです。(LSIさんのRAIDかどうかは知りません。)

RAID-5で復旧できない場合

さて、RAID-5で復旧できない場合はどう言う場合でしょう?
それは、2台のディスクが壊れた場合です。(1) の式に再登場してもらいましょう。

1 + 2 + 3 = P … (1) 

Pを計算したあとは、こうなります。

1 + 2 + 3 = 6 … (6) 

2台壊れると言うことは、例えば、以下の x と y を求めないといけないと言うことです。この式から両方の値を求めることはできません。

1 + x + y = 6 … (7) 

つまり、RAID-5ではデータディスクが同時に2台以上故障すると、復旧することはできません。

次回への準備運動

ここまでで、RAID-5について以下のことをご説明しました。

・少し計算の仕方は特殊ですが、ディスクに書かれているデータの和をパリティとして持たせること
・ディスク装置が壊れたときには生き残ったディスクのデータの総和をパリティから引くことで失われたデータが復旧できること
・ディスク装置が入れ替わったことは検出できないので、RAID装置内のディスク内の位置は決まっていること。

さて、今回の記事の最後に次回への準備運動といえる話題をご提供して締めくくりたいと思います。

(7) の式、xとy求められる方いらっしゃいますか?どう考えても無理ですよね?覚えていらっしゃるかどうか分かりませんが、2つの変数を求めるには変数同士の関係を示す、最低2つの式が必要です。そう、連立方程式です。では、たとえば、もう一つの式は以下のような式でよいのでしょうか?

x + y = 5 … (8) 

それでは次回まで。
最後まで読んでいただきありがとうございました!


※続きを読みたい方は、以下の記事をご覧下さい。
RAIDのデータ復旧の仕組み(2)


参考文献

参照論文

The Mathematics of RAID-6, H. Peter Anvin, December 20, 2011(PDF)

関連する記事

ハードディスクの障害解析について知りたい方は、以下の記事がご参考になるかもしれません。
ディスクの障害の追いかけ方

RAIDの種類について知りたい方は以下の記事がご参考になると思います。
壊れても耐える仕組み、RAIDについて

この記事はここまでです。 最後まで読んでいただいてありがとうございます。 気に入っていただいたなら、スキを押していただいたり、 共有していただけるとうれしいです。 コメントや感想大歓迎です!