Linux
 Computer >> コンピューター >  >> システム >> Linux

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

mdadm(multiple disks admin)は、Linux上でソフトウェアRAIDを作成・管理するための標準的なツールです。本記事では、mdadmを使用してRAIDアレイを構築する方法、ディスクの追加・管理、ホットスペアの設定、障害発生時の復旧手順まで、実例とともに詳しく解説します。

mdadmのインストール方法

まずは使用しているディストリビューションに応じて、以下のコマンドでmdadmをインストールします。

  • CentOS / Red Hat系(yum/dnf):yum install mdadm
  • Ubuntu / Debian系:apt-get install mdadm

インストールを実行すると、mdadm本体と依存ライブラリが導入されます。

Running transaction
Installing : libreport-filesystem-2.1.11-43.el7.centos.x86_64 1/2
Installing : mdadm-4.1-1.el7.x86_64 2/2
Verifying : mdadm-4.1-1.el7.x86_64 1/2
Verifying : libreport-filesystem-2.1.11-43.el7.centos.x86_64 2/2
Installed:
mdadm.x86_64 0:4.1-1.el7
Dependency Installed:
libreport-filesystem.x86_64 0:2.1.11-43.el7.centos
Complete!

2台のディスクでRAID 1(ミラー)を作成する

ここでは、サーバーに増設した2台の空きディスク(vdbとvdc)を使って、ソフトウェアミラー(RAID1)を構成します。まず、RAIDに組み込むディスク上のスーパーブロックをすべてゼロクリアしておきます。

# mdadm --zero-superblock --force /dev/vd{b,c}

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

mdadm: Unrecognised md component device - /dev/vdb
mdadm: Unrecognised md component device - /dev/vdc

このメッセージは「どちらのディスクも過去にRAIDアレイに属していなかった(まっさらな状態である)」ことを示しています。

続いて、2台のディスクから/dev/md0というデバイス名でソフトウェアRAID1を作成します。

# mdadm --create --verbose /dev/md0 -l 1 -n 2 /dev/vd{b,c}

オプションの意味は以下の通りです。

  • -l 1:RAIDレベルの指定(ここではRAID1)
  • -n 2:アレイに組み込むディスクの台数

複数の物理ディスクに処理を分散させて読み書き速度を向上させたい場合は、RAID0(ストライピング)を作成します。

# mdadm --create --verbose /dev/md0 --level=0 --raid-devices=2 /dev/vdb /dev/vdc

3台以上のディスクで冗長性を持たせるRAID 5の場合は次のコマンドです。

# mdadm --create --verbose /dev/md0 --level=5 --raid-devices=3 /dev/vdb /dev/vdc /dev/vdd

コマンド実行後、確認メッセージに同意するとソフトウェアRAIDが作成されます。

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

# lsblkでディスク情報を一覧表示すると、作成されたRAIDデバイス(md0)を確認できます。

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
vda 253:0 0 20G 0 disk
├─vda1 253:1 0 512M 0 part /boot
└─vda2 253:2 0 19.5G 0 part /
vdb 253:16 0 20G 0 disk
└─md0 9:0 0 20G 0 raid1
vdc 253:32 0 20G 0 disk
└─md0 9:0 0 20G 0 raid1

次に、RAID1デバイス上にext4ファイルシステムを作成します。

# mkfs.ext4 /dev/md0

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

マウントポイントとなるディレクトリを作成し、RAIDデバイスをマウントします。

# mkdir /backup
# mount /dev/md0 /backup/
# df -h

Filesystem Size Used Avail Use% Mounted on
.............
.............
/dev/md0 20G 45M 19G 1% /backup

エラーなくマウントできました。毎回手動でマウントしなくて済むよう、/etc/fstabに以下のエントリを追記して自動マウントを設定しましょう。

# nano /etc/fstab

/dev/md0 /backup ext4 defaults 1 2

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

RAIDアレイの状態確認と整合性チェック

アレイ内のデータ整合性をチェックするには、以下のコマンドを実行します。

# echo 'check' > /sys/block/md0/md/sync_action

チェック完了後、次のファイルの出力を確認します。

# cat /sys/block/md0/md/mismatch_cnt

結果が0であれば、アレイに問題はないことを意味します。

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

チェックを中断したい場合は、以下を実行してください。

# echo 'idle' > /sys/block/md0/md/sync_action

サーバー上のすべてのRAIDの状態を確認するには、次のコマンドを使用します。

# cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 vdc[1] vdb[0]
20954112 blocks super 1.2 [2/2] [UU]

[UU]は両方のディスクが正常に稼働していることを表します。特定のRAIDについてより詳細な情報を見るには、以下のコマンドを実行します。

# mdadm -D /dev/md0

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

