テクノロジーガイド

RAID1 に移行する:RAID 配列作成から GRUB 設定まで

2 min read システム管理 更新されました 16 Oct 2025
RAID1 移行:mdadm と GRUB の手順
RAID1 移行:mdadm と GRUB の手順

重要: 実稼働システムで行う場合は、事前に完全バックアップを取り、メンテナンスウィンドウを確保してください。RAID 構築中は配列が degraded になりますが、適切に操作すれば再同期で冗長性が得られます。

4 RAID 配列の作成

まず /dev/md0, /dev/md1, /dev/md2 の RAID 配列を作成します。/dev/hdb1 を /dev/md0 に、/dev/hdb5 を /dev/md1 に、/dev/hdb6 を /dev/md2 に追加します。現在システムが /dev/hda1, /dev/hda5, /dev/hda6 を使用中のため、これらは追加できません。代わりにプレースホルダ missing を使って次のコマンドで配列を作成します。

mdadm --create /dev/md0 --level=1 --raid-disks=2 missing /dev/hdb1  
mdadm --create /dev/md1 --level=1 --raid-disks=2 missing /dev/hdb5  
mdadm --create /dev/md2 --level=1 --raid-disks=2 missing /dev/hdb6

配列を作成したら、/proc/mdstat を確認します。

cat /proc/mdstat

出力は 3 つの degraded RAID 配列を示すはずです([U] または [U] は degraded、[UU] は正常):

[root@server1 ~]# cat /proc/mdstat  
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]  
md2 : active raid1 hdb6[1]  
      4642688 blocks [2/1] [_U]  
  
md1 : active raid1 hdb5[1]  
      417536 blocks [2/1] [_U]  
  
md0 : active raid1 hdb1[1]  
      176576 blocks [2/1] [_U]  
  
unused devices:   
[root@server1 ~]#

次に RAID 配列上にファイルシステムを作成します。/dev/md0 と /dev/md2 は ext3、/dev/md1 は swap にします。

mkfs.ext3 /dev/md0  
mkswap /dev/md1  
mkfs.ext3 /dev/md2

次に /etc/mdadm.conf を現在の配列情報で更新します(現状では新しい配列情報が含まれていません)。

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

ファイルの中身を表示して、新しい配列情報が追加されていることを確認します。

cat /etc/mdadm.conf

テキストの例(配列情報が追加された例):

| # mdadm configuration file # # mdadm will function properly without the use of a configuration file, # but this file is useful for keeping track of arrays and member disks. # In general, a mdadm.conf file is created, and updated, after arrays # are created. This is the opposite behavior of /etc/raidtab which is # created prior to array construction. # # # the config file takes two types of lines: # # DEVICE lines specify a list of devices of where to look for # potential member disks # # ARRAY lines specify information about how to identify arrays so # so that they can be activated # # You can have more than one device line and use wild cards. The first # example includes SCSI the first partition of SCSI disks /dev/sdb, # /dev/sdc, /dev/sdd, /dev/sdj, /dev/sdk, and /dev/sdl. The second # line looks for array slices on IDE disks. # #DEVICE /dev/sd[bcdjkl]1 #DEVICE /dev/hda1 /dev/hdb1 # # If you mount devfs on /dev, then a suitable way to list all devices is: #DEVICE /dev/discs/*/* # # # # ARRAY lines specify an array to assemble and a method of identification. # Arrays can currently be identified by using a UUID, superblock minor number, # or a listing of devices. # # super-minor is usually the minor number of the metadevice # UUID is the Universally Unique Identifier for the array # Each can be obtained using # # mdadm -D # #ARRAY /dev/md0 UUID=3aaa0122:29827cfa:5331ad66:ca767371 #ARRAY /dev/md1 super-minor=1 #ARRAY /dev/md2 devices=/dev/hda1,/dev/hdb1 # # ARRAY lines can also specify a "spare-group" for each array. mdadm --monitor # will then move a spare between arrays in a spare-group if one array has a failed # drive but no spare #ARRAY /dev/md4 uuid=b23f3c6d:aec43a9f:fd65db85:369432df spare-group=group1 #ARRAY /dev/md5 uuid=19464854:03f71b1b:e0df2edd:246cc977 spare-group=group1 # # When used in --follow (aka --monitor) mode, mdadm needs a # mail address and/or a program. This can be given with "mailaddr" # and "program" lines to that monitoring can be started using # mdadm --follow --scan & echo $! > /var/run/mdadm # If the lines are not found, mdadm will exit quietly #MAILADDR [email protected] #PROGRAM /usr/sbin/handle-mdadm-events ARRAY /dev/md0 level=raid1 num-devices=2 UUID=6b4f013f:6fe18719:5904a9bd:70e9cee6 ARRAY /dev/md1 level=raid1 num-devices=2 UUID=63194e2e:c656857a:3237a906:0616f49e ARRAY /dev/md2 level=raid1 num-devices=2 UUID=edec7105:62700dc0:643e9917:176563a7 |

