RAID Configuration and Management

RAID 設定と管理 包括的ガイド

目次

  1. はじめに
  2. RAID レベル
  3. ハードウェア RAID vs ソフトウェア RAID
  4. mdadm による RAID 作成
  5. RAID の管理
  6. RAID の監視とアラート
  7. スペアドライブ
  8. RAID リビルドプロセス
  9. RAID のパフォーマンス特性
  10. RAID の縮退とハンドリング
  11. RAID の移行とリシェイプ
  12. トラブルシューティング
  13. ベストプラクティス
  14. 参考文献

1. はじめに

RAID (Redundant Array of Independent Disks) は、複数のディスクを組み合わせて信頼性やパフォーマンスを向上させる技術である。本ガイドでは、Linux における mdadm を使用したソフトウェア RAID の構成、管理、監視について包括的に解説する。

1.1 RAID の目的

目的説明
冗長性ディスク障害時にデータを保護
パフォーマンス読み書き速度の向上
大容量化複数のディスクを結合して大きなボリュームを作成

2. RAID レベル

2.1 RAID レベル比較表

項目RAID 0RAID 1RAID 5RAID 6RAID 10
別名ストライピングミラーリング分散パリティ二重パリティストライプドミラー
最小ディスク数22344
冗長性なし1台障害OK1台障害OK2台障害OKミラーペア内1台OK
利用可能容量N x 容量容量 / 2(N-1) x 容量(N-2) x 容量N x 容量 / 2
読み取り性能非常に高い高い高い高い非常に高い
書き込み性能非常に高い普通中程度やや低い中程度
リビルド時間N/A短い長い非常に長い中程度
コスト効率最良低い良い良い低い
用途テンポラリOS, ログデータ重要データDB, 高性能

2.2 RAID 0 (ストライピング)

RAID 0: データを複数のディスクに分散して書き込み

ディスク1     ディスク2     ディスク3
┌─────────┐  ┌─────────┐  ┌─────────┐
│ Block A1 │  │ Block A2 │  │ Block A3 │
│ Block B1 │  │ Block B2 │  │ Block B3 │
│ Block C1 │  │ Block C2 │  │ Block C3 │
│ Block D1 │  │ Block D2 │  │ Block D3 │
└─────────┘  └─────────┘  └─────────┘

利点: 読み書きが最速。全容量使用可能
欠点: 冗長性なし。1台でも故障するとデータ全損

2.3 RAID 1 (ミラーリング)

RAID 1: データの完全なコピーを複数のディスクに保持

ディスク1     ディスク2
┌─────────┐  ┌─────────┐
│ Block A  │  │ Block A  │  (同一データ)
│ Block B  │  │ Block B  │  (同一データ)
│ Block C  │  │ Block C  │  (同一データ)
│ Block D  │  │ Block D  │  (同一データ)
└─────────┘  └─────────┘

利点: 高い冗長性。読み取り速度向上
欠点: 容量効率50%。書き込み速度は単体と同等

2.4 RAID 5 (分散パリティ)

RAID 5: データとパリティを分散配置

ディスク1     ディスク2     ディスク3     ディスク4
┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐
│ Block A1 │  │ Block A2 │  │ Block A3 │  │ Parity A│
│ Block B1 │  │ Block B2 │  │ Parity B│  │ Block B3│
│ Block C1 │  │ Parity C│  │ Block C2 │  │ Block C3│
│ Parity D│  │ Block D1 │  │ Block D2 │  │ Block D3│
└─────────┘  └─────────┘  └─────────┘  └─────────┘

パリティ = データブロックの XOR
容量 = (N-1) x ディスク容量

利点: 容量効率が良い。1台の障害に耐性
欠点: 書き込みにパリティ計算が必要 (write penalty)
     リビルド中に2台目が故障するとデータ全損

2.5 RAID 6 (二重パリティ)

RAID 6: 2つの独立したパリティ (P + Q)

