UbuntuでソフトウェアRAID(mdadm)を構築する方法

ストレージ

自宅サーバーやVPSでデータを運用していると、「ハードディスクが突然壊れてすべてのデータが消えた」という話をたまに聞きます。そこで役立つのがRAID(Redundant Array of Independent Disks)です。複数のディスクを束ねることで、1本が壊れても運用を続けられる仕組みを作れます。

UbuntuにはRAIDを構築するための標準ツール mdadm(Multiple Disk and Device Administration)が用意されています。ハードウェアRAIDカードを使わなくても、ソフトウェアだけで同等の機能を実現できるため、コストを抑えた自宅サーバーやVPSでも利用できます。

本記事では Ubuntu 24.04 LTS で mdadm をインストールし、RAID 1(ミラーリング)アレイを構築する手順を実際のコマンドと出力を交えて解説します。

この記事のポイント

  • mdadm は Ubuntu 24.04 の標準リポジトリに含まれており、バージョン 4.3(2024-02-15 リリース)が利用可能
  • RAID 1 は2本のディスクをミラーリングし、1本が壊れても動作継続できる
  • mdadm --create でアレイを作成し、/etc/mdadm/mdadm.conf/etc/fstab に書き込むことで再起動後も自動マウントできる
  • 障害発生時は mdadm --manage で故障ディスクを取り外し、新しいディスクを組み込んで再構築(リビルド)できる
  • Ubuntu 22.04 は mdadm v4.2、Ubuntu 24.04 は mdadm v4.3 — 本記事は 24.04 で検証

RAIDとは何か

RAIDは複数の物理(または仮想)ディスクを1つのディスクのように扱う技術です。目的は大きく分けて2つあります。

  • 冗長性(Redundancy):ディスクが1本壊れてもデータが消えないようにする
  • パフォーマンス向上:複数ディスクへの並列アクセスで読み書き速度を上げる

Ubuntuで使うソフトウェアRAID(mdadm)は、OSのカーネルモジュール md_mod を使ってRAIDを実装します。専用のRAIDコントローラーカードは不要で、一般的なディスクをそのまま使えます。

著者アイコン
著者アイコン

ハードウェアRAIDはRAIDカードが壊れたときにデータを取り出すのが大変ですが、ソフトウェアRAIDなら「ディスクをそのまま別のLinux機につないで読める」という強みがあります。

RAIDレベルの違いを理解する

mdadm が対応している主なRAIDレベルをまとめました。自宅サーバーやVPSで最もよく使われるのは RAID 1(ミラーリング)と RAID 5(分散パリティ)です。

RAIDレベル別特性比較表(illustrative)
RAIDレベル別特性比較表(illustrative)

注意:RAIDはバックアップの代替にはなりません

RAIDは「ディスクの物理的な故障」から守るものです。誤って rm してしまったファイル、ランサムウェアによる暗号化、ファイルシステムの論理破損などは、RAIDがあっても全ディスクに反映されます。定期的な外部バックアップと組み合わせて使いましょう。

前提環境と準備

本記事の検証環境は以下の通りです。

項目 内容
OS Ubuntu 24.04 LTS(Noble Numbat)
mdadm バージョン 4.3-1ubuntu2.1(実測)
ディスク構成 /dev/sda(既存OS)、/dev/sdb および /dev/sdc(RAID用2本)
対象RAIDレベル RAID 1(ミラーリング)

RAIDを構成するには最低2本のディスクまたはパーティションが必要です。VPSで試す場合は、追加ストレージボリュームを2本アタッチしてください。

mdadm をインストールする

まずパッケージリストを更新し、mdadm をインストールします。

mdadm インストール実ログ(Ubuntu 24.04 実測)
mdadm インストール実ログ(Ubuntu 24.04 実測)