5 システムを RAID1 に合わせて調整する

ここでは /dev/md0 と /dev/md2 をマウントします(swap の /dev/md1 はマウント不要)。

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

mount コマンドの出力で両方の配列がマウントされていることを確認します。

mount
[root@server1 ~]# mount  
/dev/hda6 on / type ext3 (rw,relatime)  
none on /proc type proc (rw)  
/dev/hda1 on /boot type ext3 (rw,relatime)  
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)  
/dev/md0 on /mnt/md0 type ext3 (rw)  
/dev/md2 on /mnt/md2 type ext3 (rw)  
[root@server1 ~]#

次に /etc/fstab を編集して、/dev/hda1 -> /dev/md0、/dev/hda5 -> /dev/md1、/dev/hda6 -> /dev/md2 に置き換えます。例として最終的な /etc/fstab の内容は以下のようになります:

| /dev/md2 / ext3 relatime 1 1 /dev/md0 /boot ext3 relatime 1 2 /dev/cdrom /media/cdrom auto umask=0022,users,iocharset=utf8,noauto,ro,exec 0 0 /dev/fd0 /media/floppy auto umask=0022,users,iocharset=utf8,noauto,exec,flush 0 0 none /proc proc defaults 0 0 /dev/md1 swap swap defaults 0 0 |

/ etc/mtab も更新します(実行中のマウント情報の置換)。/dev/hda1 を /dev/md0 に、/dev/hda6 を /dev/md2 に置き換えてください。例:

| /dev/md2 / ext3 rw,relatime 0 0 none /proc proc rw 0 0 /dev/md0 /boot ext3 rw,relatime 0 0 none /proc/sys/fs/binfmt_misc binfmt_misc rw 0 0 /dev/md0 /mnt/md0 ext3 rw 0 0 /dev/md2 /mnt/md2 ext3 rw 0 0 |

次に GRUB の設定を変更します。/boot/grub/menu.lst を開き、default 0 の直後に fallback 1 を追加します。

vi /boot/grub/menu.lst

| [...] default 0 fallback 1 [...] |

これで 0 番目のカーネルがブートに失敗した場合、次の(fallback)エントリが起動されます。

同ファイルのカーネルスタンザを複製し、ルートデバイスとディスク番号を /dev/md2 と (hd1,0) に変更します。resume オプションがある場合は /dev/hda5 を /dev/md1 に置き換えます。

| [...] title linux kernel (hd1,0)/vmlinuz BOOT_IMAGE=linux root=/dev/md2 resume=/dev/md1 initrd (hd1,0)/initrd.img title linux kernel (hd0,0)/vmlinuz BOOT_IMAGE=linux root=/dev/hda6 resume=/dev/hda5 initrd (hd0,0)/initrd.img |

最終的に menu.lst は次のようになります(例):

| timeout 10 color black/cyan yellow/cyan default 0 fallback 1 title linux kernel (hd1,0)/vmlinuz BOOT_IMAGE=linux root=/dev/md2 resume=/dev/md1 initrd (hd1,0)/initrd.img title linux kernel (hd0,0)/vmlinuz BOOT_IMAGE=linux root=/dev/hda6 resume=/dev/hda5 initrd (hd0,0)/initrd.img title failsafe kernel (hd0,0)/vmlinuz BOOT_IMAGE=failsafe root=/dev/hda6 failsafe initrd (hd0,0)/initrd.img |

(hd1,0) は /dev/hdb の 1 パーティションを指します。これでシステムを再起動すると degraded な RAID からのブートを試み、失敗したら /dev/hda から起動します(fallback)。

initrd を新しい環境に合わせて再作成します。

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

次に、/dev/hda1(/boot)と /dev/hda6(ルート)の内容をそれぞれ /mnt/md0 と /mnt/md2 にコピーします。

cp -dpRx / /mnt/md2
cd /boot  
cp -dpRx . /mnt/md0

6 GRUB の準備(パート 1)

次に GRUB を第2ディスク(/dev/hdb)にもインストールします。GRUB シェルを起動して次のコマンドを打ちます。