ディスク1     ディスク2     ディスク3     ディスク4     ディスク5
┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐  ┌─────────┐
│ Block A1 │  │ Block A2 │  │ Block A3 │  │ParityAP │  │ParityAQ │
│ Block B1 │  │ Block B2 │  │ParityBP │  │ParityBQ │  │ Block B3│
│ Block C1 │  │ParityCP │  │ParityCQ │  │ Block C2 │  │ Block C3│
│ParityDP │  │ParityDQ │  │ Block D1 │  │ Block D2 │  │ Block D3│
└─────────┘  └─────────┘  └─────────┘  └─────────┘  └─────────┘

容量 = (N-2) x ディスク容量

利点: 2台同時障害に耐性
欠点: 書き込み性能がさらに低下

2.6 RAID 10 (1+0, ストライプドミラー)

RAID 10: ミラーペアのストライプ

     ストライプ (RAID 0)
     ┌─────────────────┬─────────────────┐
     │   ミラー 1       │   ミラー 2       │
     │  (RAID 1)        │  (RAID 1)        │
     │                  │                  │
     │ Disk1   Disk2    │ Disk3   Disk4    │
     │┌─────┐┌─────┐   │┌─────┐┌─────┐   │
     ││ A1  ││ A1  │   ││ A2  ││ A2  │   │
     ││ B1  ││ B1  │   ││ B2  ││ B2  │   │
     ││ C1  ││ C1  │   ││ C2  ││ C2  │   │
     │└─────┘└─────┘   │└─────┘└─────┘   │
     └─────────────────┴─────────────────┘

利点: 高性能 + 高冗長性。リビルドが高速
欠点: 容量効率50%。最低4台必要

3. ハードウェア RAID vs ソフトウェア RAID

3.1 比較表

項目ハードウェア RAIDソフトウェア RAID (mdadm)
CPU 負荷低い (専用コントローラ)やや高い (CPU で処理)
コスト高い (専用カード必要)低い (ソフトウェアのみ)
パフォーマンス高い (BBU, キャッシュ)良い (最新CPUでは十分)
柔軟性低い (ベンダー依存)高い (Linux標準)
移植性低い (コントローラ依存)高い (他のLinuxで認識可能)
バッテリバックアップあり (BBU)なし (UPS で代替)
ホットスワップサポートサポート
管理ツールベンダー提供mdadm (標準)
障害検出ハードウェアレベルOS レベル
フェイクRAID注意: BIOS RAIDは実質ソフトウェアRAID-

3.2 推奨選択基準

┌─────────────────────────────────────────┐
│ ハードウェア RAID を推奨する場合:         │
│ ・大量のディスク (12台以上)              │
│ ・ミッションクリティカルなワークロード    │
│ ・BBU によるライトキャッシュが必要        │
│ ・CPU リソースを節約したい               │
├─────────────────────────────────────────┤
│ ソフトウェア RAID (mdadm) を推奨する場合:│
│ ・コストを抑えたい                       │
│ ・少数のディスク (2-6台)                 │
│ ・柔軟な構成変更が必要                   │
│ ・クラウド/仮想環境                      │
│ ・ベンダーロックインを避けたい           │
└─────────────────────────────────────────┘

4. mdadm による RAID 作成

4.1 前提条件

# mdadm のインストール
apt install mdadm    # Ubuntu/Debian
dnf install mdadm    # RHEL/CentOS

# ディスクの準備 (パーティションの作成)
# 各ディスクに RAID 用パーティションを作成
for disk in sdb sdc sdd sde; do
    parted -s /dev/$disk -- mklabel gpt mkpart primary 1MiB -1MiB set 1 raid on
done

# パーティションの確認
lsblk
# 出力例:
# NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# sda      8:0    0  100G  0 disk
# ├─sda1   8:1    0    1G  0 part /boot
# └─sda2   8:2    0   99G  0 part
# sdb      8:16   0  100G  0 disk
# └─sdb1   8:17   0  100G  0 part
# sdc      8:32   0  100G  0 disk
# └─sdc1   8:33   0  100G  0 part
# sdd      8:48   0  100G  0 disk
# └─sdd1   8:49   0  100G  0 part
# sde      8:64   0  100G  0 disk
# └─sde1   8:65   0  100G  0 part

