次のページ 前のページ 目次へ

2. なぜ RAID なのか?

RAID を使うと良いことがたくさんあります。例えば、複数のディスクをより大きく「仮想的な」デバイスに結合する能力、パフォーマンス向上、そして冗長性です。

2.1 専門的事項

Linux RAID は、ほとんどのブロック型デバイス上で動作します。使用するハードディスクが IDE、SCSI、もしくは両者が混在していようと、それは重要な事ではありません。ネットワーク越し (Network Block Device - NBD) でうまくいったという報告さえあります。

ドライブに対するバスの速度は充分に速い必要があります。各ドライブが 10 MB/s の能力があり、バス幅が 40 MB/s しかないような場合は、UW(UltraWide) バス 1 本に 14 台の UW-SCSI ドライブを接続するようなことはしない方がよいでしょう。また IDE バスなら、1 本のバスにデバイスは 1 台だけにするべきです。IDE ディスクをマスター/スレーブ構成にするのはパフォーマンスが悪くなります。IDE では1 台以上のドライブがあるバスに対するアクセスは良くありません。最近のマザーボードは、普通は 2 本の IDE バスを持っていますから、よけいなコントローラを買うことなしに 2 台のディスクで RAID を構成することができます。

RAID レイヤは、ファイルシステムのレイヤとはまったく関係ありません。通常のブロックデバイスと同様に、RAID デバイスの上にはどんなファイルシステムでも構築できます。

2.2 用語

「RAID」という語は「Linux Software RAID」を意味するものとします。この HOWTO では Hardware RAID については扱いません。

装置構成について記述する場合には、ディスクの数とサイズの表記を決めておくと便利です。文字 N は、ディスクアレイ(予備ディスクを含まない)の中で、アクティブなディスクの数を示すものとします。文字 S は特に断らない限り、ディスクアレイの中で最も小さいドライブのサイズとします。文字 P はディスクアレイの中の1台のディスクのパフォーマンスを表し、単位は MB/s とします。このP を使う場合には、すべてのディスクが同等の性能だと仮定してますが、それは常に正しいとは言えないかもしれません。

「デバイス」と「ディスク」がほぼ同じ意味で使われている点に注意してください。通常、RAID デバイスを構築するために使われるデバイスはディスクのパーティションであり、必ずしもディスク全体である必要はありません。ですが 1 台のディスクの上でいくつかのパーティションを結合して RAID にしても意味をなさないので、デバイスとディスクは単に「異なるディスク上のパーティション」を意味するものとします。

2.3 RAID レベル

Linux RAID パッチでサポートされることを簡単に書いておきます。非常に基礎的な RAID の情報ですが、Linux における RAID レベルの実装で特別なものについては、多少記述してあります。RAID をよく知っている人はこのセクションをスキップしてください。なにか問題があったら戻ってくればいいのです :)

