RAID

RAIDは、複数台のハードディスクを組み合わせることで仮想的な1台のハードディスクとして運用し冗長性を向上させる技術。ディスクアレイの代表的な実装形態で、主に信頼性・可用性の向上を目的として用いられるものである。バックアップと混同される場合もあるが､RAIDはあくまでも運用に対しての冗長性を確保するものでありバックアップとは異なる点に注意が必要｡

本記事において、「装置」という語句を用いるが、これはRAIDが取り付けられる機器の総称を意味する。

1. 概要
-----

1988年にカリフォルニア大学バークレー校のデイビッド・パターソン, Garth A. Gibson, Randy H. Katzによる論文「A Case for Redundant Arrays of Inexpensive Disks 」において提唱された。

この論文は、安価で低容量、価格相応の信頼性のハードディスクドライブ  を用い、大容量で信頼性の高いストレージをいかに構築すべきかを提案したものである。論文にはハードディスクの構成によって、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は、大容量データの高速処理や耐障害性の向上を必須要件とする大規模な業務用サーバやワークステーション、特定目的に製造されたコンピュータ機器等に用いられていたが、近年、小規模サーバやパソコンにも普及しつつあるdate=2018年1月}}。

1.1. 普及の要因
----------

デジタルデータの重要性が高まっているため
HDDが大容量化し、一般ユーザにとっても故障時に失われるデータ量を無視できなくなったため
HDDやRAID関連製品も低価格化、RAID機能のチップセットへの内蔵が進んでいるため

1.2. 注意点
--------

RAIDは複数のHDDを用いて、ディスクアレイの可用性を高める技術である。そのため、ファイルの誤消去など人為的なもの、コンピュータウイルスによるファイルの破壊、ファイルシステムの不整合など、ソフトウェア的な障害には対応できない。またHDDが同時期に複数故障する、リビルド時に他のHDDが障害を起こす等、単体のHDDに比べれば非常に低いがディスクアレイも故障の可能性を持つ。

バックアップは、データを静的な状態で、一定期間、複数世代、保存するものであり、RAIDとは役割が異なる。データはRAIDとバックアップの両者を組みあわせて運用することにより、サービスの継続性を保証しつつ、高い安全性を持って保全することができる。

2. RAIDの方式
----------

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

2.1. ハードウェア方式
-------------

2.1.1. コントローラカード
----------------

この方式は、RAIDコントローラと呼ばれるカードを装置に取り付け、パリティ演算やディスクの管理などを任せるものである。ドライバさえ用意すればハードウェア側のマシンパワーに影響を与えず､カード自体に専用のキャッシュメモリを搭載している場合はアクセスの高速化が見込める｡一部のマザーボードにはRAIDコントローラをあらかじめ実装している製品がある。

純粋なハードウェア方式では、ホストが僅かな指示を送るだけでRAIDコントローラが具体的な処理を全て行うため、CPUの負荷が低減される。しかし、コントローラ毎に制御方法が異なるため、OS側で各RAIDコントローラカードへの対応が必要であり、専用のデバイスドライバが必要となる。

一方、RAIDコントローラカードの中には、RAID機能の大部分をソフトウェアで実現しているものもある。この場合、OS起動前にある程度のRAID機能を使用可能であるがCPUの負荷はソフトウェア方式と大差が無く､ハードウェア方式に比べて対応OSが限定されたり信頼性に乏しい場合があり､ソフトウェア方式に分類される。

2.1.2. ディスクアレイユニット
------------------

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

2.2. ソフトウェア方式
-------------

ソフトウェア方式は、OS自身が普通のドライブコントローラを通して複数台のディスクを管理する。この方式はハードウェア方式と比較し、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を行っている。

3. 電源問題
-------

ハードディスクの必要台数が増えるため、特にRAIDコントローラカードを用いて装置内部にハードディスクを取り付けている場合、電源がハードディスク台数分の負担に耐えられるか注意すべきである。

ハードディスクは突入電流等により起動時に最も電力を必要とするため、スタッガードスピンアップ機能を搭載しているRAIDコントローラもある。

4. ライトホール問題
-----------

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の場合は、誤ったパリティによりデータが破壊される。 これらを、サイレントクラッシュ