4.2 RAID 0 の作成

# RAID 0 (2ディスクストライプ)
mdadm --create /dev/md0 --level=0 --raid-devices=2 \
    /dev/sdb1 /dev/sdc1

# 出力例:
# mdadm: Defaulting to version 1.2 metadata
# mdadm: array /dev/md0 started.

# 確認
cat /proc/mdstat
# 出力例:
# Personalities : [raid0]
# md0 : active raid0 sdc1[1] sdb1[0]
#       209584128 blocks super 1.2 512k chunks
#
# unused devices: <none>

mdadm --detail /dev/md0
# 出力例:
# /dev/md0:
#            Version : 1.2
#      Creation Time : Wed Jan 15 10:00:00 2025
#         Raid Level : raid0
#         Array Size : 209584128 (199.87 GiB)
#       Raid Devices : 2
#      Total Devices : 2
#            State : clean
#         Chunk Size : 512K

4.3 RAID 1 の作成

# RAID 1 (2ディスクミラー)
mdadm --create /dev/md1 --level=1 --raid-devices=2 \
    /dev/sdb1 /dev/sdc1

# 出力例:
# 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/md1 started.

cat /proc/mdstat
# 出力例:
# Personalities : [raid1]
# md1 : active raid1 sdc1[1] sdb1[0]
#       104792064 blocks super 1.2 [2/2] [UU]
#       [=========>...........]  resync = 45.2% (47432576/104792064) finish=4.5min speed=212345K/sec

4.4 RAID 5 の作成

# RAID 5 (3ディスク + 1スペア)
mdadm --create /dev/md5 --level=5 --raid-devices=3 \
    --spare-devices=1 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# チャンクサイズの指定
mdadm --create /dev/md5 --level=5 --raid-devices=3 \
    --chunk=256 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1

cat /proc/mdstat
# 出力例:
# Personalities : [raid6] [raid5] [raid4]
# md5 : active raid5 sde1[4](S) sdd1[2] sdc1[1] sdb1[0]
#       209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
#       bitmap: 0/1 pages [0KB], 65536KB chunk
#
# unused devices: <none>

4.5 RAID 6 の作成

# RAID 6 (4ディスク + 1スペア)
mdadm --create /dev/md6 --level=6 --raid-devices=4 \
    --spare-devices=1 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1 /dev/sdf1

cat /proc/mdstat
# 出力例:
# md6 : active raid6 sdf1[4](S) sde1[3] sdd1[2] sdc1[1] sdb1[0]
#       209584128 blocks super 1.2 level 6, 512k chunk, algorithm 2 [4/4] [UUUU]

4.6 RAID 10 の作成

# RAID 10 (4ディスク)
mdadm --create /dev/md10 --level=10 --raid-devices=4 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

# レイアウトの指定
# n (near) - デフォルト。ミラーコピーを隣接するディスクに配置
# f (far) - ミラーコピーを離れたディスクに配置 (読み取り高速化)
# o (offset) - ストライプ単位でオフセットしてミラー

mdadm --create /dev/md10 --level=10 --layout=f2 \
    --raid-devices=4 \
    /dev/sdb1 /dev/sdc1 /dev/sdd1 /dev/sde1

cat /proc/mdstat
# 出力例:
# md10 : active raid10 sde1[3] sdd1[2] sdc1[1] sdb1[0]
#       209584128 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]

4.7 ファイルシステム作成とマウント

# ファイルシステム作成
mkfs.ext4 /dev/md5
# または
mkfs.xfs /dev/md5

# マウント
mkdir -p /data
mount /dev/md5 /data

# /etc/fstab への追加
# UUID を使用 (推奨)
blkid /dev/md5
# 出力: /dev/md5: UUID="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" TYPE="ext4"

