CentOS 5: Converting RAID1 to RAID5 with no data loss

ソフトウェアRAID1で稼働中のCentOS 5.9をオフラインでソフトウェアRAID5に変換しました。
一応データを失うことなく変換可能でしたが、コマンドを打ち間違えればデータを失うリスクはあります。
作業前にはバックアップを作成することをオススメします。
※コマンドの引数(パラメーター)はお使いの環境に合わせて適宜読み替えて下さい。
記事のままに実行して環境を破壊しても責任は持ちません。

試した環境
仮想サーバ(VMware ESXi)

= HDD構成 =
1台目: /dev/sda 8589MB(約8GB)
2台目: /dev/sdb 8589MB(約8GB)

= パーテーション構成 =
1: /dev/sd[ab]1 100MB linux raid autodetect
2: /dev/sd[ab]2 8489MB linux raid autodetect

= RAID構成 =
/dev/md0: /dev/sd[ab]1 RAID1
/dev/md1: /dev/sd[ab]2 RAID1

= LVM構成 =
PV: /dev/md1
VG: VolGroup00
LV:
/dev/VolGroup00/LogVol00 7552MB
/dev/VolGroup00/LogVol01 512MB

= マウント状況 =
/boot(filesystem): /dev/md0
/(filesystem): LVM(/dev/VolGroup00/LogVol00)
swap: LVM(/dev/VolGroup00/LogVol01)

RAID5用として...
3台目のHDD: /dev/sdb 8589MB(約8GB)

20141002_105837
1. 稼働中のシステムをシャットダウン、インストールCD/DVDを使ってレスキューモードで起動します。
boot:プロンプトが出たら"linux rescue"と入力するか、F5キーを押します。

20141002_110017 20141002_110125
20141002_110139 20141002_110154
2. 言語は"English"、キーボードは"jp106"、ネットワークは"No"、レスキューは"Skip"を選択します。

20141002_110310
3. 既存ファイルシステムをマウントせずに、コマンド入力待ちになります。

  1. 既存のRAID1をRAID5に変換します。
sh-3.2# mdadm --create /dev/md1 --level=5 -n 2 /dev/sd[ab]2
mdadm: /dev/sda2 appears to be part of a raid array:
    level=raid1 devices=2 ctime=<作成した日時>
mdadm: /dev/sdb2 appears to be part of a raid array:
    level=raid1 devices=2 ctime=<作成した日時>
Continue creating array? y

変換が終わるのを待ちます。

sh-3.2# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md1 : active raid5 sdb2[2] sda2[0]
      8281408 blocks level 5, 64k chunk, algorithm 2 [2/1] [U_]
      [===>.................]  recovery = 17% (1474560/8281408) finish=2.5min
speed=44841K/sec

unused devices: <none>

↓

Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md1 : active raid5 sdb2[2] sda2[0]
      8281408 blocks level 5, 64k chunk, algorithm 2 [2/2] [UU]

unused devices: <none>
  1. 電源を切ってハードディスクを増設します。
sh-3.2# sync;sync;sync
sh-3.2# poweroff

20141002_110125
20141002_110139 20141002_110215
6. インストールCD/DVDを使ってレスキューモードで再度起動します。
言語は"English"、キーボードは"jp106"、ネットワークは"No"、レスキューは"Continue"を選択します。

20141002_110229 20141002_110244
7. 増設したHDD(/dev/sdc)を検出、初期化するか尋ねられるので、"Yes"を選択します。

20141002_110310
8. 既存ファイルシステムを/mnt/sysimageにマウントして、コマンド入力待ちになります。
起動後のRAID構成情報は以下の通りです。

