RAIDとLVM入門|ディスクの冗長化とボリューム管理をサーバー運用で使いこなす

kento_morota 10分で読めます
社内のAI・IT活用、技術がわかる相手に無料相談。 相談 →
目次

「サーバーのディスクが1本壊れたら、サービスは止まるのか」「後から容量を増やしたいとき、どうやって広げるのか」。物理サーバーを扱う場面はもちろん、クラウドでも「EBSはRAIDにすべきか」「LVMは必要か」といった判断を求められることがあります。RAIDとLVMはどちらも古くからある技術ですが、役割を混同したまま運用されているケースが少なくありません。

この記事では、RAID 0/1/5/6/10の違いと「RAIDはバックアップではない」と言われる理由、LinuxのソフトウェアRAIDツールmdadmでの構築と監視、LVMの3層構造(物理ボリューム・ボリュームグループ・論理ボリューム)と無停止での拡張手順、そしてクラウドのブロックストレージ(EBSや永続ディスク)ではどこまでが不要になるのかを解説します。ファイルシステムの選択はLinuxファイルシステム入門dfmountの基本はLinuxのディスク管理入門を前提とします。

RAIDの種類と違い

RAIDが解決する2つの問題

RAID(Redundant Array of Independent Disks)は複数のディスクを束ねて1つのディスクのように見せる技術で、目的は「ディスク1本の故障でデータを失わない(冗長性)」と「複数本に分散して読み書きを速くする(性能)」の2つです。どちらをどの程度重視するかで、レベルと呼ばれる構成が分かれます。

レベル仕組み最低本数実効容量耐えられる故障特徴
RAID 0ストライピング(分散書き込み)2全本数分0本速いが1本壊れると全滅
RAID 1ミラーリング(同じ内容を複製)21本分1本単純で復旧が容易。OS領域の定番
RAID 5ストライピング+パリティ1つ3本数−11本容量効率が良いが書き込みが遅く再構築が長い
RAID 6ストライピング+パリティ2つ4本数−22本再構築中の2本目故障に耐える
RAID 10ミラーをストライピング4半分各ミラー1本ずつ速くて堅い。DB向けの定番

大容量ディスク時代の注意点

RAID 5は容量効率の良さから長く使われてきましたが、ディスクが数TB規模になると再構築(故障ディスクを交換して残りのディスクから内容を計算し直す処理)に数時間から数日かかり、その間に2本目が故障したり読み取りエラーが出たりすると全データを失います。再構築中は全ディスクにフル負荷がかかるため、故障が連鎖しやすい点も見逃せません。このため、大容量ディスクではRAID 6かRAID 10を選ぶのが現在の一般的な判断です。

「RAIDはバックアップではない」の意味

RAIDが守るのは「ディスクという部品の物理故障」だけです。誤ってrm -rfしてしまったファイル、ランサムウェアで暗号化されたデータ、アプリのバグで壊れたレコードは、RAIDによって即座に全ディスクへ忠実に複製されます。RAIDコントローラーの故障や火災・水害にも無力です。冗長化は「止まらないため」、バックアップは「戻すため」の仕組みであり、両方が必要です。バックアップの考え方はバックアップ3-2-1ルールを参照してください。

mdadmでソフトウェアRAIDを構築する

RAID 1を組む手順

Linuxではカーネルのmd機能とmdadmコマンドで、専用ハードウェアなしにRAIDを構成できます。ここでは/dev/sdb/dev/sdcでRAID 1を組みます。

  1. 対象ディスクにデータがないことを確認し、RAIDアレイを作成します。
    sudo apt install mdadm
    lsblk    # sdb, sdc が未使用であることを確認
    sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc
  2. 同期の進行状況を確認します。初回は全領域をコピーするため時間がかかりますが、同期中でも使用できます。
    cat /proc/mdstat
    # md0 : active raid1 sdc[1] sdb[0]
    #       976630464 blocks super 1.2 [2/2] [UU]
    #       [==>..................]  resync = 12.3% (120000000/976630464)
    sudo mdadm --detail /dev/md0
  3. ファイルシステムを作ってマウントし、設定を保存して再起動後も認識されるようにします。
    sudo mkfs.xfs /dev/md0
    sudo mkdir /data && sudo mount /dev/md0 /data
    sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf
    sudo update-initramfs -u    # Debian/Ubuntu

[UU]が両ディスク正常の印で、故障すると[U_]のように表示されます。故障ディスクはmdadm --fail--removeで外し、交換後にmdadm --add /dev/md0 /dev/sddで組み込むと自動的に再構築が始まります。

監視を必ず設定する

ソフトウェアRAIDで最も多い事故は「片方が壊れていたのに誰も気づかず、もう片方が壊れて全損」です。RAID 1は1本壊れても何事もなく動き続けるため、監視がなければ故障に気づけません。mdadm --monitor(多くのディストリビューションではmdmonitorサービスとして常駐)に通知先メールを設定するか、/proc/mdstatを監視ツールで定期的に確認する仕組みを必ず入れてください。