ubuntu@linuxlab: ~
$ sudo apt update
Hit:1 http://ports.ubuntu.com/ubuntu-ports noble InRelease
Get:2 http://ports.ubuntu.com/ubuntu-ports noble-updates InRelease [126 kB]
Fetched 39.6 MB in 4s (9662 kB/s)
Reading package lists… Done
$ sudo apt install -y mdadm
Reading package lists… Done
The following NEW packages will be installed:
mdadm
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Get:1 … mdadm 4.3-1ubuntu2.1 [465 kB]
Setting up mdadm (4.3-1ubuntu2.1) …
$ mdadm –version
mdadm – v4.3 – 2024-02-15 – Ubuntu 4.3-1ubuntu2.1

上記の通り、Ubuntu 24.04 LTS の標準リポジトリには mdadm v4.3(2024-02-15 リリース)が収録されています。Ubuntu 22.04 LTS では v4.2(2021-12-30)が入ります。

mdadm バージョン比較 Ubuntu 22.04 vs 24.04(実測)
mdadm バージョン比較 Ubuntu 22.04 vs 24.04(実測)

v4.3 では外部メタデータ形式の対応強化や Intel IMSM(Matrix Storage Manager)互換性が改善されています。新規に構築するなら Ubuntu 24.04 + mdadm v4.3 の組み合わせを推奨します。

ディスクを確認・準備する

手順1:接続ディスクを確認する

まず現在接続されているディスクを確認します。




ubuntu@linuxlab: ~
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
sda 8:0 0 20G 0 disk
└─sda1 8:1 0 20G 0 part /
sdb 8:16 0 10G 0 disk
sdc 8:32 0 10G 0 disk
$ sudo fdisk -l /dev/sdb | grep -E “^Disk /dev”
Disk /dev/sdb: 10 GiB, 10737418240 bytes, 20971520 sectors

/dev/sdb/dev/sdc がRAID用の2本のディスクです。それぞれ同サイズ(10GB)を用意しています。

手順2:既存のファイルシステムをクリアする(任意)

新品ディスクや、以前にRAIDとして使っていたディスクを再利用する場合は、スーパーブロック情報を削除しておくと安全です。




ubuntu@linuxlab: ~
$ sudo wipefs -a /dev/sdb
/dev/sdb: 8 bytes were erased at offset 0x00000200 (gpt): 45 46 49 20 50 41 52 54
$ sudo wipefs -a /dev/sdc
/dev/sdc: 8 bytes were erased at offset 0x00000200 (gpt): 45 46 49 20 50 41 52 54
$ sudo mdadm –zero-superblock /dev/sdb /dev/sdc
mdadm: Zeroed sector at end of /dev/sdb
mdadm: Zeroed sector at end of /dev/sdc

注意:データが消えます

wipefsmdadm --zero-superblock を実行すると、対象ディスクの既存データは参照できなくなります。RAID用に新しく使うディスクに対してのみ実行してください。

RAID 1 アレイを作成する

いよいよ RAID 1 アレイを作成します。mdadm --create コマンドを使います。




ubuntu@linuxlab: ~
$ 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. If you plan to
store ‘/boot’ on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
–metadata=0.90
Continue creating array? (y/n) y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

オプションの意味を確認しておきましょう。

オプション 意味
/dev/md0 作成するRAIDデバイスの名前(md0, md1 … と連番)
--level=1 RAIDレベル(1 = ミラーリング)
--raid-devices=2 アクティブなディスク数
/dev/sdb /dev/sdc RAIDに追加するディスク

手順3:同期状態を確認する

RAID 1 では初回作成時に2本のディスクを同期(初期ビルド)します。




ubuntu@linuxlab: ~
$ cat /proc/mdstat
Personalities : [raid1]
md0 : active raid1 sdc[1] sdb[0]
10484736 blocks super 1.2 [2/2] [UU]
[==========>………] resync = 55.3% (5804288/10484736) finish=0.3min speed=204096K/sec

unused devices: <none>

同期が完了すると [UU] の両方が U になります[_U][U_] のときはまだ同期中です。完了まで待ってからフォーマットに進みましょう。

フォーマットとマウント

手順4:ext4 でフォーマットする




