🐧 Linux 総合学習プラットフォーム
ストレージ/ファイルシステム ・ 中級

RAIDの概要

RAIDは複数のディスクを束ねて、速度や耐障害性を高める技術です。RAID0は分散書き込みで高速ですが冗長性がなく、RAID1は2台に同じ内容を書く「ミラーリング」で1台壊れても継続できます。RAID5はパリティで容量効率と冗長性を両立します。Linuxではソフトウェアで mdadm を使って構成でき、状態は /proc/mdstat や lsblk で確認します。RAIDはバックアップの代わりにはならない点に注意が必要です。

ディスクはいつか必ず壊れる。1台のディスクにすべてのデータを置いていたら、そのディスクが故障した瞬間に、全データを失う。

また、1台のディスクの読み書き速度には物理的な限界がある。

この「故障への弱さ」と「速度の限界」という2つの課題に立ち向かう技術が RAID(Redundant Array of Independent Disks)だ。RAIDは複数の物理ディスクを組み合わせて、あたかも1つのストレージであるかのように扱い、構成方式(RAIDレベル)に応じて速度や耐障害性を高める。

💡
ポイントRAID は複数のディスクを束ねて1つに見せ、構成方式(RAIDレベル)に応じて速度や耐障害性を高める技術だ。

では、その束ね方には、どんな種類があるのか。

🎚 どのレベルを、何のために選ぶのか

RAID にはいくつかのレベルがあり、目的によって使い分ける。

まず RAID0(ストライピング)は、データを複数のディスクに分散して同時に書き込むことで、読み書きを高速化する方式だ。2台あれば理論上およそ2倍の速度が出るが、冗長性はまったくない。それどころか、構成するディスクが1台でも壊れると全データを失うため、速度最優先で消えても困らないデータ向けの構成だ。

RAID0(ストライピング)ディスク1A C Eディスク2B D F速い。だが1台壊れると全滅(冗長性なし)分散して同時書き込みRAID1(ミラーリング)ディスク1A B Cディスク2A B C同じ内容を2つ。片方壊れても続行使える容量は1台ぶん(効率50%)速度を取るか、保護を取るか。RAID5は両者のバランス型

次に RAID1(ミラーリング)は、2台のディスクにまったく同じ内容を書き込む方式だ。常に同じデータが2つ存在するので、片方のディスクが壊れても、もう片方だけで処理を続けられる。耐障害性は高い反面、2台用意しても使える容量は1台ぶんになるため、容量効率は50%だ。データの保護を最優先する、台数の少ない構成でよく使われる。

🔗
たとえRAID0は「手分けして速く運ぶ」、RAID1は「同じ書類を2部持つ」。前者は速いが片方欠けると全滅、後者は安全だが量は半分。

そして RAID5 は、3台以上のディスクにデータと「パリティ」と呼ばれる誤り訂正用の情報を分散して配置する方式だ。パリティのおかげで、構成ディスクのうち1台が壊れても、残りのディスクとパリティから失われたデータを復元できる。容量効率もよく(N台ならN-1台ぶんが使える)、耐障害性と効率のバランスに優れるため、ある程度の台数があるサーバで広く使われる。

RAID0(ストライプ)A1A2データを分けて書く=速い1本壊れると全部失うRAID1(ミラー)AA同じ内容を2本に書く1本壊れても無事RAID5(パリティ分散)ABPP(パリティ)から復元できる1本壊れても無事・容量も有効活用速さのRAID0・安全のRAID1・バランスのRAID5

ただしRAID5は同時に2台壊れると復旧できない点には注意が必要だ。この弱点を補うのが、パリティを二重に持って2台までの同時故障に耐える RAID6 である。また、RAID1の冗長性とRAID0の速度を組み合わせた RAID10(1+0)もよく使われ、台数と予算に余裕がある場合の定番だ。

どのレベルを選ぶかは、求める「速度・容量効率・耐障害性」のどれを優先するかで決まる。では、選んだRAIDを、Linuxではどう組むのか。

🐧 Linux では、何で RAID を組むのか

RAID には、専用のハードウェア(RAIDカード)で実現するハードウェアRAIDと、OSの機能だけで実現するソフトウェアRAIDがある。

