XenServer 6.2 com RAID1 via Software
First: Install XenServer on first disk (/dev/sda) and NOT configure any local storage. /dev/sda should contain three partitions, verify this with:
# sgdisk -p /dev/sda
In some cases XenServer doesn’t create third partition, i.e. result of this command has only two partitions and looks like:
Number Start (sector) End (sector) Size Code Name 1 2048 8388641 4.0 GiB 0700 2 8390656 16777249 4.0 GiB 0700
In this case you need to create third partition manually:
# sgdisk --new=3:16779264:DISK_SIZE-34 /dev/sda # sgdisk --typecode=3:fd00
The second partition is used for backups during a XenServer upgrade. This partition won’t used in my XenServer upgrade method. Now we are going to use /dev/sdb as the mirror disk. First clear the partition table.
# sgdisk --zap-all /dev/sdb
# reboot
install a GPT table on it
# sgdisk --mbrtogpt --clear /dev/sdb
# reboot
The following commands are dependent on your installation. You must copy the start and end sectors from /dev/sda, but in practice, for Xenserver (checked on 6.1,6.2) you must only change DISK_SIZE with sectors on /dev/sdb (first string from output of command:
# sgdisk -p /dev/sdb
# sgdisk --new=1:2048:8388641 /dev/sdb # sgdisk --typecode=1:fd00 /dev/sdb # sgdisk --attributes=1:set:2 /dev/sdb # sgdisk --new=2:8390656:16777249 /dev/sdb # sgdisk --typecode=2:fd00 /dev/sdb # sgdisk --new=3:16779264:DISK_SIZE-34 /dev/sdb # sgdisk --typecode=3:fd00 /dev/sdb
create the software RAID devices.
# 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
Format the RAID root disk, mount it at /mnt and copy all to it
# mkfs.ext3 /dev/md0 # mount /dev/md0 /mnt # cp -vxpR / /mnt
Modify /mnt/etc/fstab and change root filesystem to /dev/md0. (Do NOT include the LABEL=)
# sed -i 's/LABEL=[a-zA-Z\-]*/\/dev\/md0/' /mnt/etc/fstab
Create a new boot image and uncompress it:
# mkdir /mnt/root/initrd-raid # mkinitrd -v --fstab=/mnt/etc/fstab /mnt/root/initrd-raid/initrd-`uname -r`-raid.img `uname -r` # cd /mnt/root/initrd-raid # zcat initrd-`uname -r`-raid.img | cpio -i
Edit ‘init’ and insert ‘raidautorun …’:
# sed -i 's/raidautorun \/dev\/md0/raidautorun \/dev\/md0\nraidautorun \/dev\/md1\nraidautorun \/dev\/md2/' init
Copy the new ramdisk to the /mnt/boot folder and modify boot menu
# find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`-raid.img # rm /mnt/boot/initrd-2.6-xen.img # cd /mnt/boot # ln -s initrd-`uname -r`-raid.img initrd-2.6-xen.img
Replace in /mnt/boot/extlinux.conf string “root=LABEL=root-…” to “root=/dev/md0″ in all menu entries.
# sed -i 's/LABEL=[a-zA-Z\-]*/\/dev\/md0/' extlinux.conf
Set up MBR for GPT on /dev/sdb
# cat /mnt/usr/share/syslinux/gptmbr.bin > /dev/sdb # cd /mnt # extlinux --raid -i boot/
Make sure the bootable flag is set on the partitions
# sgdisk /dev/sda --attributes=1:set:2 # sgdisk /dev/sdb --attributes=1:set:2
Unmount /dev/md0
# cd # umount /dev/md0 # sync
Reboot ( IMPORTANT: Set your server to boot from the SECONDARY HDD before booting!)
# reboot
When XenServer is up again, include /dev/sda in the array with the following commands:
# sgdisk --typecode=1:fd00 /dev/sda # sgdisk --typecode=2:fd00 /dev/sda # sgdisk --typecode=3:fd00 /dev/sda
# reboot
Create MD Arrays
# mdadm -a /dev/md0 /dev/sda1 # mdadm -a /dev/md1 /dev/sda2 # mdadm -a /dev/md2 /dev/sda3
The array needs to complete its initial build/synchronisation. That is gonna take a while. Follow its progress with:
# watch -n 1 cat /proc/mdstat
When it’s done on all three arrays, copy the RAID setup to /etc/mdadm.conf
# mdadm --detail --scan >> /etc/mdadm.conf
At last add /dev/md2 as a local SR to XenServer.
# xe sr-create content-type=user device-config:device=/dev/md2 host-uuid= name-label="Local Storage" shared=false type=lvm