RAIDとは何か
RAID(Redundant Array of Independent Disks)は、1987年にカリフォルニア大学バークレー校のDavid Patterson、Garth A. Gibson、Randy Katzによって考案されました。彼らは1988年のSIGMOD会議で発表した論文「A Case for Redundant Arrays of Inexpensive Disks」で、当時の大型機よりも高性能だったパーソナルコンピュータ市場向けに開発された一連の安価なドライブの性能について論じています。ドライブ数が増えると故障率も比例して高くなりますが、冗長性を構成することで、アレイ全体の信頼性は単一の大容量ドライブをはるかに凌駕することが可能になります。
RAIDは、仮想化ストレージ技術を利用して複数のハードディスクを組み合わせ、1つまたは複数のディスクアレイグループを作成します。これにより、パフォーマンス向上、データ冗長性、またはその両方を実現します。RAIDレベルによってデータは様々なパターンで各ディスクに分散され、RAID0、RAID1、RAID5、RAID6、RAID10などの数字で識別されます。各レベルには理論的な長所と短所があり、データの信頼性向上とストレージシステムの読み書き性能向上という2つの目標の間で異なるバランスが取られています。
簡単に言えば、RAIDは複数のハードディスクを1つの論理ディスクとして扱い、オペレーティングシステムはそれを単一の物理ディスクとして認識します。RAIDはサーバーコンピュータで広く使用されており、通常は同一のハードディスクが組み合わせに使用されます。ハードディスク価格の低下とRAID機能のマザーボードへの統合が進んだため、ビデオやオーディオ制作など大容量ストレージを必要とする一般ユーザーにも選択肢となっています。
RAIDの主要機能
- I/O能力の向上
- 耐久性の向上
- ディスクの冗長バックアップ
RAIDの実装方法
- 外部ディスクアレイ:拡張カードを介して接続されるタイプ
- 内部RAID:マザーボードに統合されたRAIDコントローラを使用し、OSインストール前にBIOSで設定
- ソフトウェアRAID:オペレーティングシステムによって実装されるタイプ(例:SynologyのNASストレージ)
RAIDレベル
RAID-0:ストライプ(Striping)
すべてのレベル中最速です。読み取りと書き込みの両方で並列処理が行われるためです。しかし、RAID-0は冗長性がなく、耐障害性もありません。1つのディスクが故障すると、すべてのデータが失われます。
- 読み取り・書き込み性能向上
- 使用可能なスペース:N×min(S1,S2,...)
- 耐障害性なし
- 必要な最小ディスク数:2台以上(1台では効果なし)
RAID-1:ミラーリング(Mirroring)
2台以上のN個のディスクが相互にミラーを形成します。マルチスレッドオペレーティングシステムでは読み取り速度が向上し、理論的にはディスク数に比例した速度向上が期待できます。書き込み速度はわずかに低下します。
- 読み取り性能向上、書き込み性能はわずかに低下
- ディスク利用率:50%
- 冗長性あり
- 必要な最小ディスク数:2n台(n≥1)
RAID-5
読み取り性能は向上しますが、書き込み性能はわずかに低下します。
- 読み取り性能向上
- 書き込み性能はわずかに低下
- 利用率:n-1
- 耐障害性あり:最大1台のディスク障害に対応
- 必要な最小ディスク数:3台以上
RAID-10
読み取りと書き込みの両方の性能が向上します。
- 読み取り・書き込み性能向上
- 使用可能なスペース:n/2
- 耐障害性あり:各ミラー組で最大1台の障害に対応
- 必要な最小ディスク数:4台以上(偶数台)
ソフトウェアRAIDの実装
mdadmツールは、ソフトウェアRAIDのための管理インターフェースを提供します。空きディスクに冗長性を追加し、カーネル内のmd(マルチデバイス)RAIDデバイスとして/dev/md0、/dev/md1などとして認識されます。
RAIDの作成手順
- ディスクのパーティション作成
- RAIDデバイスの作成
- ファイルシステムの作成
- マウント
mdadmコマンドの基本形式
mdadm [モード] [オプション] <コンポーネントデバイス>
一般的なオプション
- モード:
- 作成: -C
- アセンブル: -A
- 監視: -F
- 管理: -f, -r, -a
: /dev/md#- <コンポーネントデバイス>: 任意のブロックデバイス
- -C: 作成モード
- -n #: #個のブロックデバイスを使用してRAIDを作成
- -l #: RAIDレベルを指定(0, 1, 5, 10など)
- -c CHUNK_SIZE: チャンクサイズを指定(単位: KB)
- -x #: スタンバイディスクの数を指定(ホットスペア)
- -D: RAIDの詳細情報を表示
RAIDデバイスの状態確認
# RAIDデバイスの詳細情報を表示
mdadm -D /dev/md0
# RAIDの状態を確認
cat /proc/mdstat
RAID 5の作成例
# RAID 5の作成
mdadm -C /dev/md0 -l 5 -n 3 /dev/sd{b,c,d}1 -x 1 /dev/sde1
# 作成したRAIDの状態確認
cat /proc/mdstat
# RAIDの詳細情報を表示
mdadm -D /dev/md0
# ディスク障害のシミュレーション
mdadm /dev/md0 -f /dev/sdb1
# 故障したディスクの削除
mdadm /dev/md0 -r /dev/sdb1
# 新しいディスクの追加
mdadm /dev/md0 -a /dev/sdb1
# RAIDの状態を監視(5秒ごと)
watch -n 5 'cat /proc/mdstat'
RAID 10の作成例
# まずミラーを作成
mdadm -C /dev/md1 -l 1 -n 2 /dev/sdb1 /dev/sdc1
mdadm -C /dev/md2 -l 1 -n 2 /dev/sdd1 /dev/sde1
# 次にストライプを作成
mdadm -C /dev/md10 -l 10 -n 2 /dev/md1 /dev/md2
RAID設定の永続化
設定ファイルの生成
mdadm -D -s >> /etc/mdadm.conf
RAIDデバイスの停止
# マウントを解除してから停止
umount /dev/md0
mdadm -S /dev/md0
RAIDデバイスのアクティベート
# 設定ファイルからデバイスをアクティベート
mdadm -A -s /dev/md0
RAID情報の削除
# スーパーブロック情報を消去
mdadm --zero-superblock /dev/sdb1
RAIDレベル比較表
| RAIDレベル | 読み性能向上 | 書き性能向上 | 最小ディスク数 | 冗長性 | 実際の容量 | 許容障害ディスク数 |
|---|---|---|---|---|---|---|
| 0 | あり | あり | 2台(1台では非推奨) | なし | 100% | 0台 |
| 1 | あり | なし | 2n台(n≥1) | あり | 50% | 1台 |
| 5 | あり | なし | 3台以上 | あり | n-1 | 1台 |
| 10 | あり | あり | 4台以上(偶数台) | あり | 50% | 最大2台(同一ミラー組内では1台まで) |