echo "UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /data ext4 defaults,nofail 0 2" >> /etc/fstab

5. RAID の管理

5.1 /proc/mdstat

# RAID の状態をリアルタイム表示
cat /proc/mdstat
# 出力例:
# Personalities : [raid1] [raid6] [raid5] [raid4] [raid10]
# md5 : active raid5 sdd1[2] sdc1[1] sdb1[0]
#       209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
#       bitmap: 0/1 pages [0KB], 65536KB chunk
#
# md1 : active raid1 sdc1[1] sdb1[0]
#       104792064 blocks super 1.2 [2/2] [UU]
#
# unused devices: <none>

# [UU] の意味:
# U = アクティブ (Up)
# _ = 非アクティブ (Down/Removed)
# [UU] = 全ディスク正常
# [U_] = 1台が欠損 (縮退状態)

# リアルタイム監視
watch -n 1 cat /proc/mdstat

5.2 mdadm.conf

# mdadm.conf の生成
mdadm --detail --scan >> /etc/mdadm/mdadm.conf
# Ubuntu/Debian: /etc/mdadm/mdadm.conf
# RHEL/CentOS: /etc/mdadm.conf

# mdadm.conf の内容例
cat /etc/mdadm/mdadm.conf
# ARRAY /dev/md1 metadata=1.2 UUID=12345678:abcdef01:23456789:abcdef01
# ARRAY /dev/md5 metadata=1.2 UUID=87654321:01fedcba:98765432:01fedcba
# MAILADDR admin@example.com

# initramfs の更新 (ブート時にRAIDを認識するため)
update-initramfs -u    # Ubuntu/Debian
dracut --force         # RHEL/CentOS

5.3 mdadm の主要操作

# RAID アレイの詳細情報
mdadm --detail /dev/md5
# 出力例:
# /dev/md5:
#            Version : 1.2
#      Creation Time : Wed Jan 15 10:00:00 2025
#         Raid Level : raid5
#         Array Size : 209584128 (199.87 GiB)
#      Used Dev Size : 104792064 (99.93 GiB)
#       Raid Devices : 3
#      Total Devices : 4
#        Persistence : Superblock is persistent
#      Intent Bitmap : Internal
#        Update Time : Wed Jan 15 15:00:00 2025
#              State : clean
#     Active Devices : 3
#    Working Devices : 4
#     Failed Devices : 0
#      Spare Devices : 1
#             Layout : left-symmetric
#         Chunk Size : 512K
# Consistency Policy : bitmap
#               Name : server01:5
#               UUID : 12345678:abcdef01:23456789:abcdef01
#             Events : 100
#    Number   Major   Minor   RaidDevice State
#       0       8       17        0      active sync   /dev/sdb1
#       1       8       33        1      active sync   /dev/sdc1
#       2       8       49        2      active sync   /dev/sdd1
#       4       8       65        -      spare   /dev/sde1

# 個別ディスクの情報
mdadm --examine /dev/sdb1

# RAID の停止
mdadm --stop /dev/md5

# RAID の起動
mdadm --assemble /dev/md5

# 全 RAID アレイのスキャンと起動
mdadm --assemble --scan

6. RAID の監視とアラート

6.1 mdadm モニターデーモン

# mdadm モニターの設定
# /etc/mdadm/mdadm.conf (Ubuntu/Debian)
# /etc/mdadm.conf (RHEL/CentOS)

# メールアドレスの設定
echo "MAILADDR admin@example.com" >> /etc/mdadm/mdadm.conf

# モニターデーモンの起動
systemctl enable --now mdmonitor

# 手動でのモニター実行
mdadm --monitor --scan --daemonise --mail=admin@example.com --delay=300

# テストアラートの送信
mdadm --monitor --scan --test --oneshot

6.2 カスタム監視スクリプト

#!/bin/bash
# raid-monitor.sh - RAID 監視スクリプト

