🐧 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 レベル

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

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

そして RAID5 は、3台以上のディスクにデータと「パリティ」と呼ばれる誤り訂正用の情報を分散して配置する方式です。パリティのおかげで、構成ディスクのうち1台が壊れても、残りのディスクとパリティから失われたデータを復元できます。容量効率もよく(N台ならN-1台ぶんが使える)、耐障害性と効率のバランスに優れるため、ある程度の台数があるサーバで広く使われます。ただしRAID5は同時に2台壊れると復旧できない点には注意が必要です。この弱点を補うのが、パリティを二重に持って2台までの同時故障に耐える RAID6 です。また、RAID1の冗長性とRAID0の速度を組み合わせた RAID10(1+0)もよく使われ、台数と予算に余裕がある場合の定番です。どのレベルを選ぶかは、求める「速度・容量効率・耐障害性」のどれを優先するかで決まります。

Linux でのソフトウェア RAID — mdadm

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

作っただけでは再起動後にRAIDの構成情報が失われることがあるため、mdadm --detail --scan の出力を設定ファイル /etc/mdadm.conf(ディストリビューションによっては /etc/mdadm/mdadm.conf)へ追記して、構成を永続化しておきます。そのうえで、できあがった /dev/md0 を前のトピックで学んだ /etc/fstab に UUID で登録すれば、起動時に自動でマウントされる、データ用の冗長ストレージが完成します。RAIDの上に、さらにLVMを重ねて柔軟性を加える、といった組み合わせ方もよく行われます。

状態の確認が運用の鍵

RAIDは「壊れてもしばらく動き続けられる」のが利点ですが、裏を返せば、1台壊れたことに気づかないまま放置すると、2台目が壊れた時点で(RAID1やRAID5では)取り返しがつかなくなります。だからこそ、状態の監視が運用の生命線です。現在のRAIDの状態は cat /proc/mdstat で確認でき、各RAIDデバイスがどのディスクで構成され、正常か、再構築中かなどが分かります。より詳しくは mdadm --detail /dev/md0 で、構成ディスクの状態(active/failed など)を1台ずつ確認できます。これまで使ってきた lsblk でも、RAIDデバイスとその構成ディスクの関係をツリーで把握できます。ディスクが1台壊れた状態(縮退運転)では速やかに故障ディスクを交換し、再構築(リビルド)してRAIDを正常な冗長状態へ戻すことが重要です。

RAID はバックアップではない — 最重要の注意点

RAIDについて何より誤解してはいけないのは、RAIDはバックアップの代わりにはならないということです。RAIDが守ってくれるのは、あくまで「ディスクという物理装置の故障」だけです。誤ってファイルを rm で消してしまった、ランサムウェアにファイルを暗号化された、ファイルシステムが論理的に破損した——こうした事態では、その変更は構成する全ディスクに即座に反映されてしまうため、RAIDはまったく無力です。消したファイルはミラー側からも同時に消え、復元できません。したがって、RAIDで可用性(壊れても止まらないこと)を高めつつ、それとは完全に別に、定期的なバックアップ(できれば別の場所・別の媒体へ)を必ず用意する、という二段構えが鉄則です。「RAIDを組んでいるから安心」という思い込みが、最も危険な落とし穴だと心得てください。実務では、RAIDで日々の可用性を確保し、バックアップで人為ミスや災害に備える、と役割を分けて考えるのが正しい設計です。

この項目に出てくる用語

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

関連コマンド

lsblkdf

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