CentOS 5: Converting RAID1 to RAID5 with no data loss
![](https://206rc.net/wp-content/uploads/2014/10/20141002_105837.jpg)
ソフトウェア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)
1. 稼働中のシステムをシャットダウン、インストールCD/DVDを使ってレスキューモードで起動します。
boot:プロンプトが出たら"linux rescue"と入力するか、F5キーを押します。
2. 言語は"English"、キーボードは"jp106"、ネットワークは"No"、レスキューは"Skip"を選択します。
3. 既存ファイルシステムをマウントせずに、コマンド入力待ちになります。
- 既存の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>
- 電源を切ってハードディスクを増設します。
sh-3.2# sync;sync;sync sh-3.2# poweroff
6. インストールCD/DVDを使ってレスキューモードで再度起動します。
言語は"English"、キーボードは"jp106"、ネットワークは"No"、レスキューは"Continue"を選択します。
7. 増設したHDD(/dev/sdc)を検出、初期化するか尋ねられるので、"Yes"を選択します。
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>
- 増設した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
- 作成したパーティーション(/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>
スペアディスクとして認識されます。
- /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)が増えていることがわかります。
- 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に反映されて、使用可能になります。
- RAID構成ファイルの更新
sh-3.2# chroot /mnt/sysimage sh-3.2# mdadm --examine --scan >> /etc/mdadm.conf sh-3.2# vi /etc/mdadm.conf
※ARRAYの行を後から追記したものを有効にして古い行を削除します。
- 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コマンドで再作成します。
作成後は再起動します。
- 動作確認
HDDから正常に起動することを確認します。
何か問題がある場合はカーネルパニックが発生して、システムが起動しません。
原因を突き止め、作業をやり直してください。