テクノロジーガイド

RAIDアレイの作成とデータ移行

3 min read サーバー管理 更新されました 11 Oct 2025
RAIDアレイ作成とデータ移行(mdadm + LVM)
RAIDアレイ作成とデータ移行(mdadm + LVM)

重要: 本手順は稼働中のシステムに対するディスク構成変更を含みます。バックアップを取得し、メンテナンス時間を確保してから実施してください。

前提条件と用語定義

  • mdadm: LinuxソフトウェアRAIDを管理するユーティリティ。配列作成、確認、再同期などを行う。
  • LVM (Logical Volume Manager): 論理ボリューム管理。pvcreate/vgextend/pvmoveなどで物理ボリュームやボリュームグループを操作する。
  • RAID1: ミラーリング。2台以上のディスクに同一データを書き、片方が壊れても動作を継続できる。
  • pvcreate/vgextend/pvmove: LVMの物理ボリューム作成、ボリュームグループ拡張、データ移動のためのコマンド。

これらの用語は本文中で簡潔に説明します。

4 RAIDアレイの作成

ここでは /dev/md0 と /dev/md1 を作成します。/dev/sdb1 は /dev/md0 に、/dev/sdb5 は /dev/md1 に追加します。/dev/sda1 および /dev/sda5 は現在システムが稼働中のため、直ちに追加できないので、一時的に missing を使ってアレイを作成します。

最初のコマンド(/dev/md0 を作成):

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

次に /dev/md1 を作成します(LVM用のミラー):

mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5

コマンド実行中に以下のようなメッセージが出ることがあります。プロンプトで y を押して続行します。

root@server1:~# mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/sdb5
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
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
root@server1:~#

ヒント: メタデータの位置とブート互換性に関する警告は、/boot をRAID上に置く場合の一般的な注意です。GRUB2構成で対応することが可能です。

作成直後に次のコマンドで状態を確認します:

cat /proc/mdstat

期待される表示例(作成直後は degraded):

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

md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]

unused devices: 
root@server1:~#

注記: [U] または [U] はアレイが degraded(片側が欠損)であることを示し、[UU] は両方のメンバーが正常であることを示します。

非LVMアレイにファイルシステム作成 (/dev/md0)

非LVMで使用する /dev/md0 に ext2 ファイルシステムを作成します。

mkfs.ext2 /dev/md0

注: /boot は小さく、古い環境やGRUBの互換性を考えて ext2 を使う例が多いですが、要件に応じて ext3/ext4 を選択してください。

LVM用のRAIDアレイの準備 (/dev/md1)

LVMで使う場合、物理ボリュームとして登録します:

pvcreate /dev/md1

ボリュームグループに追加します(例: server1 というVGを使用):

vgextend server1 /dev/md1

pvdisplay の出力例(/dev/md1 が追加されている):

root@server1:~# pvdisplay
--- Physical volume ---
PV Name               /dev/sda5
VG Name               server1
PV Size               4.76 GiB / not usable 2.00 MiB
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              1218
Free PE               0
Allocated PE          1218
PV UUID               8p9j8i-cc9a-bAJq-LFP9-CBMF-JrPl-SDbx4X

--- Physical volume ---
PV Name               /dev/md1
VG Name               server1
PV Size               4.76 GiB / not usable 1012.00 KiB
Allocatable           yes
PE Size               4.00 MiB
Total PE              1218
Free PE               1218
Allocated PE          0
PV UUID               W4I07I-RT3P-DK1k-1HBz-oJvp-6in0-uQ53KS

root@server1:~#

vgdisplay の例:

root@server1:~# vgdisplay
--- Volume group ---
VG Name               server1
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               9.52 GiB
PE Size               4.00 MiB
Total PE              2436
Alloc PE / Size       1218 / 4.76 GiB
Free  PE / Size       1218 / 4.76 GiB
VG UUID               m99fJX-gMl9-g2XZ-CazH-32s8-sy1Q-8JjCUW

root@server1:~#

mdadm設定の更新 (/etc/mdadm/mdadm.conf)

現在の mdadm.conf に新しいアレイ情報を追加します。まず念のためバックアップを取り、–examine –scan の出力を追記します:

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

内容を確認します:

cat /etc/mdadm/mdadm.conf

ファイル内には新しいアレイの定義が追加されているはずです(例):

