3TBの大容量HDDでXenserver6をraid1化する。(v6.0.2)

・参考URL
http://blog.codeaddict.org/?p=5#
http://pastebin.com/psaWg7QK#
http://orangesooda.com/centos_redhat/2009/05/xenserverraid1.html

・前提
XenserverはGPT形式でインストールされる。
fdiskはMBR形式しか扱えないため、GPT形式に対応しているgdiskを利用する。(MBR形式は2TB以上は認識しない)
GPTとは?>> http://plaza.rakuten.co.jp/bluearth/diary/20100115/
/dev/sdaは最低限しか扱わないようにして、/dev/sdbだけでとりあえず起動出来る形にしておき
最後にArrayに追加する方法にしている。
試行錯誤してやって最後にまとめたので間違いがあるかも。上の参考URLに書いてある事を混ぜながらやったので
出来ない場合はそちらを参考にしてください。責任は取れませんので^^;

・使用HDD
/dev/sda … 3TB HDDその1(こちらにXenserverがインストールされている)
/dev/sdb … 3TB HDDその2(空っぽ)

はじめに/dev/sdaと/dev/sdbのパーティションを同じ構成にする

# gdisk -l /dev/sda
Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         8388641   4.0 GiB     0700
   2         8390656        16777249   4.0 GiB     0700
   3        16779264      5860533134   2.7 TiB     8E00

# sgdisk --zap-all /dev/sdb
# sgdisk --mbrtogpt --clear /dev/sdb
# sgdisk --new=1:34:8388641 /dev/sdb
# sgdisk --typecode=1:fd00 /dev/sdb
# sgdisk --attributes=1:set:2 /dev/sdb
# sgdisk --new=2:8388642:16777249 /dev/sdb
# sgdisk --typecode=2:fd00 /dev/sdb
# sgdisk --new=3:16777250:5860533134 /dev/sdb
# sgdisk --typecode=3:fd00 /dev/sdb

パーティションを作ったのでとりあえず一度reboot。
再起動後、RAID1を/dev/sdbだけで組み上げる。

# mknod /dev/md0 b 9 0
# mknod /dev/md1 b 9 1
# mknod /dev/md2 b 9 2
# mdadm --create /dev/md0 --level=1 --raid-devices=2 missing /dev/sdb1
# mdadm --create /dev/md1 --level=1 --raid-devices=2 missing /dev/sdb2
# mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb3
# mdadm --grow /dev/md0 -b internal
# mdadm --grow /dev/md1 -b internal
# mdadm --grow /dev/md2 -b internal

ボリュームグループ(VG)に/dev/md2 を追加する

# pvcreate /dev/md2
# vgextend VG_ /dev/md2
# pvmove /dev/sda3 /dev/md2
sda3からVGを削除する
# vgreduce VG_ /dev/sda3
# pvremove /dev/sda3

/dev/sda1の中身を/dev/md0にコピーする

# mkfs.ext3 /dev/md0
# mount /dev/md0 /mnt
# cd /
# cp -axR . /mnt

ブートイメージを作成する

# mkdir /mnt/root/initrd
# cd /mnt/root/initrd
# zcat /mnt/boot/initrd-`uname -r`.img | cpio -i
# ls /lib/modules/`uname -r`/kernel/drivers/md/raid*
# cp /lib/modules/`uname -r`/kernel/drivers/md/raid1.ko lib/

# vi init
"echo Waiting for driver initialization." の前の行に次を追加。
echo "Loading raid1.ko module"
insmod /lib/raid1.ko

"resume /var/swap/swap.001"の後の行に次を追加。
echo Running raidautorun
raidautorun /dev/md0
raidautorun /dev/md1
raidautorun /dev/md2
その次の行の "・・・sda1" を "・・・md0" に直す。

# find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`.img

# cp -f /mnt/boot/extlinux.conf /boot/extlinux.conf

# vi /mnt/etc/fstab
 一番上の行のLABELを以下に変更
 /dev/md0 / ext3 defaults 1 1

# vi /mnt/boot/extlinux.conf
 5つほど「root=LABEL=**********」という箇所があるので全て「root=/dev/md0」に変更する

/dev/sdbのマスターブートレコードにextlinuxを書き込む
# cat /mnt/usr/share/syslinux/gptmbr.bin > /dev/sdb
# cd /mnt
# extlinux  --raid -i boot/

再起動するとmd2が外れたり不安定なのでこの段階でmdadmの設定ファイルを書きだしておくとよい

# mdadm --detail --scan > /mnt/etc/mdadm.conf

/dev/md0をアンマウント
# cd
# umount /dev/md0
# sync

最後に再起動
# reboot

BIOSから2つ目のHDD(/dev/sdb)から起動してみて、無事起動すれば成功。ロゴで止まったりすれば失敗なので
ブート関連を再度チェック。私のM/Bの場合、起動時にF10を押すとBOOT選択画面に遷移。

無事起動した後は/dev/sdaをRaid1に参加させる。

# mkdir root/initrd
# cd /root/initrd
# find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`.img


# sgdisk --typecode=1:fd00 /dev/sda
# sgdisk --typecode=2:fd00 /dev/sda
# sgdisk --typecode=3:fd00 /dev/sda
# mdadm -a /dev/md0 /dev/sda1
# mdadm -a /dev/md1 /dev/sda2
# mdadm -a /dev/md2 /dev/sda3

進捗確認(CTRL+Cで終了)
# watch -n 1 cat /proc/mdstat

[2012/07/12]sionoさんコメント参考に修正