Linuxではソフトウェアで RAID を構成でき、その中心となるのが mdadm(multiple device admin)コマンドだ。たとえば mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc のように指定すると、/dev/sdb と /dev/sdc の2台でRAID1を組み、/dev/md0 という1つのRAIDデバイスとして使えるようになる。

mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc ……2台でRAID1を組み /dev/md0 として使う。--level がレベル、--raid-devices が台数。

--level でRAIDレベルを、--raid-devices で構成する台数を指定する。作成された /dev/md0 は、ここまで学んできた普通のブロックデバイスと同じように扱え、mkfs.ext4 /dev/md0 でファイルシステムを作り、mount して使う。

ところで、組んだだけで安心していいのだろうか。作っただけでは再起動後にRAIDの構成情報が失われることがあるため、mdadm --detail --scan の出力を設定ファイル /etc/mdadm.conf(ディストリビューションによっては /etc/mdadm/mdadm.conf)へ追記して、構成を永続化しておく。

つまずき作っただけでは再起動後に構成情報が失われることがある。mdadm --detail --scan の出力を /etc/mdadm.conf へ追記して永続化する。

そのうえで、できあがった /dev/md0 を前のトピックで学んだ /etc/fstab に UUID で登録すれば、起動時に自動でマウントされる、データ用の冗長ストレージが完成する。RAIDの上に、さらにLVMを重ねて柔軟性を加える、といった組み合わせ方もよく行われる。

だが、冗長化したから安心、と言い切れないのがRAIDの怖いところだ。

🩺 なぜ、状態の監視が生命線なのか

RAIDは「壊れてもしばらく動き続けられる」のが利点だが、裏を返せば、1台壊れたことに気づかないまま放置すると、2台目が壊れた時点で(RAID1やRAID5では)取り返しがつかなくなる。

💡
ポイントRAIDは1台壊れても気づきにくい。気づかず放置して2台目が壊れると(RAID1/RAID5では)取り返しがつかない。だから状態監視が生命線だ。

だからこそ、状態の監視が運用の生命線だ。現在のRAIDの状態は cat /proc/mdstat で確認でき、各RAIDデバイスがどのディスクで構成され、正常か、再構築中かなどが分かる。

cat /proc/mdstat ……RAIDの現在の状態を一覧。mdadm --detail /dev/md0 ……構成ディスクを active/failed など1台ずつ確認。

より詳しくは mdadm --detail /dev/md0 で、構成ディスクの状態(active/failed など)を1台ずつ確認できる。これまで使ってきた lsblk でも、RAIDデバイスとその構成ディスクの関係をツリーで把握できる。

ディスクが1台壊れた状態(縮退運転)では速やかに故障ディスクを交換し、再構築(リビルド)してRAIDを正常な冗長状態へ戻すことが重要だ。

🛡 RAID があれば、バックアップは要らないのか

RAIDについて何より誤解してはいけないのは、RAIDはバックアップの代わりにはならないということだ。

つまずきRAID はバックアップの代わりにならない。守るのは「物理装置の故障」だけ。rm の誤削除や暗号化は全ディスクに即反映され、ミラー側からも消える。

RAIDが守ってくれるのは、あくまで「ディスクという物理装置の故障」だけである。誤ってファイルを rm で消してしまった、ランサムウェアにファイルを暗号化された、ファイルシステムが論理的に破損した――こうした事態では、その変更は構成する全ディスクに即座に反映されてしまうため、RAIDはまったく無力だ。消したファイルはミラー側からも同時に消え、復元できない。

したがって、RAIDで可用性(壊れても止まらないこと)を高めつつ、それとは完全に別に、定期的なバックアップ(できれば別の場所・別の媒体へ)を必ず用意する、という二段構えが鉄則だ。

「RAIDを組んでいるから安心」という思い込みが、最も危険な落とし穴だと心得てほしい。実務では、RAIDで日々の可用性を確保し、バックアップで人為ミスや災害に備える、と役割を分けて考えるのが正しい設計だ。

この項目に出てくる用語

RAIDれいど
複数のディスクを束ねて速度や耐障害性を高める技術。RAID0/1/5などの方式があり、バックアップの代替にはならない。
ブロックデバイスぶろっくでばいす
データを一定サイズの「ブロック」単位で読み書きする記憶装置。ディスクやSSD、USBメモリが該当し、/dev/sda などの名前で扱う。

関連コマンド

lsblkdf

▶ 学習アプリでこの続きを学ぶ・演習する