sh-3.2# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md1 : active raid5 sdb2[2] sda2[0]
      8281408 blocks level 5, 64k chunk, algorithm 2 [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
      104320 blocks [2/2] [UU]

unused devices: <none>
  1. 増設したHDDのパーティションを作成します。
sh-3.2# echo -e "n\np\n1\n1\n13\nn\np\2\n14\n1044\nt\n2\nfd\np\nw\n" | fdisk /dev/sdc
  1. 作成したパーティーション(/dev/sdc2)を/dev/md1(RAID5)に組み込みます。
sh-3.2# mdadm /dev/md1 --add /dev/sdc2
mdadm: added /dev/sdc2
sh-3.2# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md1 : active raid5 sdc2[2](S) sdb2[1] sda2[0]
      8281408 blocks level 5, 64k chunk, algorithm 2 [2/2] [UU]
md0 : active raid1 sdb1[1] sda1[0]
      104320 blocks [2/2] [UU]

unused devices: <none>

スペアディスクとして認識されます。

  1. /dev/md1(RAID5)をHDD3台で再構築させます。
sh-3.2# mdadm --grow /dev/md1 --raid-disks=3
mdadm: Need to backup 128K of critical section..
mdadm: ...critical section passwd.
sh-3.2# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md1 : active raid5 sdc2[2] sdb2[1] sda2[0]
      8281408 blocks super 0.91 level 5, 64k chunk, algorithm 2 [3/3] [UUUU]
      [>....................]  reshape = 4.5% (381708/8281408) finish=20.3min
speed=6454K/sec

unused devices: <none>
sh-3.2# mdadm --detail /dev/md1
/dev/md1:
        Version : 0.91
  Creation Time : <作成した日時>
     Raid Level : raid5
     Array Size : 8281408 (7.90 GiB 8.48 GB)
  Used Dev Size : 8281408 (7.90 GiB 8.48 GB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : <更新した日時>
          State : clean, recovering
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

 Reshape Status : 67% complete
  Delta Devices : 1, (2->3)

           UUID : 3d91132c:128e3822:b0909678:1736052d
         Events : 0.53066

    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       8       18        1      active sync   /dev/sdb2
       2       8       34        2      active sync   /dev/sdc2

再構築中の状況。再構築が完了するまでは電源を切らないようにします。

sh-3.2# cat /proc/mdstat
Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md1 : active raid5 sdc2[2] sdb2[1] sda2[0]
      16562816 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU]
md0 : active raid1 sdb1[1] sda1[0]
      104320 blocks [2/2] [UU]

unused devices: <none>
sh-3.2# mdadm --detail /dev/md1
/dev/md1:
        Version : 0.91
  Creation Time : <作成した日時>
     Raid Level : raid5
     Array Size : 16562816 (15.80 GiB 16.96 GB)
  Used Dev Size : 8281408 (7.90 GiB 8.48 GB)
   Raid Devices : 3
  Total Devices : 3
Preferred Minor : 1
    Persistence : Superblock is persistent

    Update Time : <更新した日時>
          State : clean
 Active Devices : 3
Working Devices : 3
 Failed Devices : 0
  Spare Devices : 0

         Layout : left-symmetric
     Chunk Size : 64K

           UUID : 3d91132c:128e3822:b0909678:1736052d
         Events : 0.5532

    Number   Major   Minor   RaidDevice State
       0       8        2        0      active sync   /dev/sda2
       1       8       18        1      active sync   /dev/sdb2
       2       8       34        2      active sync   /dev/sdc2

再構築完了の状況。/dev/md1の容量(Array Size)が増えていることがわかります。

  1. LVMへの反映
sh-3.2# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               VolGroup00
  PV Size               7.90 GB / not usable 23.31 MB
  Allocatable           yes (but full)
  PE Size (KByte)       32768
  Total PE              252
  Free PE               0
  Allocated PE          252
  PV UUID               3LJ2H3-npM9-FDmx-iiG5-dPOv-xVnq-e0o62S

LVMには反映されていないので...

sh-3.2# pvresize /dev/md1
  Physical volme "/dev/md1" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized

"pvresize /dev/md1"コマンドを実行すると...

sh-3.2# pvdisplay
  --- Physical volume ---
  PV Name               /dev/md1
  VG Name               VolGroup00
  PV Size               15.80 GB / not usable 14.44 MB
  Allocatable           yes
  PE Size (KByte)       32768
  Total PE              505
  Free PE               253
  Allocated PE          252
  PV UUID               3LJ2H3-npM9-FDmx-iiG5-dPOv-xVnq-e0o62S

LVMに反映されて、使用可能になります。

  1. RAID構成ファイルの更新
sh-3.2# chroot /mnt/sysimage
sh-3.2# mdadm --examine --scan >> /etc/mdadm.conf
sh-3.2# vi /etc/mdadm.conf

※ARRAYの行を後から追記したものを有効にして古い行を削除します。

  1. RAMDISKの更新
sh-3.2# mkinitrd -f -v /boot/initrd-2.6.18-348.el5.img 2.6.18-348.el5
sh-3.2# sync
sh-3.2# reboot

mkinitrdコマンドで再作成します。
作成後は再起動します。

  1. 動作確認
    HDDから正常に起動することを確認します。
    何か問題がある場合はカーネルパニックが発生して、システムが起動しません。
    原因を突き止め、作業をやり直してください。