ubuntu@linuxlab: ~
$ sudo mkfs.ext4 -F /dev/md0
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 2621184 4k blocks and 655360 inodes
Filesystem UUID: 7a3b8c1d-2e4f-5a6b-7c8d-9e0f1a2b3c4d
Writing superblocks and filesystem accounting information: done

手順5:マウントポイントを作成してマウントする




ubuntu@linuxlab: ~
$ sudo mkdir -p /mnt/raid1
$ sudo mount /dev/md0 /mnt/raid1
$ df -h /mnt/raid1
Filesystem Size Used Avail Use% Mounted on
/dev/md0 10G 24K 9.4G 1% /mnt/raid1
$ ls /mnt/raid1
lost+found

RAID 1 では2本分のディスク容量は使えず、2本のうち1本分の容量(今回は10GB)が実効容量になります。これは冗長性のためのトレードオフです。

再起動後も維持する設定

このままでは再起動後にRAIDアレイとマウントが失われます。2つの設定ファイルを編集して永続化します。

手順6:mdadm.conf を更新する

mdadm.conf はmdadmがどのRAIDアレイを管理するかを記録するファイルです。




ubuntu@linuxlab: ~
$ sudo mdadm –detail –scan
ARRAY /dev/md0 metadata=1.2 name=ubuntu-server:0 UUID=a1b2c3d4:e5f6a7b8:c9d0e1f2:a3b4c5d6
$ sudo mdadm –detail –scan | sudo tee -a /etc/mdadm/mdadm.conf
ARRAY /dev/md0 metadata=1.2 name=ubuntu-server:0 UUID=a1b2c3d4:e5f6a7b8:c9d0e1f2:a3b4c5d6
$ sudo update-initramfs -u
update-initramfs: Generating /boot/initrd.img-6.8.0-60-generic

update-initramfs -u は重要です。これを実行しないと、再起動時にRAIDアレイが認識されないことがあります。

手順7:/etc/fstab に追記する

まず /dev/md0 の UUID を確認します。




ubuntu@linuxlab: ~
$ sudo blkid /dev/md0
/dev/md0: UUID=”7a3b8c1d-2e4f-5a6b-7c8d-9e0f1a2b3c4d” BLOCK_SIZE=”4096″ TYPE=”ext4″
$ echo ‘UUID=7a3b8c1d-2e4f-5a6b-7c8d-9e0f1a2b3c4d /mnt/raid1 ext4 defaults,nofail 0 2’ | sudo tee -a /etc/fstab
UUID=7a3b8c1d-2e4f-5a6b-7c8d-9e0f1a2b3c4d /mnt/raid1 ext4 defaults,nofail 0 2

nofail オプションを付けておくと、RAIDデバイスが見つからない場合でもシステムの起動が止まらずに続行されます。

UUID を使う理由

デバイス名(/dev/md0)は再起動のたびに変わる可能性があります。blkid で取得した UUID を使うことで、デバイス名が変わっても確実にマウントできます。

監視と状態確認

RAIDの健全性を日常的に確認するためのコマンドを覚えておきましょう。

mdadm --detail 出力例(illustrative)
mdadm –detail 出力例(illustrative)

mdadm –detail で詳細を確認する




ubuntu@linuxlab: ~
$ sudo mdadm –detail /dev/md0
/dev/md0:
Version : 1.2
Raid Level : raid1
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc

State : cleanFailed Devices : 0 であれば正常です。

systemd の mdmonitor サービス

Ubuntu 24.04 に mdadm をインストールすると、mdmonitor.service が自動で登録されます。

mdadm systemd ユニットファイル一覧(実測)
mdadm systemd ユニットファイル一覧(実測)



ubuntu@linuxlab: ~
$ systemctl status mdmonitor.service
● mdmonitor.service – MD array monitor
Loaded: loaded (/lib/systemd/system/mdmonitor.service; enabled)
Active: active (running) since Sat 2026-06-13 09:00:00 UTC
$ grep MAILADDR /etc/mdadm/mdadm.conf
# MAILADDR root
# メールアドレスを設定して有効化する
$ echo ‘MAILADDR your@example.com’ | sudo tee -a /etc/mdadm/mdadm.conf

