RAID風味のバックアップツール案

STATUS: 故障中x2


 我が家のHDDが総容量3Tbyteを越えました。
 中身はほとんど録画したアニメ番組(DivXエンコード済み)なのですが…


 さて、これだけあるとバックアップも容易ではありません。というかしてません(ぉ
 RAID化も考えましたがこれだけドライブがあると必要なハードの予算も結構かかるし、リビルドするあいだファイルはどこに退避しておけばいいのょ…?


 そこで!
 HDDを1台追加するだけですべてのHDDをバックアップできる画期的な方式を考案しました。
 名づけて「パリティバックアップ」です!



● RAID3にインスパイヤされて誕生


 RAID3の仕組みをヒントにしています。
 RAID3は、複数あるHDDのうち1台を「パリティドライブ」として割り当て、ファイルを格納するのではなくパリティを訂正符号として格納します。
 他のHDDすべてのデータを排他的論理和(XOR)で計算したパリティを格納しておくことで、1台だけHDDが故障した場合、その他の生きているHDDとパリティドライブの値から故障したHDDのデータを復元できます。


 さて、RAID3の実現には専用ハードウェアやドライバーソフトウェアによって成されますが、ハードウェア購入のコストやリビルドの手間がかかります。また、常時有効にしておくとパフォーマンスの低下も招きます。
(あ、RAID3だったらリビルドしなくてもパリティドライブ追加するだけでいいのかな…まあ、いいや無視無視)


 そこで、もうちょっと手軽な方法として「パリティバックアップ」を考案しました。



パリティバックアップについて解説


 この方式でもRAID3同様パリティドライブを追加します(これは全HDDのうちもっとも容量の大きなHDDと同等以上の容量である必要があります。実際には100%効率では使えないのでさらにもっと大きいドライブが必要)。


 まず考え方の第1段階として、RAID3とまったく同じように他のHDDのパリティ(排他的論理和で計算)をセクタ単位で格納するプログラムを書いて実行します。
 これの実行直後であれば、どれか1台HDDが破損してもパリティをもとに復元可能です。
 しかし使っていくうちにHDDの内容は書き換わっていくため、復元不可能(しかも可不可は判定できない)なセクタがどんどん増えていってしまいます。
 これでは実用になりません。


 そこで、第2段階目の考え方としてパリティをとるのをセクタ単位ではなくファイル単位とします。
 以下のように、ファイルをGorup-A,B,C…と同じくらいのサイズの塊にグループ化し、このグループ単位でパリティを計算します。

      (Group-A)       (Ggour-B)           (Gourp-C)
HDD-1 [FILE-1A       ][FILE-1B           ][FILE-1C ][FILE-1C']…
HDD-2 [FILE-2A       ][FILE-2B ][FILE-2B'][FILE-2C           ]…
 :        :               :                   :
HDD-X [PARITY-A      ][PARITY-B          ][PARITY-C          ]…


 どのようにグループ化されているかは、管理ファイルに格納します。(管理ファイルはパリティ用ドライブにおいてもいいかな。壊れても再構築できるし)
 これにより、バックアップ後にファイルが変更になった場合でも、ファイル単位でパリティが無効になるだけですみます。
 無効になったかの検出は、タイムスタンプでの判定で実用上は十分だと思います。心配ならMD5などで判定してもよいでしょう。
 定期的なバックアップ処理(夜間などPCの使用頻度が低い時間帯に行う)の際に、無効になったファイルのパリティ再計算、新規ファイルのグループへの追加処理を行います。
 しばらく使っているとHDD間でサイズ差が大きいグループができてしまうこともあるでしょうから、グループの再割り当ても随時行います。
(グループ分けのアルゴリズムが効率化に直結します。最小二乗法が適用できるでしょうか)


 以上の方法により、既存のシステムやファイルシステムへの影響を最低限に抑えたまま大容量のバックアップが可能となります。
 まさに貧乏が生んだ大発明と言えましょう!



…というのは誰かがすでに考え付いて作っていると思います。
Windows2000/XPで使える上記ツールがありましたら教えてください!
(なかったら仕方ないので作ります)