grub

GRUB のプロンプトで:

root (hd0,0)

(出力例)

grub> root (hd0,0)  
 Filesystem type is ext2fs, partition type 0x83  
  
grub>
setup (hd0)

(出力例)

grub> setup (hd0)  
 Checking if "/boot/grub/stage1" exists... no  
 Checking if "/grub/stage1" exists... yes  
 Checking if "/grub/stage2" exists... yes  
 Checking if "/grub/e2fs_stage1_5" exists... yes  
 Running "embed /grub/e2fs_stage1_5 (hd0)"...  15 sectors are embedded.  
 succeeded  
 Running "install /grub/stage1 (hd0) (hd0)1+15 p (hd0,0)/grub/stage2 /grub/menu.lst"... succeeded  
 Done.  
  
grub>

次に /dev/hdb 側も同様に設定します(hd1 が /dev/hdb)。

root (hd1,0)
setup (hd1)
quit

最後に通常シェルで再起動して、RAID 配列からの起動が成功するか確認します。

reboot

追加情報と実務チェックリスト

キーコマンド(ファクトボックス)

  • 配列作成: mdadm –create
  • 配列確認: cat /proc/mdstat、mdadm –detail /dev/mdX
  • ファイルシステム作成: mkfs.ext3, mkswap
  • mdadm.conf 更新: mdadm –examine –scan >> /etc/mdadm.conf
  • initrd 再作成: mkinitrd
  • GRUB 設置: grub -> root / setup

ロール別チェックリスト

  • システム管理者:
    • 完全バックアップを取得する
    • メンテナンスウィンドウを確保する
    • /proc/mdstat と mdadm –detail を監視する
  • ストレージ管理者:
    • mdadm.conf に UUID で配列を登録することを検討する
    • 再同期後に spare を追加する手順を準備する
  • 運用担当者:
    • 再起動後のサービス開始順序を確認する
    • 障害時のフェールオーバー手順を準備する

トラブルシューティング(よくある失敗例と対処)

  • ブートしない(GRUB 関連):
    • 両ディスクに必ず GRUB をインストールする。/boot が RAID でなくても GRUB は MBR に必要。
    • menu.lst の root=(hd,) 設定が正しいか(ディスク番号の違いに注意)。
  • 配列が再同期しない:
    • dmesg と /var/log/messages を確認。障害ドライブや接続不良を疑う。
  • mount 時に UUID/デバイス名が一致しない:
    • /etc/fstab を UUID ベースに変更する(blkid で確認)。

代替アプローチ

  • 新規に空きディスクがある場合は、直接両ディスクをパリティで組んでからデータを移行する方法がより短時間で安全。
  • fstab には可能なら /dev/mdX の代わりに UUID=… を使うと、デバイス名のズレによるマウント失敗を避けられます。

意思決定フローチャート(Mermaid)

flowchart TD
  A[準備: バックアップ取得] --> B{RAID 構築方法は?}
  B -->|既存稼働ディスクを活かす| C[missing を使って degraded で作成]
  B -->|空きディスクで新規構築| D[新規 RAID を構築してデータ移行]
  C --> E[ファイルシステム作成 -> mdadm.conf 更新 -> fstab 更新]
  E --> F[GRUB を両ディスクにインストール]
  F --> G[再起動して動作確認]
  D --> G

要約

  • degraded 状態で RAID1 を作成して稼働中システムを RAID に移行できます。
  • /etc/mdadm.conf, /etc/fstab, /boot/grub/menu.lst, initrd を適切に更新してください。
  • 両ディスクに GRUB をインストールし、再起動後に正常にブートするか確認します。

重要: 実運用環境では必ず事前バックアップと段階的検証を行ってください。

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

類似の素材

Debian 11 に Podman をインストールして使う
コンテナ

Debian 11 に Podman をインストールして使う

Apt-pinning入門:Debianで複数リポジトリを管理
Linux

Apt-pinning入門:Debianで複数リポジトリを管理

OptiScalerでFSR 4を全対応ゲームに導入する方法
ゲーム

OptiScalerでFSR 4を全対応ゲームに導入する方法

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法
ネットワーク

Dansguardian と Squid(NTLM)を Debian Etch に導入する方法

AndroidでSDカードのインストールエラーを修正する方法
トラブルシューティング

AndroidでSDカードのインストールエラーを修正する方法

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定
Linux ネットワーク

KNetAttach と KDE の remote:/ でネットワークフォルダーを設定