MAILTO="admin@example.com"
HOSTNAME=$(hostname)
ALERT=false
REPORT=""

# 全 MD デバイスをチェック
for md in /dev/md*; do
    [ -b "$md" ] || continue

    STATUS=$(mdadm --detail "$md" 2>/dev/null)

    # 状態チェック
    STATE=$(echo "$STATUS" | grep "State :" | awk '{print $NF}')
    FAILED=$(echo "$STATUS" | grep "Failed Devices" | awk '{print $NF}')
    DEGRADED=$(echo "$STATUS" | grep -c "removed\|faulty")

    if [ "$STATE" != "clean" ] && [ "$STATE" != "active" ]; then
        ALERT=true
        REPORT+="WARNING: $md is in state: $STATE\n"
    fi

    if [ "$FAILED" -gt 0 ]; then
        ALERT=true
        REPORT+="CRITICAL: $md has $FAILED failed device(s)\n"
    fi
done

# アラート送信
if [ "$ALERT" = true ]; then
    echo -e "RAID Alert on $HOSTNAME\n\n$REPORT\n\n$(cat /proc/mdstat)" | \
        mail -s "RAID Alert: $HOSTNAME" "$MAILTO"
fi

# Cron 設定
# */5 * * * * /usr/local/bin/raid-monitor.sh

6.3 SMART 監視との組み合わせ

# smartmontools のインストール
apt install smartmontools    # Ubuntu/Debian
dnf install smartmontools    # RHEL/CentOS

# SMART 情報の確認
smartctl -a /dev/sdb
# 重要な属性:
# 5   Reallocated_Sector_Ct  - 代替セクタ数
# 187 Reported_Uncorrect     - 修正不能エラー数
# 188 Command_Timeout        - コマンドタイムアウト数
# 197 Current_Pending_Sector - 保留中のセクタ数
# 198 Offline_Uncorrectable  - オフライン修正不能セクタ数

# SMART テスト実行
smartctl -t short /dev/sdb
smartctl -t long /dev/sdb

# 結果確認
smartctl -l selftest /dev/sdb

# smartd の設定 (/etc/smartd.conf)
echo "/dev/sdb -a -o on -S on -s (S/../.././02|L/../../6/03) -m admin@example.com" >> /etc/smartd.conf

# smartd の有効化
systemctl enable --now smartd

7. スペアドライブ

7.1 スペアドライブの管理

# スペアドライブの追加
mdadm --add /dev/md5 /dev/sde1
# 出力: mdadm: added /dev/sde1

# 確認
mdadm --detail /dev/md5 | grep spare
# 出力:
#       4       8       65        -      spare   /dev/sde1

# スペアドライブの削除
mdadm --remove /dev/md5 /dev/sde1

# グローバルスペアの設定 (mdadm.conf)
# ARRAY /dev/md5 ... spare-group=global-spare
# ARRAY /dev/md1 ... spare-group=global-spare

7.2 ホットスペアの自動リビルド

ディスク障害発生時の自動リビルドフロー:

[正常状態] → [ディスク障害検出] → [障害ディスクの無効化]
    │                                        │
    │                                        ▼
    │                               [スペアドライブが
    │                                利用可能か?]
    │                                  ↙      ↘
    │                               Yes        No
    │                                ↓          ↓
    │                         [自動リビルド    [縮退状態で
    │                          開始]           継続]
    │                                ↓          ↓
    │                         [リビルド完了]   [管理者に
    │                                ↓         アラート]
    │                         [正常状態に
    └────────────────────────  復帰]

8. RAID リビルドプロセス

8.1 障害のシミュレーションとリビルド

# === ディスク障害のシミュレーション ===

# ディスクを障害としてマーク
mdadm --fail /dev/md5 /dev/sdc1
# 出力: mdadm: set /dev/sdc1 faulty in /dev/md5

# 状態確認
cat /proc/mdstat
# 出力例:
# md5 : active raid5 sde1[4] sdd1[2] sdc1[1](F) sdb1[0]
#       209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
#       [=====>...............]  recovery = 25.0% (26198016/104792064) finish=6.2min speed=210234K/sec