| # mdadm.conf # # Please refer to mdadm.conf(5) for information about this file. # # by default, scan all partitions (/proc/partitions) for MD superblocks. # alternatively, specify devices to scan, using wildcards if desired. DEVICE partitions # auto-create devices with Debian standard permissions CREATE owner=root group=disk mode=0660 auto=yes # automatically tag new arrays as belonging to the local system HOMEHOST # instruct the monitoring daemon where to send mail alerts MAILADDR root # definitions of existing MD arrays # This file was auto-generated on Tue, 24 May 2011 21:11:37 +0200 # by mkconf 3.1.4-1+8efb9d1 ARRAY /dev/md/0 metadata=1.2 UUID=6cde4bf4:7ee67d24:b31e2713:18865f31 name=server1.example.com:0 ARRAY /dev/md/1 metadata=1.2 UUID=3ce9f2f2:ac89f75a:530c5ee9:0d4c67da name=server1.example.com:1 |

注: 上記は例の出力をそのまま示しています。環境により UUID や name は異なります。

/etc/fstabの更新

現在の /boot を指すエントリをコメントアウトし、代わりに /dev/md0 を /boot にマウントする行を追加します。編集例:

vi /etc/fstab

ファイル例:

| # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # proc /proc proc defaults 0 0 /dev/mapper/server1-root / ext3 errors=remount-ro 0 1 # /boot was on /dev/sda1 during installation #UUID=9b817b3e-2cea-4505-b1be-5ca9fd67f2ff /boot ext2 defaults 0 2 /dev/md0 /boot ext2 defaults 0 2 /dev/mapper/server1-swap_1 none swap sw 0 0 /dev/scd0 /media/cdrom0 udf,iso9660 user,noauto 0 0 /dev/fd0 /media/floppy0 auto rw,user,noauto 0 0 |

/boot を md0 に変更したら、/etc/mtab も反映させます(通常は mount 後に自動更新されますが、手動で編集する例を示します)。

vi /etc/mtab

例:

| /dev/mapper/server1-root / ext3 rw,errors=remount-ro 0 0 tmpfs /lib/init/rw tmpfs rw,nosuid,mode=0755 0 0 proc /proc proc rw,noexec,nosuid,nodev 0 0 sysfs /sys sysfs rw,noexec,nosuid,nodev 0 0 udev /dev tmpfs rw,mode=0755 0 0 tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0 devpts /dev/pts devpts rw,noexec,nosuid,gid=5,mode=620 0 0 /dev/md0 /boot ext2 rw 0 0 |

注意: /etc/mtab を手動編集するのは稀です。通常は mount コマンドやシステム起動時に自動で反映されます。

GRUB2 の調整

GRUB2 に RAID からの起動設定を追加します。まず /etc/grub.d/40_custom をコピーして新しいメニュー定義ファイルを作成します:

cp /etc/grub.d/40_custom /etc/grub.d/09_swraid1_setup
vi /etc/grub.d/09_swraid1_setup

例の中身:

| #!/bin/sh exec tail -n +3 $0 # This file provides an easy way to add custom menu entries. Simply type the # menu entries you want to add after this comment. Be careful not to change # the 'exec tail' line above. menuentry 'Debian GNU/Linux, with Linux 2.6.32-5-amd64' --class debian --class gnu-linux --class gnu --class os { insmod raid insmod mdraid insmod part_msdos insmod ext2 set root='(md/0)' echo 'Loading Linux 2.6.32-5-amd64 ...' linux /vmlinuz-2.6.32-5-amd64 root=/dev/mapper/server1-root ro quiet echo 'Loading initial ramdisk ...' initrd /initrd.img-2.6.32-5-amd64 } |

重要: linux と initrd の行にあるカーネルバージョンは実際に稼働中のカーネルに合わせる必要があります。現在のカーネルは次で確認できます:

uname -r

また、root=/dev/mapper/… の部分も自分のボリュームグループ名に合わせて修正してください。

特に重要なのが set root=’(md/0)’ の行です。これによりGRUBは /boot が存在するRAID1(/dev/md0)からブートしようとします。片方のディスクが故障してもブート可能にするため必須です。

UUIDではなくデバイス名を使う場合は /etc/default/grub の設定を変更します。

vi /etc/default/grub

ファイル内で以下の行をアンコメントして true にします:

GRUB_DISABLE_LINUX_UUID=true

update-grub 前の device.map の修正

GRUBの更新時に/dev/sdbがdevice.mapに無いと次のようなエラーが出ます:

root@server1:~# update-grub
Generating grub.cfg ...
/usr/sbin/grub-probe: error: Couldn't find PV pv1. Check your device.map.
root@server1:~#

このため /boot/grub/device.map に /dev/sdb を追加します:

vi /boot/grub/device.map

内容例:

| (hd0) /dev/sda (hd1) /dev/sdb |

その後、GRUB設定を更新します:

update-grub

最後に initramfs を再構築して現在の環境を反映させます:

update-initramfs -u

5 データをRAIDに移動する

ここまで設定を反映したら、/dev/sda の内容を /dev/sdb へ移動して、最終的に /dev/sda をRAIDメンバとして追加する手順を実行します。

まず LVM のデータを /dev/sda5 から /dev/md1 に移動します。pvmove を使います:

pvmove -i 2 /dev/sda5 /dev/md1

注: -i 2 は進捗更新間隔などの制御に使われることがあります。移行はデータ量に応じて時間がかかります。

移行が完了したら、古い物理ボリュームをVGから外します:

vgreduce server1 /dev/sda5

その後、pvremove でシステムに /dev/sda5 を使わせないようにします:

pvremove /dev/sda5

pvdisplay の例(移行後、/dev/md1 のみがアクティブなPVになっている):

root@server1:~# pvdisplay
--- Physical volume ---
PV Name               /dev/md1
VG Name               server1
PV Size               4.76 GiB / not usable 1012.00 KiB
Allocatable           yes (but full)
PE Size               4.00 MiB
Total PE              1218
Free PE               0
Allocated PE          1218
PV UUID               W4I07I-RT3P-DK1k-1HBz-oJvp-6in0-uQ53KS

root@server1:~#

次に /dev/sda5 のパーティションタイプを Linux raid autodetect に変更し、/dev/md1 に追加します。fdisk を使う例:

fdisk /dev/sda

対話出力の例:

root@server1:~# fdisk /dev/sda

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
switch off the mode (command 'c') and change display units to
sectors (command 'u').

Command (m for help): <-- t
Partition number (1-5): <-- 5
Hex code (type L to list codes): <-- fd
Changed system type of partition 5 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 or after you run partprobe(8) or kpartx(8)
Syncing disks.
root@server1:~#

パーティションタイプ変更後、/dev/md1 に /dev/sda5 を追加します:

mdadm --add /dev/md1 /dev/sda5

/proc/mdstat を見て、同期(recovery)が始まっていることを確認します:

cat /proc/mdstat

同期中の例:

root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/1] [_U]
[====>................]  recovery = 22.5% (1127872/4989940) finish=0.3min speed=161124K/sec

md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]

unused devices: 
root@server1:~#

進行状況を継続的に監視するには:

watch cat /proc/mdstat

終了まで待ち、[UU] 表示になれば同期完了です:

root@server1:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md1 : active raid1 sda5[2] sdb5[1]
4989940 blocks super 1.2 [2/2] [UU]

md0 : active raid1 sdb1[1]
248820 blocks super 1.2 [2/1] [_U]

unused devices: 
root@server1:~#

/dev/md0 をマウントして /boot の内容をコピー

まずディレクトリを作成してマウントします:

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

mount 出力例(/dev/md0 が /boot と /mnt/md0 にマウントされている):

root@server1:~# mount
/dev/mapper/server1-root on / type ext3 (rw,errors=remount-ro)
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)
proc on /proc type proc (rw,noexec,nosuid,nodev)
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)
udev on /dev type tmpfs (rw,mode=0755)
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)
/dev/md0 on /boot type ext2 (rw)
/dev/md0 on /mnt/md0 type ext2 (rw)
root@server1:~#

/boot の内容を新しいRAIDのマウントポイントへコピーします(パーミッション、リンク、拡張属性を維持):

cd /boot
cp -dpRx . /mnt/md0

cp のオプションの意味:

  • -d: シンボリックリンクを保持
  • -p: パーミッション、タイムスタンプを保持
  • -R: 再帰コピー
  • -x: 同一ファイルシステム内のみコピー(バインドマウントの跨ぎを避ける)

コピー後、/mnt/md0 の内容を確認して /boot に反映されていることを検証します。

追加の検証と重要なチェックポイント

  • /proc/mdstat が全アレイで [UU] になっていることを確認する。
  • /etc/mdadm/mdadm.conf に ARRAY 行が存在することを確認する。
  • /etc/fstab に /dev/md0 の /boot エントリがあることを確認する。
  • /boot/grub/device.map に両方のディスクがあること。
  • update-grub と update-initramfs がエラーなく完了していること。
  • 実際に片方のディスクを外す(あるいはオフラインにする)簡易テストを行い、システムが起動することを検証する(メンテナンスウィンドウ内で実施)。