出力される主な項目の意味は以下の通りです。

  • Version:メタデータのバージョン
  • Creation Time:RAIDの作成日時
  • Raid Level:RAIDレベル
  • Array Size:RAIDの総容量
  • Used Dev Size:各デバイスが使用している容量
  • Raid Device:RAIDを構成するディスク数
  • Total Devices:RAIDに登録されているディスクの総数
  • State:現在の状態(cleanなら正常)
  • Active Devices:稼働中のディスク数
  • Working Devices:正常動作しているディスク数
  • Failed Devices:障害が発生したディスク数
  • Spare Devices:スペアディスクの数
  • Consistency Policy:障害後の同期方式の設定(resyncは復旧時の完全同期。bitmap、journal、pplなどのモードも選択可能)
  • UUID:RAIDアレイの識別子

簡易的な情報はfdiskでも確認できます。

# fdisk -l /dev/md0

Disk /dev/md0: 21.5 GB, 21457010688 bytes, 41908224 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

ディスク障害からの復旧とディスク交換

RAIDを構成するディスクのいずれかに障害が発生した場合は、新しいディスクと交換できます。まず、ディスクが実際に故障しているかどうかを確認しましょう。

# cat /proc/mdstat

Personalities : [raid1]
md0 : active raid1 vdb[0]
20954112 blocks super 1.2 [2/1] [U_]

この出力ではアクティブなディスクが1台のみで、[U_]と表示されています。これは問題が発生していることを意味します。両ディスクが正常な場合は[UU]と表示されます。

詳細情報でも異常が確認できます。

# mdadm -D /dev/md0

/dev/md0:
Version : 1.2
Creation Time : Tue Dec 31 12:39:22 2020
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Dec 31 14:41:13 2020
State : clean, degraded
Active Devices : 1
Working Devices : 1
Failed Devices : 1
State : clean, degraded

最終行の「clean, degraded」は、RAID内の1台のディスクが故障していることを示しています。

この例では/dev/vdcを交換する必要があります。アレイを復旧させるには、故障ディスクを取り外し、新しいディスクを追加します。

故障したドライブをアレイから削除:

# mdadm /dev/md0 --remove /dev/vdc

新しいディスクをアレイに追加:

# mdadm /dev/md0 --add /dev/vdd

新しいディスクを追加すると、自動的に再構築(リビルド)が開始されます。

# mdadm -D /dev/md0

/dev/md0:
Version : 1.2
Creation Time : Tue Dec 31 12:39:22 2020
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Tue Dec 31 14:50:20 2020
State : clean, degraded, recovering
Active Devices : 1
Working Devices : 2
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Rebuild Status : 48% complete
Name : host1:0 (local to host host1)
UUID : 9d59b1fb:7b0a7b6d:15a75459:8b1637a2
Events : 42
Number Major Minor RaidDevice State
0 253 16 0 active sync /dev/vdb
2 253 48 1 spare rebuilding /dev/vdd

「Rebuild Status : 48% complete」が現在の再構築の進捗状況、「spare rebuilding /dev/vdd」が再構築中のディスクを示しています。リビルド完了後、アレイの状態を確認しましょう。

State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0

ソフトウェアRAIDへのディスク追加・削除

作成済みのmdadm RAIDデバイスを削除する必要がある場合は、まずマウントを解除します。

# umount /backup

その後、以下のコマンドでRAIDデバイスを停止します。

# mdadm -S /dev/md0

mdadm: stopped /dev/md0

RAIDアレイを停止すると、個別のディスクデバイスとしては認識されなくなります。

# mdadm -S /dev/md0

mdadm: error opening /dev/md0: No such file or directory

接続されているすべてのドライブをスキャンし、物理ディスク上のメタデータをもとに、以前削除(停止)したRAIDデバイスを再構成することもできます。

# mdadm --assemble --scan

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

稼働中のディスクをアレイから取り外して交換したい場合は、まずそのディスクに故障(fail)フラグを付けます。

# mdadm /dev/md0 --fail /dev/vdc

その後、以下のコマンドで削除できます。

# mdadm /dev/md0 --remove /dev/vdc

新しいディスクの追加は、故障ドライブの交換時と同様の手順で行います。

# mdadm /dev/md0 --add /dev/vdd

ホットスペアディスクの追加方法

ホットスペアディスクを事前に追加しておくと、稼働中のディスクに障害が発生した際に、RAIDアレイを素早く自動再構築できます。空きディスクを対象のmdデバイスに追加します。

# mdadm /dev/md0 --add /dev/vdc

RAIDの状態を確認すると、追加したディスクがスペアとして表示されます。

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

ホットスペアが正しく機能することを確認するため、任意のディスクに故障フラグを付けてRAIDの状態をチェックしてみましょう。

# mdadm /dev/md0 --fail /dev/vdb

確認すると、アレイの再構築が自動的に開始されていることがわかります。

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

/dev/vdbが故障扱いとなり、ホットスペアディスクがアクティブなRAIDディスクの一つに切り替わり、リビルドプロセスが開始されました。

