XenServerはベースがRedHat Enterprise Linux 5なのでこちらに書きます。XenServerのインストーラはディスクのミラーに対応してませんが、ベースがRedHat EL5なので インストール後ミラー化できるらしいのでやってみる。慣れたら簡単。 参考にしたページはこちら。
無料になった XenServer を RAID1化してみる
http://www.space-i.jp/wordpress/?p=168
元記事
http://dmit.lv/xs50raid/XenServer-on-RAID.txt
<RAIDデバイスの作成>
#まずパーティションを /dev/sda と /dev/sdb を同じレイアウトにする。
fdisk -l /dev/sda
Disk /dev/sda: 82.3 GB, 82348277760 bytes 255 heads, 63 sectors/track, 10011 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Device Boot Start End Blocks Id System /dev/sda1 * 1 499 4008186 83 Linux /dev/sda2 500 998 4008217+ 83 Linux /dev/sda3 999 10011 72396922+ 83 Linux |
#ここで表示されたのと同じように /dev/sdb のパーティションを作成する。 /dev/sdb1 に Bootフラグを付けるのを忘れない。
#パーティションの作成方法は簡単なので手順省略。
#そして、/dev/sda も /dev/sdb もともに RAIDを構成するパーティションのID を 83 から fd に変更しておく。
#このようになる。
#/dev/sda
Device Boot Start End Blocks Id System /dev/sda1 * 1 499 4008186 fd Linux raid autodetect /dev/sda2 500 998 4008217+ 83 Linux /dev/sda3 999 10011 72396922+ fd Linux raid autodetect |
#/dev/sdb
Device Boot Start End Blocks Id System /dev/sdb1 * 1 499 4008186 fd Linux raid autodetect /dev/sdb2 500 998 4008217+ 83 Linux /dev/sdb3 999 10011 72396922+ fd Linux raid autodetect |
#ここまでできたら一度再起動
reboot
#立ち上がったら /dev/sdb だけを使って RAID /dev/md0 と /dev/md2 を作成する。
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 missing
mknod /dev/md2 b 9 2
mdadm --create /dev/md2 --level=1 --raid-devices=2 /dev/sdb3 missing
#RAIDの状態を確認しておく。
cat /proc/mdstat
<LVMを操作する>
#おおまかな手順として /dev/sda3 が LVMに構成されているので、 ここに /dev/md2 を追加して データを /dev/md2 に移してから /dev/sda3 をLVMから外す。
#もし 何回かやり直しているときは次のコマンドで /dev/md2 を LVM から外しておく。 論理ボリュームの操作を省略して 物理ボリューム(PV) の登録から外せばOK。
#pvremove -ff /dev/md2
#物理ボリューム(PV)に デバイス/dev/md2 を登録する
pvcreate /dev/md2
#物理ボリューム(PV)を調べる
pvscan
| ---表示--- PV /dev/sda3 VG VG_XenStorage-8af83059-9c29-ae1a-93eb-d7d960173cbf lvm2 [141.39 GB / 141.39 GB free] PV /dev/md2 lvm2 [141.40 GB] Total: 2 [282.79 GB] / in use: 1 [141.39 GB] / in no VG: 1 [141.40 GB] ---表示--- |
#ボリュームグループ(VG)を調べる
vgscan
vgdisplay
| ---表示--- ・ ・ VG Name VG_XenStorage-8af83059-9c29-ae1a-93eb-d7d960173cbf ・ ・ ---表示--- |
#ボリュームグループ(VG)に、 /dev/md2 を追加する
vgextend VG_XenStorage-8af83059-9c29-ae1a-93eb-d7d960173cbf /dev/md2
#/dev/sda3 と、 /dev/md2(/dev/sdb3だけで構成されているRAID)あわせた容量が VG として認識されている。
#それで /dev/sda3 上の物理データを /dev/md2 に移動する。 まだ使っていないので移動されるデータは0 ですが、まぁ一応。
pvmove /dev/sda3 /dev/md2
#ボリュームグループ(VG)から /dev/sda3 を外す
vgreduce VG_XenStorage-8af83059-9c29-ae1a-93eb-d7d960173cbf /dev/sda3
#物理ボリューム(PV) の登録から/dev/sda3 を外す
pvremove /dev/sda3
#ここまでうまくいくと データ領域のみ /dev/md2 を使用している。 この状態で作業を中断して電源断しても問題無い。
<ブートイメージの作成準備>
mkdir /root/initrd
cd /root/initrd
zcat /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/md2 その次の行の "・・・sda1" を "・・・md0" に直す。 |
#
find . -print | cpio -o -Hnewc | gzip -c > /boot/initrd-`uname -r`.img (*)
準備OK。
</ を /dev/sda1 から/dev/md0 に移す>
#注意:フォーマットするには mkfs を使わず mke2fs -j を使うこと。 mkfs を使うと ext2 になる。
mke2fs-j /dev/md0
mount /dev/md0 /mnt
cd /
cp -axv . /mnt
cd /root/initrd
find . -print | cpio -o -Hnewc | gzip -c > /boot/initrd-`uname -r`.img
find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`.img
cp -f /mnt/boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img
vi /mnt/boot/extlinux.conf
#(root=LABEL=xxxx を root=/dev/md0 に書き換える)
cp -f /mnt/boot/extlinux.conf /boot/extlinux.conf
vi /mnt/etc/fstab
| /dev/md0 / ext3 defaults 1 1 /var/swap/swap.001 swap swap defaults 0 0 none /dev/pts devpts defaults 0 0 none /dev/shm tmpfs defaults 0 0 none /proc proc defaults 0 0 none /sys sysfs defaults 0 0 |
cp -f /mnt/etc/fstab /etc/fstab
#/dev/sdbのマスターブートレコードにextlinux ブートローダ を書き込む
cat /usr/lib/syslinux/mbr.bin > /dev/sdb
cd /mnt
extlinux -i boot/
cd
umount /mnt
sync
reboot
<同期>
#これで、 md0 と md2 を使った XenServerが起動するはず。 /dev/sda を RAIDに参加させれば作業は終了。
mdadm -a /dev/md0 /dev/sda1
mdadm -a /dev/md1 /dev/sda3
cat /proc/mdstat
#同期中は次のように表示される。
Personalities : [raid1]
md2 : active raid1 sda3[2] sdb3[1]
148271808 blocks [2/1] [_U]
resync=DELAYED
md0 : active raid1 sda1[2] sdb1[1]
4008064 blocks [2/1] [_U]
[========>............] recovery = 43.4% (1742976/4008064) finish=1.4min speed=26727K/sec
unused devices: <none> |
#同期が終わったら RAIDの情報を 覚え書きファイルに書き出しておきます。
mdadm --detail --scan > /etc/mdadm.conf
<補足>
故障時、とりあえず生きているほうのDISKで起動させればいい。 その際、BIOS上のデバイス番号(SATA0,SATA1など)の順番は気にしなくても大丈夫です。HDに書き込まれたRAIDの順序が使われるようになっています。 mdraid賢い。

コメントする