RAID

概要

1988年にカリフォルニア大学バークレー校のデイビッド・パターソン, Garth A. Gibson, Randy H. Katzによる論文「A Case for Redundant Arrays of Inexpensive Disks (RAID)」において提唱された。
この論文は、安価で低容量、価格相応の信頼性のハードディスクドライブ (Inexpensive Disk) を用い、大容量で信頼性の高いストレージ（補助記憶装置）をいかに構築すべきかを提案したものである。論文にはハードディスクの構成によって、RAID 1からRAID 5までの5種類を定義している。
また、論文では提案されていないが、ストライピングのみの場合も一般的にはRAIDの一種とみなされ、これは冗長性が確保されないことからRAID 0と呼ばれる。
はじめに定義された6種類のうち、RAID 2はほとんど利用されず、RAID 3,4もRAID全体の中では少数派である。今日ではRAID 0・RAID 1・RAID 5、およびこれら3方式の組み合わせが用いられている。後にRAID 5を拡張したRAID 6が定義され、RAID 5より耐障害性が必要な場面で利用されている。
導入を検討するユーザにとっては、信頼性 ・ 速度 ・ 予算（ハードディスクの利用効率も含む）の内どれを重視するかを考え、実情にあわせた導入方法を選択することができる。3つを完全に満たすのは難しいが、2つを満たす現実的な方法は充分にある。
RAIDの構成によっては、一部のハードディスクが故障してもディスクアレイは稼動を継続できる。その場合、ディスクを稼働させたまま故障したハードディスクを取り外して代わりのハードディスクに交換することにより装置を停止することなく運用を続けることができる。このように装置が稼働中に接続しなおして、即座に利用できる機能を「ホットスワップ（活線挿抜）」と呼ぶ。ホットスワップ機能を使用するには装置側でハードウェアとして対応していることが前提となる。サーバ用途など24時間連続稼働が求められる装置ではホットスワップ対応が望ましい。
RAIDは、大容量データの高速処理や耐障害性の向上を必須要件とする大規模な業務用サーバやワークステーション、特定目的に製造されたコンピュータ機器等に用いられていたが、近年、小規模サーバやパソコンにも普及しつつある。

注意点

RAIDは複数のHDDを用いて、ディスクアレイの可用性を高める技術である。そのため、ファイルの誤消去など人為的なもの、コンピュータウイルスによるファイルの破壊、ファイルシステムの不整合など、ソフトウェア的な障害には対応できない。またHDDが同時期に複数故障する、リビルド時に他のHDDが障害を起こす等、単体のHDDに比べれば非常に低いがディスクアレイも故障の可能性を持つ。
バックアップは、データを静的な状態で、一定期間、複数世代、保存するものであり、RAIDとは役割が異なる。データはRAIDとバックアップの両者を組みあわせて運用することにより、サービスの継続性を保証しつつ、高い安全性を持って保全することができる。

RAIDの方式

RAIDを実装する方法としては、ハードウェアで実現する方法（ハードウェア方式）とソフトウェアで実現する方法（ソフトウェア方式）がある。この2方式は明確に分類できるものではなく、中間的な方式がいくつか存在する。

コントローラカード

この方式は、RAIDコントローラと呼ばれるカードを装置に取り付け、パリティ演算やディスクの管理などを任せるものである。ドライバさえ用意すればハードウェア側のマシンパワーに影響を与えず､カード自体に専用のキャッシュメモリを搭載している場合はアクセスの高速化が見込める｡一部のマザーボードにはRAIDコントローラをあらかじめ実装している製品がある。
純粋なハードウェア方式では、ホストが僅かな指示を送るだけでRAIDコントローラが具体的な処理を全て行うため、CPUの負荷が低減される。しかし、コントローラ毎に制御方法が異なるため、OS側で各RAIDコントローラカードへの対応が必要であり、専用のデバイスドライバが必要となる。
一方、RAIDコントローラカードの中には、RAID機能の大部分をソフトウェアで実現しているものもある。この場合、OS起動前にある程度のRAID機能を使用可能であるがCPUの負荷はソフトウェア方式と大差が無く､ハードウェア方式に比べて対応OSが限定されたり信頼性に乏しい場合があり､ソフトウェア方式に分類される。

ディスクアレイユニット

複数のディスクを搭載出来るケースにRAIDを搭載したハードウェア。コンピュータやOS側からは単なるSCSIやファイバーチャネルのドライブとして見えるため、特別なドライバが必要なく、CPUへの負荷が全くない。ディスクアレイユニットを接続したい装置に必要な外部接続インタフェースがすでにあれば装置の筐体を開けることもなく、ケーブルをつなぐだけで使えるようになる。

ソフトウェア方式