簡易トラブルシュート集

  • mdadm: metadata at the start 警告

    • 意味: mdadm がアレイのメタデータを先頭に書いたため、一部の古いブートローダや設定とは互換性がない場合がある。
    • 対処: GRUB2 の設定で mdraid モジュールを使い (md/0) を指定する。必要であれば –metadata=0.90 を選ぶ(古いメタデータ配置)。
  • update-grub が /usr/sbin/grub-probe: Couldn’t find PV pv1 と出る

    • 意味: device.map にGRUBが参照するデバイスが足りない。
    • 対処: /boot/grub/device.map に全ディスクを追加して再実行。
  • fdisk 後に re-read パーティションテーブル失敗 (Device or resource busy)

    • 意味: カーネルが古いパーティションテーブルを保持している。
    • 対処: partprobe や kpartx を実行するか、再起動で新しいテーブルを反映させる。
  • 同期が非常に遅い/停止する

    • 確認: dmesg にI/Oエラーやディスク故障の兆候がないか確認。
    • 対処: mdadm –detail /dev/md1 で状態を確認。必要ならば一時的に同期を止めて原因を特定。
  • ブートできない場合

    • 手順: GRUBの設定(/boot/grub/grub.cfg)、/etc/default/grub、/etc/grub.d/09_swraid1_setup の set root が正しいか確認。
    • 可能な回復策: ライブUSBまたはレスキューモードから /boot をマウントし、grub-install を対象ディスクに実行してGRUBを再インストール。

役割別チェックリスト

  • システム管理者

    • バックアップを取得(全ボリュームのスナップショットまたはフルバックアップ)。
    • メンテナンス時間を確保。
    • 変更をドライランで文書化し、手順を確認。
  • ストレージ担当

    • デバイスのヘルスを確認(smartctl)。
    • ディスクの識別子(/dev/sda, /dev/sdb)を間違えないようラベル付け。
  • オペレーション担当

    • update-grub/update-initramfs 実行後のログ確認。
    • 冗長性テスト(片側ディスクを外した際の起動確認)を実施。

コマンドチートシート(本手順で使う主要コマンド)

  • RAID作成: mdadm –create /dev/mdX –level=1 –raid-disks=2 missing /dev/sdY
  • mdadm設定追記: mdadm –examine –scan >> /etc/mdadm/mdadm.conf
  • FS作成: mkfs.ext2 /dev/md0
  • LVM初期化: pvcreate /dev/md1
  • VG拡張: vgextend server1 /dev/md1
  • PV移動: pvmove -i 2 /dev/sda5 /dev/md1
  • PV削除: pvremove /dev/sda5
  • アレイ追加: mdadm –add /dev/md1 /dev/sda5
  • 状態確認: cat /proc/mdstat / mdadm –detail /dev/md1 / pvdisplay / vgdisplay
  • GRUB更新: update-grub
  • initramfs更新: update-initramfs -u

受入基準

  • /proc/mdstat で全アレイが [UU](完全同期)になっていること。
  • /boot が /dev/md0 に正しくマウントされ、必要なカーネルイメージとinitrdが存在していること。
  • update-grub と update-initramfs がエラーなしで終了していること。
  • 片側ディスクを意図的に外してもシステムが起動することをテストで確認する(推奨)。

まとめ

この手順では、稼働中のシステムに対して段階的にRAID1アレイを構築し、LVMのデータをミラー化したRAIDに移行し、GRUBを調整してRAIDから確実にブートするための一連の作業を扱いました。実行前にフルバックアップとメンテナンスウィンドウの確保、移行後の冗長性テストを必ず行ってください。

重要: 変更操作はデータ損失のリスクを伴います。各コマンド実行前に目的と影響を理解した上で進めてください。

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

類似の素材

WindowsでVHDを作成する方法
ITガイド

WindowsでVHDを作成する方法

どのAndroidでもスローモーションを有効化する方法
How-to

どのAndroidでもスローモーションを有効化する方法

Windows 10でINET_E_RESOURCE_NOT_FOUNDを3つの方法で修正
Windows

Windows 10でINET_E_RESOURCE_NOT_FOUNDを3つの方法で修正

Windows 10でごみ箱を自動的に空にする方法
Windows

Windows 10でごみ箱を自動的に空にする方法

Vivaldiでスピードダイヤルのサイズを変更する方法
ブラウザ

Vivaldiでスピードダイヤルのサイズを変更する方法

Root化AndroidでGoogle Payを使う方法
Android

Root化AndroidでGoogle Payを使う方法