LVMの3層構造と拡張手順

PV・VG・LVの関係

LVM(Logical Volume Manager)は、物理ディスクとファイルシステムのあいだに抽象層を挟み、容量の追加や分割を柔軟にする仕組みです。3つの概念で構成されます。

  • PV(Physical Volume):LVMの材料となる物理ディスクやパーティション、RAIDアレイ(/dev/md0もPVにできます)
  • VG(Volume Group):複数のPVを束ねた容量のプール
  • LV(Logical Volume):VGから切り出した論理的なディスク。ここにファイルシステムを作ってマウントします

この構造により、「ディスクを追加してVGに入れれば、LVを後から広げられる」「1つのVGから/var/lib/mysql用と/var/log用のLVを別々に切り出し、ログの肥大化がDBを圧迫しないようにする」といった運用が可能になります。RAIDが「壊れないようにする」技術なら、LVMは「後から変えられるようにする」技術です。

無停止で容量を拡張する

LVMの最大の利点は、サービスを止めずに容量を増やせることです。新しいディスク/dev/sddを追加して、既存のLVを拡張する手順は次のとおりです。

# 現状確認
sudo pvs; sudo vgs; sudo lvs

# 新ディスクをPV化してVGに追加
sudo pvcreate /dev/sdd
sudo vgextend vg_data /dev/sdd

# LVを50GB拡張し、ファイルシステムも同時に拡張(-r)
sudo lvextend -r -L +50G /dev/vg_data/lv_mysql

# VGの空き全部を使う場合
sudo lvextend -r -l +100%FREE /dev/vg_data/lv_mysql

df -h /var/lib/mysql

-r--resizefs)を付けると、ext4ならresize2fs、XFSならxfs_growfsを自動で呼び出してくれます。付け忘れるとLVは広がってもファイルシステムが古いサイズのままで「拡張したのに容量が増えない」状態になるので注意してください。またLVMにはスナップショット機能もあり、lvcreate -sで取得した瞬間の状態を固定してからバックアップを取ることで、DBファイルの整合性を保ったコピーが作れます。

クラウドのブロックストレージとの対応関係

EBS・永続ディスクではRAIDの意味が変わる

AWSのEBS、GCPの永続ディスク、AzureのManaged Disksといったクラウドのブロックストレージは、クラウド側で複数の物理ディスクに複製されており、ディスク1本の物理故障はユーザーからは見えません。そのため冗長性のためのRAID 1/5/6は不要です。代わりに、複数ボリュームをRAID 0で束ねてIOPSやスループットを合算する使い方が残っていますが、ボリュームサイズやタイプで性能を上げられる現在では必要な場面は限られます。

冗長化の役割はスナップショット(EBSスナップショット等)とマルチAZ配置に置き換わります。ただしスナップショットはあくまでバックアップであり、「RAIDはバックアップではない」の裏返しとして、「クラウドの複製も誤操作からは守ってくれない」点は変わりません。

LVMはクラウドでも有効

一方、LVMはクラウドでも十分に役立ちます。EBSは稼働中にサイズを拡張できますが、その後にパーティションとファイルシステムを広げる作業が必要で、LVMを挟んでおけばlvextend -rで一貫した手順になります。また複数の小さなボリュームをVGにまとめて用途別のLVを切る、といった設計もそのまま使えます。EC2の運用でデータ領域を別ボリュームにするなら、最初からLVMにしておくと後の変更が楽です。ブロックストレージとオブジェクトストレージの使い分けはストレージの種類の解説で扱います。

トラブル事例:RAID 1なのに全データを失った

症状:社内のファイルサーバー(RAID 1)が突然起動しなくなり、両方のディスクが認識されない。

原因:調べると、片方のディスクは8か月前に故障して[U_]状態になっており、その間ずっと1本だけで稼働していた。監視もメール通知も設定されておらず、誰も気づかないまま2本目が故障した。バックアップは「RAIDだから大丈夫」という理由で取られていなかった。

対処:専門業者によるデータ復旧で一部を回収したが、完全には戻らなかった。再発防止として、mdmonitorのメール通知と監視ツールでの/proc/mdstatチェックを設定し、外部ストレージへの日次バックアップと月1回の復元テストを運用に組み込んだ。冗長化は「気づいて交換する」までがセットであり、監視のないRAIDは冗長化として機能していない、というのがこの事例の教訓です。

まとめ

RAIDはディスクの物理故障に備える冗長化技術で、小規模ならRAID 1、性能と堅牢性を両立するならRAID 10、大容量ならRAID 6が基本線です。ただし誤操作やランサムウェアには無力なので、バックアップは別に必要です。LVMはPV・VG・LVの3層で容量を抽象化し、lvextend -rによる無停止拡張とスナップショットを提供します。クラウドではブロックストレージ自体が複製されているため冗長化目的のRAIDは不要になりますが、LVMによる拡張のしやすさは引き続き有効です。まずは自分のサーバーでcat /proc/mdstatlvsを実行し、現在の構成と監視の有無を確認してみてください。