ソフトウェア方式は、OS自身が普通のドライブコントローラ（IDE、SCSI、FC など）を通して複数台のディスクを管理する。この方式はハードウェア方式と比較し、CPUへの負荷が高いが、特別なハードウェアを購入する必要がなく導入コストが低いという利点がある。しかしながらアクセスコントロールの大半をOSやCPUに依存するためマシンパワーを消費すること､物理的なキャッシュが存在しないためハード的な障害やソフトウェア側の障害発生に伴ってRAID情報に致命的な問題を引き起こす可能性がハードウェア方式に比べて高いという欠点が存在する｡
Windowsは、RAID機能をサポートしている。Linuxは、カーネル2.4系以降にてRAID0/1/4/5/6をサポートしている。FreeBSDは、gmirrorというソフトウェアにてサポートしている。ファイルシステムのZFSはそれ自身にRAID機能をもち、RAID5またはRAID6相当の機能としてそれぞれRAID-Z、RAID-Z2が実装されている。インテルのチップセットでは、マトリックス・ストレージ・マネージャー機能によりRAID機能をサポートしている。これはソフトウェアというよりはファームウェアでのRAIDである。Adaptecの低価格RAIDボードでは、HostRAIDによりソフトウェアRAIDを行っている。
近年、サーバ向けチップセットだけでなくメインストリーム向けのチップセットでもRAIDコントローラ機能（0/1/0+1/5など）を集積したものが広く普及しつつある。マトリックス・ストレージ・マネージャー機能はMUX（マルチプレクサ）/DEMUX（デマルチプレクサ）で構成されており、CPUが発行したディスクI/O操作を複数のハードディスクへのディスクI/Oに分散・またディスクからの読み出しの多重化を行う（パリティ演算機能を持つものと持たないものがある）。信頼性はもとより、ディスクI/O速度を高速化する総合アクセラレータ的要素が強い。このため、ソフトウェア方式に分類される場合が多い。

電源問題

ハードディスクの必要台数が増えるため、特にRAIDコントローラカードを用いて装置内部にハードディスクを取り付けている場合、電源がハードディスク台数分の負担に耐えられるか注意すべきである。
ハードディスクは突入電流等により起動時に最も電力を必要とするため、スタッガードスピンアップ（各ディスクに時間差を置いて起動する）機能を搭載しているRAIDコントローラもある。

ライトホール問題

RAID 5の問題として有名だが、複数のHDDを束ねて1つのグループと見なす、すべてのRAIDシステムで起こりうる。
RAID 2以外のRAIDは読み出し時のエラー検出をHDDのエラー検出に依存しているので、RAIDシステムではエラー検出が出来ない。
物理的な破損等でHDDから応答が無かった場合や読み出しエラーをHDDが返した場合に限り、RAIDシステムではエラーを検出できるが、正しく読み出せる場合はエラー検出が出来ない。
例えば、2台でのRAID 1場合、RAIDコントローラからHDD AとHDD Bに同時に書き込みリクエストは発生するが、HDDには書き込み時の処理のタイムラグがあるため、HDD Aには書き込みが完了したがHDD Bには書き込みが発生していないと言うタイミングが存在する(逆もしかり)。
このタイミングで電源断等により処理が中断した場合、HDD Aには新しく書き込まれたデータ、HDD Bには上書きされる前の古いデータ記録されており、HDD AとHDD Bのミラーとして対になるセクタの値が同一ではなくなる。
ブロックサイズが大きい場合は、ブロック自体が複数のセクタで構成されているため、同一HDDの中でも、ブロックを構成する一部のセクタのみこ書き込み完了しそれ以外は書き換えられていないと言うことも発生する。
このようにRAIDを構成するグループのHDDのブロックすべてに書き込めずに、穴が開いたのように書き込まれるためライトホールと呼ばれる。
HDDレベルではどちらも正常なのでエラー無く読み出せるが、HDD毎に異なる値が読み出されるようになる。
これはRAIDレベルでは不整合を起こした状態となり、これはRAIDシステムではエラー検出機能を持っていないために、エラーが起きている事を検出することが出来ない
結果として、RAID 1の場合は、読み込むHDDによって値が変わる。上記の例ではHDD Bの書き込みがされていないためにBから読み出された場合やHDD Aが破損し、HDD BからHDD A'にリビルドされた際にデータが壊れる。
RAID 3，4，5、6の場合は、誤ったパリティによりデータが破壊される。
これらを、サイレントクラッシュ（正確にはサイレントデータコラプション)と呼ぶ。
バッテリバックアップされたNVRAMやフラッシュメモリ等の不揮発メモリを持っているハードウェアRAIDでは、
HDDから書き込みの完了・未完了等のトランザクション管理をしているためこの問題は発生しないようになっているが、
ソフトウェアRAIDや、不揮発メモリを持たない安価なハードウェアRAIDでは、この問題が発生する。
RAID 2はそれ自体がハミングコードによるエラー検出機能を持っているので、この問題は発生しない。
RAID-Zもブロック単位での書き換えがCopyOnWriteにより保証される事とチェックサムがあるためにこの問題は発生しない。

RAIDレベル