# 障害ディスクの除去
mdadm --remove /dev/md5 /dev/sdc1
# 出力: mdadm: hot removed /dev/sdc1 from /dev/md5

# === 新しいディスクでリビルド ===

# 新しいディスクのパーティション作成
parted -s /dev/sdc -- mklabel gpt mkpart primary 1MiB -1MiB set 1 raid on

# RAID に追加 (自動的にリビルド開始)
mdadm --add /dev/md5 /dev/sdc1
# 出力: mdadm: added /dev/sdc1

# リビルドの進行状況確認
cat /proc/mdstat
# 出力例:
# md5 : active raid5 sdc1[5] sde1[4](S) sdd1[2] sdb1[0]
#       209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
#       [=====>...............]  recovery = 25.0% finish=6.2min speed=210234K/sec

# リビルド速度の確認と調整
cat /proc/sys/dev/raid/speed_limit_min
# 出力: 1000 (KB/s)
cat /proc/sys/dev/raid/speed_limit_max
# 出力: 200000 (KB/s)

# リビルド速度の調整
echo 50000 > /proc/sys/dev/raid/speed_limit_min
echo 500000 > /proc/sys/dev/raid/speed_limit_max

8.2 リビルド時間の目安

RAID レベルディスクサイズおおよその時間
RAID 11 TB2-4 時間
RAID 51 TB (各ディスク)4-8 時間
RAID 61 TB (各ディスク)8-16 時間
RAID 101 TB2-4 時間

注: 実際の時間はディスク速度、I/O 負荷、リビルド速度設定に依存


9. RAID のパフォーマンス特性

9.1 RAID レベル別パフォーマンス比較

操作RAID 0RAID 1RAID 5RAID 6RAID 10
シーケンシャル読み取りN倍2倍(N-1)倍(N-2)倍N/2倍
シーケンシャル書き込みN倍1倍(N-1)倍相当(N-2)倍相当N/2倍
ランダム読み取りN倍2倍(N-1)倍(N-2)倍N倍
ランダム書き込みN倍1倍1/4倍1/6倍N/2倍
IOPS (読み取り)非常に高い高い高い高い非常に高い
IOPS (書き込み)非常に高い普通低い非常に低い高い

N = ディスク数

9.2 パフォーマンスチューニング

# ストライプキャッシュサイズの調整 (RAID 5/6)
echo 8192 > /sys/block/md5/md/stripe_cache_size
# デフォルト: 256
# 推奨: 4096-8192 (メモリに余裕がある場合)

# 先読みの調整
blockdev --setra 4096 /dev/md5
# デフォルト: 256 (512バイトセクタ単位)

# I/O スケジューラの設定
echo deadline > /sys/block/sdb/queue/scheduler
# SSD の場合は none (noop)

# チャンクサイズの考慮
# 大きなチャンク: シーケンシャルI/O向け (512K-1M)
# 小さなチャンク: ランダムI/O向け (64K-128K)

# ベンチマーク
# fio によるパフォーマンステスト
fio --name=seqread --ioengine=libaio --iodepth=16 \
    --rw=read --bs=1M --direct=1 --size=1G \
    --filename=/dev/md5

fio --name=randwrite --ioengine=libaio --iodepth=32 \
    --rw=randwrite --bs=4k --direct=1 --size=1G \
    --filename=/dev/md5

10. RAID の縮退とハンドリング

10.1 縮退状態の検出

# /proc/mdstat での確認
cat /proc/mdstat
# 縮退状態の例:
# md5 : active raid5 sdd1[2] sdb1[0]
#       209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/2] [U_U]
#
# [3/2] = 3台構成中2台が稼働
# [U_U] = 2番目のディスクが欠損

# mdadm での確認
mdadm --detail /dev/md5 | grep -E "State|Failed"
# 出力例:
#              State : clean, degraded
#     Failed Devices : 1