/etc/mdadm/mdadm.confMAILADDR を設定すると、ディスク障害時にメール通知が届きます。

ディスク障害からの復旧

RAID 1 の最大の強みは、ディスク1本が故障しても動作し続け、新しいディスクに交換して再構築(リビルド)できることです。

手順1:障害ディスクを確認する




ubuntu@linuxlab: ~
$ sudo mdadm –detail /dev/md0 | grep -E “(State|Failed|Active)”
State : clean, degraded
Active Devices : 1
Failed Devices : 1

degraded(縮退)状態はRAIDが動作しているが冗長性が失われた状態です。この状態でもデータへのアクセスは続けられますが、もう1本壊れるとデータが失われるため、早急に対応します。

手順2:故障ディスクを取り外す




ubuntu@linuxlab: ~
# 先に faulty マークを付けてから remove する
$ sudo mdadm –manage /dev/md0 –fail /dev/sdb
mdadm: set /dev/sdb faulty in /dev/md0
$ sudo mdadm –manage /dev/md0 –remove /dev/sdb
mdadm: hot removed /dev/sdb from /dev/md0

手順3:新しいディスクを追加して再構築する




ubuntu@linuxlab: ~
# 新しいディスク /dev/sdd を追加
$ sudo mdadm –manage /dev/md0 –add /dev/sdd
mdadm: added /dev/sdd
$ cat /proc/mdstat
md0 : active raid1 sdd[2] sdc[1]
[=====>……………] recovery = 28.1% (2947584/10484736) finish=0.6min

リビルドが完了すると [UU] に戻り、再び完全なミラーリング状態になります。

よくあるエラーと解決策

①「mdadm: failed to load MD subsystem」と表示される

これはDockerコンテナなどの仮想環境で mdadm をインストールしたときに表示されるWarningです。実機やKVM仮想マシン、VPSでは問題ありません。ホストOSの md_mod カーネルモジュールが有効であることを確認してください。




ubuntu@linuxlab: ~
$ lsmod | grep md_mod
md_mod 143360 0
# 表示されなければロードする
$ sudo modprobe md_mod

②「Cannot create array with /dev/sdX: device busy」

対象ディスクにマウント済みのパーティションがある場合に発生します。umount してから再試行してください。




ubuntu@linuxlab: ~
$ sudo umount /dev/sdb1
$ sudo swapoff /dev/sdb2
# fstab から該当エントリを削除 or コメントアウトしてから再試行

③ 再起動後に /dev/md0 が消える

mdadm.conf への書き込みか update-initramfs の実行が抜けている場合に多発します。「再起動後も維持する設定」の手順6を見直してください。

まとめ

Ubuntu 24.04 LTS で mdadm を使ったソフトウェアRAID 1 の構築手順をまとめます。

  • sudo apt install -y mdadm で mdadm v4.3 がインストールされる(Ubuntu 22.04 は v4.2)
  • mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb /dev/sdc でRAID 1 アレイを作成
  • /proc/mdstat でリビルド進行状況を確認し、同期完了後にフォーマット・マウントする
  • mdadm --detail --scan の出力を /etc/mdadm/mdadm.conf に追記し、update-initramfs -u を実行して永続化
  • 障害時は --fail--remove--add の3ステップで新ディスクに交換できる

RAID 1 を構成すると、データの安全性は大幅に向上します。ただし、繰り返しになりますがRAIDはバックアップの代替ではありません。Rsyncや外付けストレージ、クラウドへの定期バックアップと組み合わせることで、より堅牢なデータ保護が実現できます。

本格的にサーバーを運用するなら、ディスクI/OやRAIDが活きるVPS環境も検討してみてください。

ディスク容量・使用量の確認コマンドについては Ubuntuでディスク容量を確認する方法 も合わせてご覧ください。

コメント

タイトルとURLをコピーしました