RAID 0からRAID 6まで7種類のうち、よく利用されるのはRAID 0・RAID 1・RAID 5・RAID 6で、RAIDコントローラやソフトウェアによって使用できるレベルが限定されている場合が多い。
各RAIDレベルを組み合わせて信頼性と速度を両立させることができる。
サーバ用途としては、データの保全性を重視するためRAID 1またはRAID 5が主に利用されている。サーバ台数の限られた環境で、一台のサーバにかかる負担が高い場合はこれらにRAID 0を組み込んで高速化を狙うケースもある（もちろんサーバ自体を増設して、一台あたりの負担を軽減することも検討すべきであり、負荷の度合い・設置場所の都合・予算などを多角的に検討する必要がある。単にRAID 0をかぶせて高速化することだけに過度の期待を寄せるべきではない）。
RAIDの方式によらず、サーバ用途の場合はトラブル発生時に速やかなハードディスク交換を実施できる態勢を採るのが重要であり、ホットスペアやホットスワップ対応の製品を用いるのが望ましい。
また、ある種のアプリケーションは、制御情報はRAID 1またはRAID 5のファイルシステムに保存し、マルチメディアデータはRAID 0に保存するとともにテープや光メディアにバックアップしている。

水平パリティによる分散記録

RAID 5においてパリティはパリティ用領域に使用されるディスク以外のXORで水平方向のパリティ (PH) をとる。水平パリティはそれぞれのディスクに格納され、1台のディスク障害に耐えることができる。ディスク障害時は障害の発生したディスクのXORによる再計算で復元が可能である。
データ書き込み時におけるパリティ計算方法の一例を下記に掲載する（An、BnはA1 B1 A2 B2 A3 B3の順に並んだデータブロック）。
A1/B1/PH1/

A2/PH2/B2/

PH3/A3/B3/
PH1=A1+B1

PH2=A2+B2

PH3=A3+B3

RAID 5を用いた組み合わせ

RAID 5に速度面、耐障害性などでの不満がある場合、RAID 0+1や1+0と同様に、他のRAIDと組み合わせることで弱点をカバーできる。

RAID 5+1とRAID 1+5

RAID 6を上回る強力な耐障害性が要求される場合、この組み合わせが選択肢となる。RAID 5+0やRAID 0+5と同様、最低6ドライブを必要とする。
RAID 5+1、RAID 1+5とも3ドライブまでの同時故障に耐えられるが、RAID 1+5のほうがより強い耐障害性を持つ。
メンテナンス性にも優れる。何らかの理由によりすべてのドライブを交換する必要が生じた場合、ミラーの片方のディスクを一度に交換し、リビルド後に残りを交換して再リビルド、という簡便な手順で、装置を止めることなく交換を完了でき、またこの作業中もRAID 5の耐障害性が残っている。

RAID 5+5

RAID 5によってRAID 5を組む、RAID 5+5も考えられる。この構成には最低9ドライブを要する。
RAID 5+1や1+5と同様、同時に3ドライブまでの故障に耐えられ、またディスク利用効率でそれらを上回る。耐障害性ではRAID 5+1と1+5の中間程度になる。
同様に、3次元化したRAID 5+5+5、4次元化したRAID 5+5+5+5なども考えられる。RAID 5+5+5は7台、RAID 5+5+5+5は15台までの同時故障に耐えられるが、必要となるドライブ数およびディスク効率の面から実用的ではない。

対角線パリティの計算方法

RAID 6ではRAID 5の水平パリティ (PH) に加え、対角線パリティ (PD) もパリティとして使用される。
水平パリティとは異なり対角線パリティは専用のディスクに格納される。ディスク4台でRAID6を構成しているとき、対角線パリティの配置と計算は以下の通り。
PH1/B1 /C1 /PD1

A2 /PH2/C2 /PD2

A3 /B3 /PH3/PD3
PD1=PH1+C2+B3

PD2=B1+A2+PH3

PD3=C1+PH2+A3

RAID Z

RAID ZはRAID 5やRAID 6と似た機構を持ち、速度と耐障害性を向上させたもの。
Oracle社のSolarisやFreeBSDにおいて、ZFSとしてRAID Z1,Z2,Z3が実用化されている。
RAID 5やRAID 6ではパリティ更新時に何らかの障害が発生するとデータとパリティが一致しなくなり、システム上では正常に見えても内部ではデータ破壊が進んでいるという状態（サイレントクラッシュ）に陥るという致命的な欠点がある。またストライプ幅より小さいデータを書き込む際にも、全体のデータとパリティを読み込んで再計算をする必要があるため、パフォーマンスが著しく低下するという弱点も持っている。
RAID Zでは常にストライプ全体への書き込みを行い、コピーオンライトと組み合わせることでRAID 5やRAID 6が持つサイレントクラッシュの問題を完全に回避できる。

Defunct Disk Drive

無効ディスクドライブ (DDD、Defunct Disk Drive) とは、RAIDを構成するディスクにおいて何らかの障害が発生し、RAIDの構成ディスクから外されたディスクないしその状態を示す。