# RAID の健全性チェック
echo check > /sys/block/md5/md/sync_action
# チェック進行状況
cat /proc/mdstat

# ミスマッチカウントの確認
cat /sys/block/md5/md/mismatch_cnt
# 0 であれば問題なし

10.2 縮退状態での対応

# 1. アラートの確認とログの確認
dmesg | grep -i "md\|raid\|error"
journalctl -u mdmonitor

# 2. 障害ディスクの特定
mdadm --detail /dev/md5
# State が "faulty" のディスクを確認

# 3. 障害ディスクの物理的な特定
# シリアル番号の確認
smartctl -i /dev/sdc | grep "Serial Number"

# 4. 障害ディスクの除去
mdadm --remove /dev/md5 /dev/sdc1

# 5. ディスクの交換

# 6. 新しいディスクのパーティション作成
# 元のディスクと同じサイズまたはそれ以上のパーティションを作成
parted -s /dev/sdc -- mklabel gpt mkpart primary 1MiB -1MiB set 1 raid on

# 7. RAID に追加
mdadm --add /dev/md5 /dev/sdc1

# 8. リビルドの監視
watch -n 5 cat /proc/mdstat

11. RAID の移行とリシェイプ

11.1 RAID レベルの変更

# RAID 1 → RAID 5 (ディスク追加必要)
# 新しいディスクを追加してから変換
mdadm --add /dev/md1 /dev/sdd1
mdadm --grow /dev/md1 --level=5 --raid-devices=3

# リシェイプの進行確認
cat /proc/mdstat
# 出力例:
# md1 : active raid5 sdd1[2] sdc1[1] sdb1[0]
#       209584128 blocks super 1.2 level 5, 512k chunk, algorithm 2 [3/3] [UUU]
#       [=====>...............]  reshape = 25.0% finish=10.5min speed=150000K/sec

11.2 RAID のサイズ変更 (grow)

# RAID 5 にディスクを追加
mdadm --add /dev/md5 /dev/sde1
mdadm --grow /dev/md5 --raid-devices=4

# リシェイプ完了後にファイルシステムを拡張
# ext4 の場合:
resize2fs /dev/md5
# xfs の場合:
xfs_growfs /data

# チャンクサイズの変更
mdadm --grow /dev/md5 --chunk=256

# バックアップファイルの指定 (リシェイプ中断時の復旧用)
mdadm --grow /dev/md5 --raid-devices=4 \
    --backup-file=/root/md5-reshape-backup

11.3 RAID の再構築

# 既存の RAID メンバーからアレイを再構築
mdadm --assemble /dev/md5 /dev/sdb1 /dev/sdc1 /dev/sdd1

# 自動検出で再構築
mdadm --assemble --scan

# 強制的な再構築 (1台欠損の場合)
mdadm --assemble --force /dev/md5 /dev/sdb1 /dev/sdd1

# スーパーブロックの確認
mdadm --examine /dev/sdb1

12. トラブルシューティング

12.1 一般的な問題と解決策

問題原因解決策
RAID がブート時に認識されないmdadm.conf 未設定mdadm --detail --scan >> /etc/mdadm.conf、initramfs 更新
リビルドが進まないI/O 過負荷speed_limit_min/max の調整
RAID が縮退状態ディスク障害障害ディスクの交換と再追加
パフォーマンス低下リビルド中完了まで待つ。speed_limit の調整
整合性エラービット腐敗echo repair > /sys/block/md5/md/sync_action
RAID が起動しないスーパーブロック損傷--force での再構築
誤ってアレイを停止mdadm --stop 実行mdadm --assemble --scan

12.2 診断コマンド集

# RAID 全体の状態
cat /proc/mdstat

# 詳細情報
mdadm --detail /dev/md5

# 各ディスクのスーパーブロック
mdadm --examine /dev/sdb1

# カーネルログ
dmesg | grep -i "md\|raid"

# journalctl
journalctl -u mdmonitor --since today

