不具合農場 地獄の大豊作不具合様は本日もすこやかなれば、本日も大豊作なり。 不具合様には不具合をお供えすべし。 今日もお供え物作ってますか? |
トップへ戻る ブログのトップへ戻る Word Press |
|
不具合道楽 地獄のフルコース不具合御飯 不具合味噌汁 不具合満漢全席 | ||
コンピューターのはらわた無修正大公開 | ||
不具合設計局キャンペーン中 |
2014-02-04 (Tue)
_ [日々の生活] RAID復旧作業7
NASのRAID5の再構築に失敗し、データの復旧は絶望的かと思ったものの、まだ可能性があることに気づきました。まず、RAID5においてデータがどのように保存されるのかを調べます。このために40GBのHDD4台をヤフオクで買いました。実験用なので容量が少ないものほど速く結果がでるのですが、SATAのHDDだと40GBより少ないものはないっぽい…。実験用のRAID5に対して書き込みを行い、データがどのように保存されるか調べました。結果はというと、本当に教科書通りでした。ストライプの大きさは64KBだったのですが、これを便宜上ページと呼びます。各HDDをa,b,c,dとします。
a b c d
-------
0 1 2 p
3 4 p 5
6 p 7 8
p 9 A B
1周回におけるページ数は、パリティー込みだと16ページ、パリティーなしだと12ページです。上の表は16ページにおいて、パリティーではなくデータであるページの番号順です。(データが12ページ、パリティーが4ページ)
HDD自体は巨大なメモリーとも見なせますが、先頭から始まって、64KBを1ページとして、パリティー込みだと1周回1024KBで、この周回が延々と繰り返されるだけです。極単純です。
あと、RAID5の3台目と4台目を入れ替えるというミスをしましたが、これは各HDDの値をa,b,c,dとして、dにパリティーが入るとすると、以下のように表せます。
a = xxx
b = yyy
c = zzz
d = a ^ b ^ c
p' = a ^ b ^ d
c' = p'
xxx, yyy, zzzはデータです。通常はd=a^b^cで完了です。ここから続いて、cとdを入れ替えたとすると、新しいパリティーの値がcに入ります。(c'と表示) この時、
c' = a ^ b ^ d;
c' = a ^ b ^ (a ^ b ^ c) #上のd=a^b^cより
c' = a ^ b ^ a ^ b ^ c
c' = c
と計算できます。すなわち、誤ってcに書き込んでしまった値は最初に入っていたcと同一であり、データは破壊されていないということです。
新しく4TBのHDD2台を買ってきてRAID0で8TB確保しました。これに自作のプログラムで元のHDDのデータをRAID5を組むことなく直に読み出し、本来のディスクイメージを作成し、8TB HDDに書き込みしました。量が多いので19時間かかりました。できあがったものをツールで解析したところ、削除されたパーティションとして認識しました! あとはパーティション復旧するだけです。見事にデータが復活!! すばらしい!! 一時はあきらめかけていましたが、全てのデータが戻りました。今後はバックアップとRAIDの併用にします。