ストレージ構成の設計やバックアップ運用の整備でお困りの際は、Harmonic Societyのシステム開発・インフラ支援にご相談ください。

#RAID#LVM#ストレージ#冗長化

Harmonic Society

この記事の内容、自社の業務でも活かせそうですか?

ローカルLLM・AI・クラウドなどの技術導入を、要件整理からPoC・社内展開まで代表エンジニアが伴走します。オンライン対応・全国OK。まずは30分の無料相談から。売り込みはしません。

共有:
無料メルマガ

週1回、最新の技術記事をお届け

AI・クラウド・開発の最新記事を毎週月曜にメールでお届けします。登録は無料、いつでも解除できます。

プライバシーポリシーに基づき管理します

関連記事

Related / 9 articles

  1. プログラミング

    DDoS攻撃の仕組みと対策入門|レイヤー別の防御とCDN・クラウドの活用

    DDoS攻撃をボリューム型・プロトコル型・アプリ層に分けて仕組みを解説し、自前サーバーで防げない理由、CloudflareやAWS Shieldの標準防御、オリジンIPの隠し方、レートリミットとBot対策、攻撃を受けたときの初動、費用が跳ね上がるDenial of Walletへの備えまでわかります。

  2. プログラミング

    WAFとは?仕組み・導入パターン・誤検知対策|Webアプリを攻撃から守る実践ガイド

    WAFがファイアウォールやIDSと何が違うのか、シグネチャとマネージドルールの仕組み、Cloudflare WAF・AWS WAF・ModSecurityの比較、フォーム送信がブロックされる誤検知の調査と例外設定、ログ監視、WAFが代替できないことまで実践的に解説します。

  3. プログラミング

    セキュリティヘッダー入門|CSP・HSTS・X-Frame-Optionsの設定と効果を実践解説

    CSP・HSTS・X-Frame-Options・X-Content-Type-Optionsなど主要セキュリティヘッダーが防ぐ攻撃と、CSPのReport-Onlyからの段階導入、nonce/hash、HSTS preloadの不可逆リスク、Nginx・Next.js・Astroでの設定例、確認方法を解説します。

  4. プログラミング

    クラウドの通信費(Egress)入門|データ転送量課金の仕組みと転送コストを抑える設計

    クラウドの「受信無料・送信有料」の原則、AZ間・リージョン間・インターネット向けの単価差、NATゲートウェイ処理料の罠、CDNで転送量を減らす方法、バックアップやログ転送の見落とし、請求書で転送料を特定する手順を解説。想定外の請求を防げます。

  5. プログラミング

    秘密情報をGitに入れない仕組み|.gitignore・git-secrets・履歴から漏れた鍵の削除

    APIキーや.envをGitにコミットしてしまう典型経路と、.gitignore・.env.exampleの運用、pre-commitでのgitleaks検知、GitHub secret scanningの活用、漏れた鍵の無効化と履歴書き換え(git filter-repo)の手順を解説。仕組みで再発を防げます。

  6. プログラミング

    開発・ステージング・本番環境の分離設計|環境差分をなくす構成とアクセス制御

    開発・ステージング・本番それぞれの目的と、構成をコードで揃える方法、環境別の設定注入、本番データを使わないテストデータ戦略、ステージングの保護(Basic認証・IP制限・noindex)、コストを抑える運用までを解説。環境差分による本番障害を防げます。

  7. プログラミング

    ngrok・Cloudflare Tunnelでローカルを公開|Webhook開発とデモ環境の作り方

    NAT内のローカル環境にStripeやLINEのWebhookを届けるトンネリングの仕組みを解説。ngrok・Cloudflare Tunnel・localtunnelの比較、固定ドメインと認証、リクエスト検査、公開時のセキュリティ、自宅サーバー公開への応用までわかります。

  8. プログラミング

    ローカル開発環境のHTTPS化|mkcert・hostsファイル・自己署名証明書の正しい使い方

    ローカル開発をHTTPS前提にすべき理由(Secure Cookie・Service Worker・OAuth)と、mkcertでローカルCAを作りhostsで独自ドメインを割り当ててVite・Next.js・Dockerで使う手順を解説。証明書警告を無視する癖の危険も理解できます。

  9. プログラミング

    localhost・0.0.0.0・127.0.0.1の違い|ポートとUnixソケットを理解して「つながらない」を解決

    localhost・127.0.0.1・0.0.0.0の意味の違い、Dockerで外から接続できない原因、host.docker.internal、ポート競合の調べ方、Unixソケットの利点と権限、1024未満ポートの制約を解説。「つながらない」を仕組みから解決できます。

Harmonic Society

「読んで終わり」にせず、自社の業務で試してみませんか?

AI・ローカルLLM・クラウドの導入を、要件整理からPoC・社内展開まで代表エンジニアが伴走します。オンライン対応・全国OK・売り込みなし。

無料・30分・オンラインOK|1営業日以内に返信します