テクノロジーガイド

RAIDアレイの作成とデータ移行(mdadm + LVM)

4 min read Linux 更新されました 29 Sep 2025
RAID構築とLVM移行手順(mdadm + LVM)
RAID構築とLVM移行手順(mdadm + LVM)

概要

このガイドは、既存の単一ディスク構成(/dev/sda)から mdadm で RAID1 ミラーを構築し、LVM ボリュームを RAID 上に移行する手順を示します。作業は以下の流れです。

  • degraded(プレースホルダ missing)で /dev/md0 と /dev/md1 を作成
  • /dev/md0 に ext3 を作成して /boot を移行
  • /dev/md1 を pvcreate して VolGroup00 に追加(vgextend)
  • /etc/mdadm.conf、/etc/fstab、/etc/mtab、GRUB 設定、initrd を更新
  • pvmove で /dev/sda2 の LVM データを /dev/md1 に移す
  • /dev/sda2 を RAID パーティションに変更して /dev/md1 に追加し同期
  • /dev/sda1 の /boot データを /dev/md0 にコピー

重要: 既に稼働中のシステム上で作業するため、誤操作はブート不能やデータ損失を招きます。事前にバックアップを取得してください。

目的と前提条件

目的: 物理ディスクを RAID1 にして可用性を向上させ、LVM 論理ボリュームを RAID 上に移行する。

前提条件:

  • ルートは LVM(例: /dev/VolGroup00/LogVol00)で /boot は別パーティション(/dev/sda1)
  • 追加ディスク(例: /dev/sdb)が空または上書きして良い状態
  • mdadm、lvm2、grub(または legacy grub)がインストール済み
  • ルート権限で作業

重要: ここでは RAID1(ミラー)を想定しています。要件により RAID レベルを変更してください。

1. degraded モードで RAID を作成する

まず、/dev/md0(/boot 用、非 LVM)と /dev/md1(LVM 用)を degraded(片側 missing)で作成します。/dev/sda は現在稼働中で追加できないため、missing プレースホルダを使います。

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/sdb1
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb2

作成直後に /proc/mdstat を確認します。

cat /proc/mdstat

期待される出力例(degraded 表示):

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sdb2[1]
10377920 blocks [2/1] [_U]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: 
[root@server1 ~]#

注釈: [ U ] または [U] は degraded を示します。[UU] は正常。

2. /dev/md0 にファイルシステムを作成する

非 LVM の /boot 用に ext3 を作成します(既存の /boot を後でコピーします)。

mkfs.ext3 /dev/md0

3. /dev/md1 を LVM 用に準備してボリュームグループに追加する

LVM に使うために物理ボリュームとして登録し、既存の VolGroup00 に拡張します。

pvcreate /dev/md1
vgextend VolGroup00 /dev/md1

pvdisplay と vgdisplay で状態を確認します。例:

[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name               /dev/sda2
VG Name               VolGroup00
PV Size               9.90 GB / not usable 22.76 MB
Allocatable           yes (but full)
PE Size (KByte)       32768
Total PE              316
Free PE               0
Allocated PE          316
PV UUID               aikFEP-FB15-nB9C-Nfq0-eGMG-hQid-GOsDuj

--- Physical volume ---
PV Name               /dev/md1
VG Name               VolGroup00
PV Size               9.90 GB / not usable 22.69 MB
Allocatable           yes
PE Size (KByte)       32768
Total PE              316
Free PE               316
Allocated PE          0
PV UUID               u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J

[root@server1 ~]#
[root@server1 ~]# vgdisplay
--- Volume group ---
VG Name               VolGroup00
System ID
Format                lvm2
Metadata Areas        2
Metadata Sequence No  4
VG Access             read/write
VG Status             resizable
MAX LV                0
Cur LV                2
Open LV               2
Max PV                0
Cur PV                2
Act PV                2
VG Size               19.75 GB
PE Size               32.00 MB
Total PE              632
Alloc PE / Size       316 / 9.88 GB
Free  PE / Size       316 / 9.88 GB
VG UUID               ZPvC10-cN09-fI0S-Vc8l-vOuZ-wM6F-tlz0Mj

[root@server1 ~]#

4. mdadm 設定、fstab、mtab の更新

RAID 情報を /etc/mdadm.conf に保存します。

mdadm --examine --scan > /etc/mdadm.conf
cat /etc/mdadm.conf

ファイルには次のような ARRAY 行が含まれます。

ARRAY /dev/md0 level=raid1 num-devices=2 UUID=0a96be0f:bf0f4631:a910285b:0f337164
ARRAY /dev/md1 level=raid1 num-devices=2 UUID=f9e691e2:8d25d314:40f42444:7dbe1da1

次に /etc/fstab を編集して /boot を /dev/md0 に向けます(LABEL=/boot を置き換え)。

編集例:

/dev/VolGroup00/LogVol00 /                       ext3    defaults        1 1
/dev/md0             /boot                   ext3    defaults        1 2
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0
/dev/VolGroup00/LogVol01 swap                    swap    defaults        0 0

また /etc/mtab の /dev/sda1 を /dev/md0 に置き換えます(実行中に /etc/mtab を手動編集するため注意)。

/dev/mapper/VolGroup00-LogVol00 / ext3 rw 0 0
proc /proc proc rw 0 0
sysfs /sys sysfs rw 0 0
devpts /dev/pts devpts rw,gid=5,mode=620 0 0
/dev/md0 /boot ext3 rw 0 0
tmpfs /dev/shm tmpfs rw 0 0
none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw 0 0

重要: /etc/mtab を編集するときは短時間で行い、内容を正確に保ってください。誤ったエントリは mount の挙動に影響します。

5. GRUB の調整 — フェイルオーバーとブート先を増やす

GRUB の menu.lst(または grub.conf)を編集して fallback を有効にし、/dev/sdb 側からも起動できるようにします。

vi /boot/grub/menu.lst

default のすぐ下に fallback=1 を追加します。

default=0
fallback=1

さらにカーネルの stanza(起動エントリ)を複製し、最初のエントリの root を (hd1,0)(/dev/sdb)に変更します。例:

title CentOS (2.6.18-128.el5)
        root (hd1,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img
title CentOS (2.6.18-128.el5)
        root (hd0,0)
        kernel /vmlinuz-2.6.18-128.el5 ro root=/dev/VolGroup00/LogVol00
        initrd /initrd-2.6.18-128.el5.img

目的: カーネル0(default)が失敗した場合、fallback=1 により次のエントリが起動されます。ここで (hd1,0) を指定することで、/dev/sdb 側の /boot を先に試す構成になります。

6. initrd の再生成

現在のカーネルに合わせて initrd を作り直します。既存の initrd はバックアップしておきます。

mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img_orig
mkinitrd /boot/initrd-`uname -r`.img `uname -r`

これは mdadm モジュールや raid デバイスを initrd に含めるためです。initrd に mdadm と LVM を含めないと、RAID 上の root を認識できないことがあります。

7. データを RAID/LVM に移動する

設定ファイルが更新され、/dev/md1 が VolGroup00 に追加されている状態で、pvmove を使って /dev/sda2(既存の LVM 用 PV)から /dev/md1 にデータを移します。

pvmove /dev/sda2 /dev/md1

注意: データ量によっては時間がかかります。進行状況は pvdisplay や pvs で確認できます。

完了後、古い PV をボリュームグループから除外し、pvremove します。

vgreduce VolGroup00 /dev/sda2
pvremove /dev/sda2

pvdisplay の例(移行後):

[root@server1 ~]# pvdisplay
--- Physical volume ---
PV Name               /dev/md1
VG Name               VolGroup00
PV Size               9.90 GB / not usable 22.69 MB
Allocatable           yes (but full)
PE Size (KByte)       32768
Total PE              316
Free PE               0
Allocated PE          316
PV UUID               u6IZfM-5Zj8-kFaG-YN8K-kjAd-3Kfv-0oYk7J

[root@server1 ~]#

8. /dev/sda2 を RAID パーティションに変更して md1 に追加する

fdisk を使って /dev/sda のパーティションタイプを Linux raid autodetect (0xFD) に変更します。

fdisk /dev/sda

対話例(t でタイプ変更、w で書き込み):

Command (m for help): <-- t
Partition number (1-4): <-- 2
Hex code (type L to list codes): <-- fd
Changed system type of partition 2 to fd (Linux raid autodetect)

Command (m for help): <-- w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

注意: 上記のように再読み込みが失敗する場合があります。再起動が必要になることもあるため、タイミングに注意してください。

パーティションのタイプを変更したら、/dev/md1 に /dev/sda2 を追加します。

mdadm --add /dev/md1 /dev/sda2

同期状況は /proc/mdstat で確認します。同期中の例:

[root@server1 ~]# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda2[2] sdb2[1]
10377920 blocks [2/1] [_U]
[====>................]  recovery = 23.4% (2436544/10377920) finish=2.0min speed=64332K/sec

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: 
[root@server1 ~]#

同期が完了すると [UU] 表示になります。

[root@server1 # cat /proc/mdstat
Personalities : ...
md1 : active raid1 sda2[0] sdb2[1]
10377920 blocks [2/2] [UU]

md0 : active raid1 sdb1[1]
104320 blocks [2/1] [_U]

unused devices: 
[root@server1 ~]#

9. /dev/md0 をマウントして /boot をコピー

まずマウントポイントを作り、/dev/md0 をマウントします。

mkdir /mnt/md0
mount /dev/md0 /mnt/md0

mount コマンド出力例:

[root@server1 ~]# mount
/dev/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/md0 on /boot type ext3 (rw)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
/dev/md0 on /mnt/md0 type ext3 (rw)
[root@server1 ~]#

/boot の内容を md0 にコピーします(オプション -p でパーミッション保持、-R 再帰、-x ファイルシステムの境界を超えない)。

cd /boot
cp -dpRx . /mnt/md0

注: コピー後、/mnt/md0 の内容が正しく反映されているか確認してください。

検証と再起動の準備チェックリスト

  • /etc/mdadm.conf に ARRAY 行がある
  • /etc/fstab の /boot が /dev/md0 を指している
  • /etc/mtab に /dev/md0 が反映されている(必要なら再マウント)
  • GRUB の menu.lst に fallback=1 が設定され、(hd1,0) のエントリがある
  • [ ] initrd が再生成されている(/boot/initrd-uname -r.img が存在)
  • pvdisplay / vgdisplay で md1 が VolGroup00 に含まれている
  • /proc/mdstat で md1 が [UU](または想定通り)になっている
  • /boot のファイルが /dev/md0 に正しくコピーされている

再起動前の推奨手順:

  1. 全ての設定ファイルをバックアップ(例: /etc/fstab.bak, /boot/grub/menu.lst.bak, /etc/mdadm.conf.bak)
  2. 重要なデータの別媒体へのバックアップ
  3. メンテナンスウィンドウを確保
  4. コンソールアクセス(物理または iLO、DRAC 等)を準備

トラブルシューティングと失敗ケース(いつ失敗するか)

  • initrd に mdadm や lvm が含まれていない場合

    • 症状: ブートが途中で停止し、root デバイスを見つけられない
    • 対策: mkinitrd 実行、必要なモジュール(raid1, md_mod, dm_mod, dm_crypt 等)を initrd に含める
  • /etc/fstab の誤り

    • 症状: ブート時に /boot がマウントできずに起動失敗
    • 対策: リカバリモードや rescue 環境で /etc/fstab を修正
  • GRUB のエントリが不正または (hd1,0) が正しくない

    • 症状: fallback が効かない、sdb から起動できない
    • 対策: grub の設定を確認し、正しいデバイス番号とパスを指定。Legacy GRUB の場合 (hd1,0) が /dev/sdb1 を指すか確認
  • mdadm 同期が遅い/停止する

    • 症状: /proc/mdstat がほとんど進まない
    • 対策: 同期の速度は I/O 負荷、スケジューラ、sysctl の /proc/sys/dev/raid/speed_limit_min/max に影響される。負荷が高い時間を避ける、speed_limit を一時調整
  • pvremove が失敗する

    • 症状: pvremove がパーティションを消せない
    • 対策: まず vgreduce で PV を取り除けているか確認。LV が残っていると除外できない。

ロール別チェックリスト

  • システム管理者(実行者):

    • 事前バックアップ取得
    • コマンドのログを残す(script や shell ログ)
    • 同期中は監視(watch cat /proc/mdstat)
  • オペレーションリード:

    • メンテナンスウィンドウ整備
    • リカバリ手順と連絡先を周知
  • セキュリティ担当:

    • 重要な鍵やパスワードが /boot 等に平文で置かれていないか確認
    • root ログイン、SSH の設定をチェック

受け入れ基準(Критерии приёмки)

  • /dev/md1 上の PV にすべての LVM データが移動し、vgreduce / pvremove により /dev/sda2 が VolGroup00 から除外されていること
  • /dev/md0 に /boot の全ファイルがコピーされ、/etc/fstab が /dev/md0 を指していること
  • /proc/mdstat で md1, md0 が期待通りの状態([UU] 等)であること
  • システムが /dev/sdb から起動可能であり、/dev/sda が障害時のフェイルオーバーとして機能すること

ロールバック/インシデント対応(簡易)

  • 問題: 再起動後にブート不能

    1. Rescue 環境またはライブメディアで起動
    2. /mnt で /boot を確認(/dev/md0 または /dev/sda1)
    3. /etc/fstab や /boot/grub/menu.lst を元に戻す(バックアップから復元)
    4. initrd を元に戻す: /boot/initrd-uname -r.img_orig をリネームして試す
  • 問題: RAID が同期しない

    1. dmesg と /var/log/messages を確認
    2. mdadm –detail /dev/mdX で状態を調べる
    3. 不良セクタの疑いがある場合はスマートチェック(smartctl)を実行

コマンド・チートシート

  • RAID 作成: mdadm –create /dev/mdX –level=1 –raid-disks=2 missing /dev/sdY
  • RAID 追加: mdadm –add /dev/mdX /dev/sdZ
  • RAID 詳細: mdadm –detail /dev/mdX
  • /proc/mdstat 監視: watch cat /proc/mdstat
  • FS 作成: mkfs.ext3 /dev/md0
  • PV 作成: pvcreate /dev/md1
  • VG 拡張: vgextend VolGroup00 /dev/md1
  • LVM 移動: pvmove /dev/sda2 /dev/md1
  • PV 除外: vgreduce VolGroup00 /dev/sda2
  • PV 削除: pvremove /dev/sda2
  • mdadm.conf 更新: mdadm –examine –scan > /etc/mdadm.conf

付録: よくあるコマンド出力(参考)

/proc/mdstat の同期中表示例:

[====>................]  recovery = 23.4% (2436544/10377920) finish=2.0min speed=64332K/sec

pvdisplay / vgdisplay の出力は環境により差がありますが、上のセクションにある例を参照してください。

要約

  • degraded(missing)で RAID を作り、稼働中のシステムを停止せずに段階的に移行できます。
  • /dev/md1 を pvcreate して VolGroup00 に追加し、pvmove でデータを移すのが安全な移行手順です。
  • GRUB と initrd の更新を忘れるとブートに失敗するため必ず行ってください。
  • 同期や移行は時間がかかるため監視と事前準備(バックアップ、コンソール接続)が必須です。

重要: 実運用で実行する前に、テスト環境で全手順を検証してください。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

Windows レジストリを安全にバックアップ・復元する方法
Windows 管理

Windows レジストリを安全にバックアップ・復元する方法

Instagramで「いいね」した投稿を見る方法
ソーシャルメディア

Instagramで「いいね」した投稿を見る方法

WhatsAppでGboardとSwiftKeyの音声入力を使う方法
モバイル

WhatsAppでGboardとSwiftKeyの音声入力を使う方法

IMDbの共通検索ガイド — 共演・共通スタッフを見つける方法
映画

IMDbの共通検索ガイド — 共演・共通スタッフを見つける方法

Rainmeterでデスクトップに引用を表示する方法
How-to

Rainmeterでデスクトップに引用を表示する方法

AlmaLinux 9でNFSサーバーとクライアントを構築
Linux

AlmaLinux 9でNFSサーバーとクライアントを構築