Appendix D. RAID

RAIDとは?

 RAID(Redundant Array of Independent Disks、Redundant Array of Inexpensive Disksともいわれます)の基本的な考え方は、小さくて安価なディスクドライブをいくつか組み合わせてアレイ(配列)を形成し、大容量かつ高価なドライブでも1台では達成できない性能と冗長性を引き出すということです。このドライブのアレイをコンピュータから見ると、単一の論理記憶装置またはドライブのように見えます。

 RAIDとは、ディスクストライピング(RAID 0)、ディスクミラーリング(RAID 1)、パリティ付きディスクストライピング(RAID 5)と呼ばれる技術を使い、複数のディスクにわたって情報を展開することで、ディスクの読み書きに関する冗長性、低遅延、高帯域幅を実現し、ハードディスククラッシュ時の回復可能性を最大限にする手法のことをいいます。

 RAIDの基礎となる考え方は、一貫した方法によって、アレイに属する各ドライブ上にデータを分散させることができるということです。そのために、まずデータは固定サイズの「塊」(32Kバイトまたは64Kバイトであることが多いものの、別のサイズも使用することができます)に分割されます。これらの塊が、使用されているRAIDレベルに従ってRAIDのハードドライブに書き込まれます。データの読み込み時にはこの作業が逆になるので、複数ドライブが実際に1つの大容量ドライブであるかのように錯覚します。

RAIDを使用すべきユーザーは?

 大量のデータを身近に保管しておく必要のある人(平均的な管理者など)には、RAID技術を使用するメリットがあります。RAIDを使用する理由には、以下のものがあります。

  • 高速化

  • 1つの仮想ディスクを使用することによる記憶容量の増加

  • ディスククラッシュによる影響の減少

RAID――ハードウェアvsソフトウェア

 RAIDアプローチには2種類あります。ハードウェアRAIDとソフトウェアRAIDです。

ハードウェアRAID

 ハードウェアベースのRAIDシステムは、ホストから独立するものとしてRAIDサブシステムを管理します。ホストからは、RAIDアレイが1台のディスクに見えます。

 ハードウェアRAIDデバイスの例としては、SCSIコントローラに接続したデバイスがあり、この場合RAIDアレイは単一のSCSIドライブのように見えます。外部RAIDシステムは、すべてのRAID処理機能を外部のディスクサブシステムの中に配置されたコントローラが担当します。サブシステム全体は通常のSCSIコントローラを経由してホストと接続しているので、ホストから見ると単一のディスクのように見えます。

 RAIDコントローラもカード形式のもので、オペレーティングシステムに対するSCSIコントローラのような役割を果たします。ただし、ドライブとの実際の通信を自分自身で処理します。そのような場合、SCSIコントローラの場合と同様にドライブはRAIDコントローラに接続されますが、ドライブはRAIDコントローラの設定として追加されるので、オペレーティングシステムは違いを認識することができません。

ソフトウェアRAID

 ソフトウェアRAIDは、カーネルのディスク(ブロックデバイス)コードの中で各種のRAIDレベルを実現します。ソフトウェアRAIDでは、高価なディスクコントローラカードやホットスワップシャーシ[1]が必要ない最も安価なソリューションでもあります。また、SCSIだけではなく安価なIDEディスクを使用した場合でも機能します。最近の高速なCPUを使用した場合、ソフトウェアRAIDの性能がハードウェアRAIDをしのぐこともあります。

 Linuxカーネルに含まれるMDドライバはRAIDソリューションの例であり、ハードウェアから完全に独立しています。ソフトウェアベースアレイの性能は、サーバーCPUの性能と負荷に依存します。

 Red Hat LinuxインストールプログラムにおけるソフトウェアRAIDの設定については、オフィシャル Red Hat Linux カスタマイズガイドを参照してください。

 ソフトウェアRAIDが提供する機能について詳しく知りたい人のために、以下に最も重要な機能を簡単に列挙します。

  • スレッド化された再構築プロセス

  • 完全にカーネルに基づいた構成

  • 再構築せずにLinuxマシン間でアレイを移動することができる

  • アイドル状態のシステム資源を使用した、バックグラウンドにおけるアレイの再構築

  • ホットスワップ可能なドライブをサポート

  • 自動的にCPUを検出して特定のCPUの最適化機能を利用