稼働用のディスクをさらに追加してアレイを拡張する場合は、次の2段階の手順が必要です。

まず、空きディスクをアレイに追加します。

# mdadm /dev/md0 --add /dev/vdb

この時点ではディスクはホットスペアとして表示されます。これをアクティブ化するには、md RAIDデバイスを拡張します。

# mdadm -G /dev/md0 --raid-devices=3

すると、アレイの再構築が始まります。

【Linux】mdadmでソフトウェアRAIDを構築・管理する完全ガイド

再構築完了後、すべてのディスクがアクティブになります。

Number Major Minor RaidDevice State
3 253 32 0 active sync /dev/vdc
2 253 48 1 active sync /dev/vdd
4 253 16 2 active sync /dev/vdb

MDADM RAIDアレイの完全削除

ソフトウェアRAIDを恒久的に削除したい場合は、以下の手順に従います。

# umount /backup — アレイをマウントポイントから解除

# mdadm -S /dev/md0 — RAIDデバイスを停止

続いて、アレイを構成していた全ディスクのスーパーブロックをクリアします。

# mdadm --zero-superblock /dev/vdb
# mdadm --zero-superblock /dev/vdc

MdmonitorによるRAID監視とメール通知の設定

mdmonitorデーモンを使用すると、RAIDの状態を常時監視できます。まず、現在のアレイ構成を含む/etc/mdadm.confファイルを作成します。

# mdadm --detail --scan > /etc/mdadm.conf

なお、mdadm.confは自動生成されないため、手動で作成・更新する必要がある点に注意してください。

RAIDに問題が発生した際に通知を受け取る管理者のメールアドレスを、/etc/mdadm.confの末尾に追記します。

MAILADDR raidadmin@example.com

その後、systemctlでmdmonitorサービスを再起動します。

# systemctl restart mdmonitor

これにより、mdadmエラーやディスク障害が発生した際に、システムからメールで通知されるようになります。

非アクティブ(inactive)になったRAIDの復旧

ハードウェア障害や緊急シャットダウンなどが発生すると、ソフトウェアRAIDアレイがinactive(非アクティブ)状態になることがあります。この状態では、すべてのドライブが非アクティブとしてマークされますが、エラー自体は発生していません。

# cat /proc/mdstat

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : inactive vdc[1] vdb[0]
20954112 blocks super
unused devices: <none>

この場合は、まずアレイを停止します。

# mdadm --stop /dev/md0

そして再構成(assemble)します。

# mdadm --assemble --scan --force

mdデバイスが/etc/fstabに登録されている場合は、以下のコマンドで再マウントしてください。

# mount -a

なお、すでにOSがインストール済みの環境に後からソフトウェアRAIDを構成することも可能ですが、その場合はパーティションテーブルの手動コピー、システムディスク内容のRAIDへの移行、initramfsやGRUBブートローダーの修正など、多くの手作業が必要になります。そのため、サーバーのデプロイ時にCentOSのインストーラーでソフトウェアRAIDを選択しておく方が確実です。

mdadmを活用すれば、Linux上でのソフトウェアRAID管理が格段に容易になります。本記事では、mdadmを使ったRAID運用における基本的な操作と、よくある課題への対処法を解説しました。日常的な監視とホットスペアの準備によって、ディスク障害にも迅速に対応できる環境を整えましょう。

  1. Kali Linuxを使ってAndroidスマホにアクセスする方法【Metasploit実践解説】

    Androidスマートフォンは、多くの市販IoT機器への入り口となっています。Nestの煙感知器は専用のAndroidアプリで管理され、Nestサーモスタットも温度調整をアプリから行えます。スマートロックや玄関カメラなど、ほぼすべてのスマートデバイスがAlexaなどのマスターアプリから操作可能です。では、もし第三者がこうしたAndroidスマホへリモートアクセスできてしまったらどうなるでしょうか。「そんなことはあり得ない」と思っていませんか?本記事では、Kali Linuxの「Metasploit」を使ってAndroidスマホにバックドアを作成する仕組みを、基本的なデモ形式で解説します。

  2. Linuxには本当にウイルス対策ソフトが必要?その答えと理由を徹底解説

    「Linuxにはウイルスが存在しない」というのは、よく聞く神話の一つです。しかし一方で、ほとんどの人にとってLinuxでウイルス対策ソフトが不要であるのも事実です。この2つの主張はどうやって両立するのでしょうか?果たして、あなたのLinuxマシンにウイルス対策は本当に必要なのでしょうか? 昨年、Linuxデスクトップへの感染で話題となったEvilGnomeのようなマルウェアの事例も存在しますが、こうしたケースは極めて稀です。結論から言えば、より安全な設計、適切なメンテナンス体制、そして正直に言えば相対的に人気が低いことにより、LinuxはWindowsよりも安全な環境だと言えます。 た