ハードウェアRAIDカードがない自社サーバーや、クラウドのアタッチドディスクを束ねる場面で誰もが直面する課題です。
Linuxには標準で mdadmコマンド によるソフトウェアRAIDが用意されており、追加コストなしで冗長化を組めます。
ただし「組んだけれど監視していない」「壊れたあとに何をすべきか分からない」状態が一番危険です。
この記事では、mdadmコマンドの基本操作から、RAID1(ミラーリング)の作成、/proc/mdstatでの状態確認、ディスク障害発生時の復旧手順までを実例付きで解説します。
実行環境:RHEL 9.4 / Ubuntu 24.04 LTSで動作確認済みです。
この記事のポイント
・mdadm --create でRAID1/5/6を即座に構築できる
・/proc/mdstatとmdadm --detailで状態を常時監視する
・障害ディスクは --fail → --remove → --add の3ステップで交換する
・/etc/mdadm.confへの保存とinitramfs更新を忘れない
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
mdadmとは何か?ハードウェアRAIDとの違い
mdadmはLinuxカーネルのMD(Multiple Devices)ドライバを操作するためのコマンドです。複数のブロックデバイスをまとめて1つの仮想デバイス(/dev/md0など)として扱い、RAID0/1/5/6/10などの構成を組めます。
ハードウェアRAIDカードを使わず、CPUとメモリで冗長化を実現するのが特徴です。
| 比較項目 | ソフトウェアRAID(mdadm) | ハードウェアRAID |
|---|---|---|
| 追加コスト | 不要(OS標準) | RAIDカード購入が必要 |
| CPU負荷 | あり(パリティ計算など) | カード側で処理 |
| 移植性 | 高い(別マシンに繋いで再認識可) | 同型RAIDカード必須 |
| BIOS/UEFI起動 | /bootは別途配慮が必要 | 透過的に起動可 |
| 監視のしやすさ | /proc/mdstatで誰でも確認可 | ベンダー専用ツールが必要 |
RAIDアレイを別サーバーに繋ぎ替えても自動で認識される点は、障害時の救済策として非常に有効です。
mdadmの基本的な使い方
1. インストールと事前確認
mdadmは多くのディストリビューションで標準パッケージとして提供されますが、最小インストール構成では入っていない場合があります。本番投入前に必ずインストール状況を確認しましょう。
# RHEL / Rocky Linux / AlmaLinux $ sudo dnf install mdadm # Ubuntu / Debian $ sudo apt install mdadm # バージョン確認 $ mdadm --version mdadm - v4.2 - 2021-12-30 # 利用可能なブロックデバイスを確認 $ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 30G 0 disk └─sda1 8:1 0 30G 0 part / sdb 8:16 0 10G 0 disk sdc 8:32 0 10G 0 disk
2. RAID1(ミラーリング)の作成
最もよく使うのがRAID1です。2本のディスクに同じデータを書き込むことで、片方が壊れてもサービスを止めずに続行できます。
# /dev/sdb と /dev/sdc を使ってRAID1を作成 $ sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc mdadm: Note: this array has metadata at the start and may not be suitable as a boot device. Continue creating array? y mdadm: Defaulting to version 1.2 metadata mdadm: array /dev/md0 started. # 同期状況を確認(初回はバックグラウンドで同期処理が走る) $ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc[1] sdb[0] 10476544 blocks super 1.2 [2/2] [UU] [====>................] resync = 22.4% (2348224/10476544) finish=0.7min speed=174681K/sec unused devices:
片方が落ちると `[U_]` や `[_U]` に変わるので、監視で検知すべき重要な記号です。
3. ファイルシステム作成とマウント
RAIDアレイは通常のブロックデバイスとして扱えます。mkfsでファイルシステムを作成し、マウントすればすぐに使えます。
# XFSでフォーマット(RHEL系の標準) $ sudo mkfs.xfs /dev/md0 meta-data=/dev/md0 isize=512 agcount=4, agsize=654784 blks data = bsize=4096 blocks=2619136, imaxpct=25 ... # マウントポイントを作成して手動マウント $ sudo mkdir -p /data $ sudo mount /dev/md0 /data # 確認 $ df -h /data Filesystem Size Used Avail Use% Mounted on /dev/md0 10G 80M 9.9G 1% /data
応用・実務Tips
1. /etc/mdadm.confに設定を保存する
mdadmは起動時に /etc/mdadm.conf(Ubuntu系は /etc/mdadm/mdadm.conf)を読んでアレイを再構成します。保存を忘れると再起動後にデバイス名が変わったり、アレイが認識されないことがあります。
# 現在の構成をmdadm.confへ書き出す(RHEL系) $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf ARRAY /dev/md0 metadata=1.2 name=rhel9.local:0 UUID=4f1c5a8e:3a2bd9c7:1e8f55a2:c0d3b9a1 # Ubuntu系 $ sudo mdadm --detail --scan | sudo tee -a /etc/mdadm/mdadm.conf # initramfsを更新(再起動後にRAIDが認識されるように) $ sudo dracut -f # RHEL系 # または $ sudo update-initramfs -u # Ubuntu系
特に「RAIDを組んでから初めての再起動」の前には必ず実施してください。
2. 詳細な状態確認
/proc/mdstat はサマリ表示ですが、トラブル調査時は --detail でデバイスごとの状態を見るほうが確実です。$ sudo mdadm --detail /dev/md0 /dev/md0: Version : 1.2 Creation Time : Sun May 4 14:22:11 2026 Raid Level : raid1 Array Size : 10476544 (9.99 GiB 10.73 GB) Used Dev Size : 10476544 (9.99 GiB 10.73 GB) Raid Devices : 2 Total Devices : 2 Persistence : Superblock is persistent Update Time : Sun May 4 14:25:48 2026 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Number Major Minor RaidDevice State 0 8 16 0 active sync /dev/sdb 1 8 32 1 active sync /dev/sdc
crontabでこのコマンドを毎時実行し、出力をmail通知する仕組みを作っておくと安心です。
3. RAID5・RAID6の作成例
容量効率を重視するならRAID5(パリティ1台分犠牲)や、二重障害耐性のRAID6(パリティ2台分犠牲)を選びます。# RAID5 (3本以上、1本のパリティ) $ sudo mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd # RAID6 (4本以上、2本のパリティ) $ sudo mdadm --create /dev/md2 --level=6 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde # RAID10 (4本以上、ストライプ + ミラーリング) $ sudo mdadm --create /dev/md3 --level=10 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
「ディスクが故障した時」の対処法
mdadm運用で一番大事なのが障害復旧の手順です。本番環境で一度も練習せずに本番障害を迎えると、焦ってディスクを取り違える事故が起きます。
1. 障害発生の検知
ディスクが落ちると /proc/mdstat の表示が変わります。$ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdc[1] sdb[0](F) 10476544 blocks super 1.2 [2/1] [_U] unused devices:
この状態は冗長性ゼロ、つまりもう片方が落ちた瞬間にデータロスです。即時対応してください。
2. 故障ディスクの取り外し
mdadmのアレイから故障ディスクを論理的に切り離します。# 自動でFailedになっていない場合は手動で--failを宣言する $ sudo mdadm /dev/md0 --fail /dev/sdb mdadm: set /dev/sdb faulty in /dev/md0 # アレイから取り外す $ sudo mdadm /dev/md0 --remove /dev/sdb mdadm: hot removed /dev/sdb from /dev/md0 # 物理交換できるかどうかはサーバー仕様次第 # クラウドVMならアタッチドディスクをデタッチ→新しいディスクをアタッチ
複数本同型ディスクが並んでいる現場では、誤って正常なディスクを抜く事故が後を絶ちません。
3. 新しいディスクの追加と再同期
新しいディスクをアレイに追加すると、自動で再同期(resync/recovery)が始まります。# 新しいディスクをアレイに追加 $ sudo mdadm /dev/md0 --add /dev/sdb mdadm: added /dev/sdb # 再同期の進捗を確認 $ cat /proc/mdstat Personalities : [raid1] md0 : active raid1 sdb[2] sdc[1] 10476544 blocks super 1.2 [2/1] [_U] [===>.................] recovery = 18.5% (1937856/10476544) finish=1.2min speed=116752K/sec unused devices:
本番環境ではこの再同期中もディスクI/Oがある程度発生するため、夜間など負荷の少ない時間帯に交換することを推奨します。
「mdadm: cannot open /dev/sdX: Device or resource busy」エラーの対処法
新規RAID作成時によく遭遇するエラーです。過去に別のRAIDで使われていた、もしくはLVMやファイルシステムの残骸が残っているのが原因です。
# 残存しているRAIDメタデータの確認 $ sudo mdadm --examine /dev/sdb /dev/sdb: Magic : a92b4efc Version : 1.2 Feature Map : 0x0 Array UUID : ea1d2c3b:b4f8e7a9:0c2d3e4f:9a8b7c6d ... # RAIDスーパーブロックを消す $ sudo mdadm --zero-superblock /dev/sdb # それでも開けない場合、LVMのpvが残っていないか確認 $ sudo pvs $ sudo wipefs -a /dev/sdb # ファイルシステムシグネチャも消す
Linuxの基本コマンドの読み方に不安がある方は Linux 基本コマンドの解説 も合わせて参照することをおすすめします。
本記事のまとめ
mdadmはLinuxの冗長化運用に欠かせないコマンドです。構築よりも「監視」と「復旧」が本番運用では重要になります。
| やりたいこと | コマンド |
|---|---|
| RAID1を作成する | sudo mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc |
| RAID5を作成する | sudo mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sdb /dev/sdc /dev/sdd |
| 状態を確認する(サマリ) | cat /proc/mdstat |
| 状態を確認する(詳細) | sudo mdadm --detail /dev/md0 |
| 故障ディスクを切り離す | sudo mdadm /dev/md0 --fail /dev/sdb && sudo mdadm /dev/md0 --remove /dev/sdb |
| 新しいディスクを追加する | sudo mdadm /dev/md0 --add /dev/sdb |
| RAID構成を保存する | sudo mdadm --detail --scan | sudo tee -a /etc/mdadm.conf |
| RAIDメタデータを消去する | sudo mdadm --zero-superblock /dev/sdb |
作成直後に必ず障害シナリオを試験し、--fail/--remove/--addの3ステップを手に染み込ませておくこと。これが本番障害を救う最大の備えです。
RAIDを組んだのに、いざ障害が起きると手が止まってしまいませんか?
mdadmの作成・監視・復旧は、現場で本番障害を救う基礎スキルです。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:set -xコマンドでシェルスクリプトをデバッグする方法|set -e・set -uとの組み合わせも
- 前のページへ:iotopコマンドでディスクI/Oを使うプロセスを特定する方法|iostatとの違いやインタラクティブ操作も
- この記事の属するカテゴリ:Linuxtips・ディスク・デバイス管理コマンドへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます