無償になったXenServerのRAID1化

| コメント(0) | トラックバック(0)

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賢い。

トラックバック(0)

トラックバックURL: http://orangesooda.com/mtos/mt-tb.cgi/89

コメントする

このブログ記事について

このページは、NAKANO SHUICHIが2009年5月15日 17:35に書いたブログ記事です。

ひとつ前のブログ記事は「FDclone(3.0j)」です。

次のブログ記事は「X25-M Mainstream SATA SSD SSDSA2MH160G2R5 をCentOSで使う」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。