# SMART 情報
smartctl -H /dev/sdb  # 健全性ステータス
smartctl -A /dev/sdb  # 属性一覧

# I/O 統計
iostat -x 1 5

# ディスクのベンチマーク
hdparm -tT /dev/md5

12.3 スーパーブロックの修復

# スーパーブロックのクリア (注意: データが失われる可能性)
mdadm --zero-superblock /dev/sdb1

# 強制的なアレイ再構築
mdadm --create /dev/md5 --level=5 --raid-devices=3 \
    --assume-clean \
    /dev/sdb1 /dev/sdc1 /dev/sdd1
# --assume-clean: リビルドをスキップ (データが正しい場合のみ使用)

13. ベストプラクティス

13.1 RAID 設計のベストプラクティス

項目推奨事項
RAID レベル選択データの重要度と性能要件に基づいて選択
ディスクサイズ同じサイズのディスクを使用
ディスクブランド異なるロットやメーカーを混在させることを推奨
スペアドライブ常に1台以上のホットスペアを確保
監視mdmonitor + SMART 監視を有効化
バックアップRAID はバックアップの代替ではない!
テスト定期的な整合性チェック
ドキュメントRAID 構成を記録

13.2 RAID は バックアップではない

重要な注意:
RAID はハードウェア障害に対する保護を提供するが、
以下のリスクからデータを保護しない:

  ✗ ソフトウェアのバグ
  ✗ ユーザーの誤操作 (rm -rf)
  ✗ ランサムウェア / マルウェア
  ✗ 災害 (火災、洪水)
  ✗ コントローラの障害
  ✗ ファイルシステムの破損
  ✗ 電源障害による corruption

RAID + 定期バックアップ = 適切なデータ保護策

13.3 定期メンテナンス

# 週次の整合性チェック (cron 設定)
# /etc/cron.d/raid-check
0 1 * * 0 root echo check > /sys/block/md5/md/sync_action

# SMART テストの定期実行
# /etc/cron.d/smart-test
0 2 * * 6 root smartctl -t long /dev/sdb
0 2 * * 6 root smartctl -t long /dev/sdc
0 2 * * 6 root smartctl -t long /dev/sdd

# mdadm.conf の定期的な更新
# RAID 構成変更時に必ず実行
mdadm --detail --scan > /etc/mdadm/mdadm.conf
update-initramfs -u

13.4 RAID レベル選択ガイド

用途別 RAID レベル推奨:

┌─────────────────────────┬─────────┐
│ 用途                     │ 推奨    │
├─────────────────────────┼─────────┤
│ テンポラリ/キャッシュ     │ RAID 0  │
│ OS ドライブ              │ RAID 1  │
│ ファイルサーバー         │ RAID 5  │
│ 重要データベース         │ RAID 10 │
│ アーカイブストレージ     │ RAID 6  │
│ 仮想化ストレージ         │ RAID 10 │
│ ログサーバー             │ RAID 5  │
│ メールサーバー           │ RAID 10 │
└─────────────────────────┴─────────┘

14. 参考文献

  1. Linux RAID Wiki - https://raid.wiki.kernel.org/
  2. mdadm man page - https://man7.org/linux/man-pages/man8/mdadm.8.html
  3. Red Hat - Managing RAID - https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/9/html/managing_storage_devices/managing-raid_managing-storage-devices
  4. Linux Software RAID FAQ - https://raid.wiki.kernel.org/index.php/Linux_Raid
  5. Arch Linux Wiki - RAID - https://wiki.archlinux.org/title/RAID
  6. smartmontools - https://www.smartmontools.org/
  7. Storage Performance Council - https://www.storageperformance.org/
  8. SNIA (Storage Networking Industry Association) - https://www.snia.org/

本ドキュメントは Linux における RAID 設定と管理について包括的にまとめたものである。RAID はデータの可用性を向上させるが、バックアップの代替にはならない。必ず定期的なバックアップと組み合わせて運用すること。