現在の Linux 用 RAID パッチがサポートするのは以下の各レベルです−

  • リニアモード
    • 複数のディスクが、1 台の物理的なデバイスに結合されるモードです。ディスクはお互いに「追加される」ので、RAID デバイスに書きこむと、最初にディスク 0 に、一杯になったら次にディスク 1 に、また一杯になったらディスク 2 に、と書き込まれることになります。各ディスクは同じサイズである必要はありません。サイズはここでは重要ではないのです :)
    • このレベルには冗長性はありません。1 台のディスクがクラッシュすると、おそらく全てのデータを失う可能性があります。ですがファイルシステムからデータの大きなかたまりが抜け落ちるわけですから、運良く残った部分から若干のデータを回復できることも可能性としてはあります。
    • 読み書きのパフォーマンスは単独の read/write では向上しませんが、複数のユーザーがデバイスを使う場合、あなたが第 1 のディスクにアクセスしている瞬間に、他の誰かが第 2 のディスクにアクセスしているということが起こり得ます。そのような場合、パフォーマンスは向上します。
  • RAID-0
    • 「ストライプ」モードとも呼ばれます。リニアモードと似ていますが、読み書きが複数のデバイスに並列に行われるところが違います。各々のデバイスはほぼ同じサイズである必要があります。全てのアクセスが並列に実行されるので、複数のデバイスは全て同じように使われます。1 つのデバイスが他より飛び抜けて大きい場合、その特別のスペースは RAID デバイスとして使われますが、デバイスの終わりの方にアクセスするときには、このより大きいディスクだけにアクセスすることになり、当然パフォーマンスは悪化します。
    • リニアモードと同様、このレベルにも冗長性はありません。リニアモードと違うのは、1 台のドライブが故障した場合でもあっても、一切のデータを救うことができないということです。RAID-0 からドライブを取り外すとすると RAID デバイスのある部分の連続的なブロックが欠落するというわけではなく、デバイスの至る所が小さい穴だらけになるといった感じでしょうか。多分 e2fsck はそのようなデバイスからほとんど何も回復することはできないでしょう。
    • 読み書きのパフォーマンスは向上します、読み書きはデバイス上で並列に実行されるからです。これが、通常 RAID-0 を走らせることの主な理由です。バスが充分に速ければ、パフォーマンスは N * P MB/s に近くなります。
  • RAID-1
    • これは実際に冗長性を持つ最初のモードです。RAID-1 は 2 台以上のディスクがあれば利用できます。予備のディスクを用意しておくこともできます。このモードは、1 台のディスクを他のディスクで正確にミラーするわけです。もちろん各ディスクは同じサイズでなければなりません。1 台のディスクが他より大きいとしても、RAID デバイスは最も小さいディスクと同じサイズになってしまいます。
    • N-1 台までのディスクが取り外されても(または故障しても)、データはまだすべて完全です。利用できる予備ディスクがあり、システム(SCSI ドライバーや IDE チップセットなど)が生き残っている場合、ドライブ故障の発見後、直ちにミラーの再構築が予備ディスクのうちの 1 台で始まります。
    • 読み込みのパフォーマンスは N * P に近い値になりますが、書きこみはデバイスが 1 台の場合と同等以下になります。読み込みは並列動作できますが、書きこみでは CPU が N 回データを送らなければならないからです(N 個のデータの同一のコピーが各ディスクに送られなければならないのです)。
  • RAID-4
    • この RAID レベルは、あまり使われません。3 台以上のディスクがあれば使うことができます。情報を完全にミラーする代わりに、1 台のドライブにパリティ情報を保って、他のディスクには RAID-0 のような方法でデータを書くわけです。1 台のディスクがパリティ情報のために予約されるため、アレイのサイズは (N - 1) * S となります。S は最も小さいもののサイズです。RAID-1 の場合のように、ディスクのサイズは同等であるべきです。さもないと上の (N - 1) * S の公式に従い、アレイで最も小さいドライブのサイズである S によって足を引っ張られることになります。
    • 1 台のドライブが故障しただけならパリティ情報が使われ、全てのデータを再現できます。2 台のドライブが故障すると、全てのデータが失われます。
    • このレベルがあまり使われないのは、パリティ情報が 1 台のドライブに集中してしまうからです。他のディスクのうちの 1 台に書きこみが起こるたびに、この情報は更新されなければならないのです。つまりパリティディスクが他より充分速くないと、ボトルネックになってしまいます。たまたま多くの遅いディスクと非常に速いディスクを持っているようなら、この RAID レベルは役に立つかもしれません。
  • RAID-5
    • より多くの物理ディスクを結合してさらに冗長性を持たせたいとき、これはおそらく最も役に立つ RAID モードです。RAID-5 は 3 台以上のディスクで使うことができます。予備のディスクを用意しておくこともできます。結果として RAID-5 デバイスサイズは RAID-4 と同様に (N - 1) * S となります。RAID-5 と RAID-4 の間の大きな違いは、パリティ情報が各ドライブに均一に分散されるということです。ですから RAID-4 のボトルネック問題を回避することができます。
    • 1 台のディスクが故障してもパリティ情報のおかげで、全てのデータは完全です。予備ディスクが利用できるなら、デバイス故障の直後に再構築が始まります。2 台のディスクが同時に故障してしまうと全てのデータが消失します。RAID-5 は 1 台のディスク故障を乗り切ることができますが 2 台以上は無理です。
    • 通常、読み書き両方ともにパフォーマンスは向上しますが、どの程度かを予測することは困難です。

予備ディスク

予備ディスクは、アクティブなディスクのうちの 1 台が故障するまで RAID に参加しないディスクです。デバイス故障が発見されるとそのデバイスは「不良」とマークされ、利用できる最初の予備ディスクの上で直ちに再構築が始まります。

つまり RAID-5 に予備ディスクを装備すると、安全性が格段に向上することになります。1 台のディスクが故障したとしても予備ディスクによって冗長性が維持されていれば、そのまま動作し続けることになってもしばらくの間なら許容できるでしょう。

ただしシステムがディスククラッシュを確実に乗り切るという保証はありません。RAID レイヤはデバイス故障をうまく処理しなければなりませんが、SCSI ドライバがエラー発生時に飛んでしまったり、IDE チップセットが固まってしまったり、他にも似たようなことがいろいろ起こる可能性があります。

2.4 RAIDでのスワッピング

swap の パフォーマンス向上のために RAID を使う必要はありません。fstab ファイルにおいて複数のスワップパーティションに同じ優先度を与えると、カーネル自身がスワップをストライプにすることができるからです。

そのための fstab の記述は−

/dev/sda2       swap           swap    defaults,pri=1   0 0
/dev/sdb2       swap           swap    defaults,pri=1   0 0
/dev/sdc2       swap           swap    defaults,pri=1   0 0
/dev/sdd2       swap           swap    defaults,pri=1   0 0
/dev/sde2       swap           swap    defaults,pri=1   0 0
/dev/sdf2       swap           swap    defaults,pri=1   0 0
/dev/sdg2       swap           swap    defaults,pri=1   0 0
これはスワップを 7 台の SCSI デバイスで並列にする設定です。RAID の必要はありません。これはもう長い間カーネルの機能としてあるものですから。

スワップに RAID を使うもう一つの理由は、高い可用性です。ブートのために例えば RAID-1 デバイスにシステムをセットアップすれば、システムはディスク・クラッシュを乗り切ることができます。しかしスワップが不良デバイスだとしたら、まず間違いなくまずいことになります。RAID-1 デバイスをスワップにすればこの問題を解決してくれます。

最新の RAID パッチでは RAID 上でのスワッピングは安全なはずです。以前はデッドロックの可能性があったため、RAID 上でのスワップは安全とは言えませんでしたが、現在では修正されたはずです。

RAID デバイス上のファイルシステムで、スワップ・ファイルの中で RAID を構成することができます。あるいは RAID デバイスをスワップパーティションとして構成することもできます。例によって、RAID デバイスは単なるブロックデバイスなのですから。


次のページ 前のページ 目次へ

[