RAIDレベルとリニアのサポート

 RAIDはレベル0、1、4、5、リニアなど、さまざまな設定をサポートします。これらのRAIDタイプは以下のように定義されています。

  • レベル0—RAID 0は、"ストライピング"とも呼ばれますが、速さ指向のストライプ化されたデータマッピング技術です。つまり、アレイに書き込まれるデータはストライプへと分割され、アレイの各メンバーディスクへと書き込まれます。そうすることで、低い固有コストに対して高い入出力性能が得られますが、冗長性は得られません。レベル0アレイの記憶容量は、ハードウェアRAIDのメンバーディスクの合計容量か、ソフトウェアRAIDのメンバーパーティションの合計容量に等しくなります。

  • レベル1—RAID 1、または"ミラーリング"は、他のどのRAIDの形式よりも長い間使用され続けています。RAID 1は、アレイの各メンバーディスクに同じデータを書き込み、各ディスク上に「鏡で写したような」コピーを残すことによって冗長性を提供しています。ミラーリングは、その単純さと高レベルのデータの安全性を提供するために人気を保っています。レベル1は2台またはそれ以上のディスクがある場合に機能するため、読み込み時には並列アクセスを行うことで高速な転送レートが得られますが、一般には独立して動作することによって高い入出力トランザクションレートを提供します。レベル1は優れたデータの信頼性を提供し、読み込み中心のアプリケーションについては処理速度を向上させるものの、比較的コストが高くなります。[2]レベル1アレイの容量は、ハードウェアRAIDでミラーリングされたハードディスク1台か、ソフトウェアRAIDでミラーリングされたパーティション1つの容量に等しくなります。

  • レベル4—RAID 4では1台のディスクドライブに集められたパリティ[3]を使用することでデータを保護します。大規模ファイルの転送よりもトランザクション入出力に適しています。パリティ専用ディスクに固有のボトルネックがあるため、ライトバックキャッシングなどの技術を併用せずにRAID 4が使用されることはめったにありませんRAID 4は、RAIDパーティション構成に含まれるオプションではありますが、Red Hat LinuxのRAID構成で許されるオプションではありません。[4]ハードウェアRAIDレベル4の容量はメンバーディスクの合計容量から1台のメンバーディスクの容量を差し引いたものに等しくなります。同じ容量のパーティションを使用した場合、ソフトウェアRAIDレベル4の容量はメンバーパーティションの合計容量から1つのパーティションの容量を差し引いたものに等しくなります。

  • レベル5—最も一般的なRAIDのタイプです。アレイに属するすべてのメンバーディスクドライブ上にパリティ情報を分散することによって、RAID 5ではRAID 4に固有の書き込みボトルネックが取り除かれています。唯一の性能上のボトルネックは、パリティの計算プロセスです。最近のCPUとソフトウェアRAIDを使用した場合、通常さほど大きな問題にはなりません。RAID 4の場合と同じく、結果として処理速度には偏りがあり、読み込み速度が書き込み速度を大きく上回ります。この偏りを小さくするために、しばしばRAID 5はライトバックキャッシングと併用されます。ハードウェアRAIDレベル5の容量は、メンバーディスクの合計容量から1台のメンバーディスクの容量を差し引いたものに等しくなります。同じ容量のパーティションを使用した場合、ソフトウェアRAIDレベル5の容量は、メンバーパーティションの合計容量から1つのパーティションの容量を差し引いたものに等しくなります。

  • リニアRAID—リニアRAIDは単純にドライブをグループ化して1台の大容量仮想ドライブを作成するものです。リニアRAIDでは、塊が1台のメンバードライブに対して逐次的に割り当てられて行き、最初のドライブが完全に埋めつくされると次のドライブに割り当てられるようになります。このようなグループ化の場合、入出力操作がメンバードライブの間で分割されることはほとんどないので、性能上のメリットはありません。リニアRAIDは冗長性も提供せず、実際に信頼性も低くなります。つまり、メンバードライブのいずれかがクラッシュすると、アレイ全体を使用することができなくなります。容量は、全メンバーディスクの合計です。

Notes

[1]

ホットスワップシャーシを使用すれば、システムの電源を落とさなくてもハードディスクを取り出すことができます。

[2]

RAID 1のコストが高くなるのは、アレイに属するすべてのディスクに同じ情報を書き込むので、ドライブの領域を消費するからです。たとえば、RAID 1をセットアップして、ルート(/)パーティションが2台の40Gバイトドライブに存在するとします。物理的な領域の合計は80Gになりますが、80Gバイトのうちの40Gバイトにしか利用することができません。残りの40Gバイトは最初の40Gバイトのミラーとなります。

[3]

パリティ情報は、アレイに属する他のメンバーディスクの内容に基づいて計算されます。この情報を使用することによって、アレイに属するディスクがクラッシュした場合でも、残りのデータとパリティを使って、全体のデータを再構築することができます。また、残りのデータとパリティを使用すれば、ディスクを交換する前にクラッシュしたディスクに対する入出力要求を満たすこともできます。ディスクを交換した後でクラッシュしたディスクを再現することもできます。

[4]

RAID 4で消費される領域の量はRAID 5の場合と同じですが、RAID 5にはRAID 4をしのぐ長所がたくさんあります。このためRAID 4はサポートしていないのです。