Backup and Restore with a console
To copy a VM to another computer over ssh:
xe vm-list
xe vm-export uuid=<uuid> filename= | ssh -c blowfish -C <user>@<sys-x> 'dd of=<filename>.xva'
To Restore it from the remote host:
ssh -c blowfish -C <user>@<sys-x> 'dd if=<filename>.xva' | xe vm-import filename=/dev/stdin
Automatically Start Virtual Machines
By default the newly created virtual machine is not started automatically. At first we have to start the pool:
xe pool-list
xe pool-param-set uuid=<uuid-pool> other-config:auto_poweron=true
To enable this, execute the following command:
xe vm-list
xe vm-param-set uuid=[[uuid-vm]] other-config:auto_poweron=true
Xen Server 6.02 Installation on Hetzner Server
XenServer Installieren
Man sollte sich auf seinem Hetzner Server ein Minimal-OS anlegen, sich einloggen und dann die Netzwerkkonfiguration notieren (Debian/Ubuntu: /etc/networking/interfaces, CentOS /etc/sysconfig/network-scripts/ifcfg-eth0). Wichtig ist u.a. auch die Gateway-IP. 1.1 Xenserver Download + auf Webserver entpacken
Xenserver ISO von hier auf einen eigenen, separaten Webserver downloaden: http://www.citrix.com/lang/English/lp/lp_1688615.asp
wget http://downloadns.citrix.com.edgesuite.net/akdlm/6760/XenServer-6.0.201-install-cd.iso
mount -o loop XenServer-6.0.201-install-cd.iso /mnt
mkdir /var/www/xenserver
cp -a /mnt/* /var/www/xenserver
Answerfile generieren und zum webserver kopieren
Hier als Beispiel eine XML-Datei, die man z.B. xenserver.xml nennen kann. Achtung: Unbedingt die richtige IP-Adresse für den Server und den Gateway eintragen!
<installation mode="fresh" srtype="lvm">
<primary-disk gueststorage="yes">sda</primary-disk>
<keymap>de</keymap>
<hostname>xenserver-ex4s</hostname>
<root-password>my_password</root-password>
<source type ="url">http://xx.xx.xx.xx/xenserver/</source>
<!-- No Post install scripts configured -->
<admin-interface name="eth0" proto="static">
<ip>Hetzner Server IP</ip>
<subnet-mask>255.255.255.224</subnet-mask>
<gateway>Hetzner Gateway IP</gateway>
</admin-interface>
<nameserver>213.133.99.99</nameserver>
<nameserver>213.133.100.100</nameserver>
<timezone>Europe/Berlin</timezone>
<time-config-method>ntp</time-config-method>
<ntp-servers>ntp</ntp-servers>
<ntpservers>83.246.120.75</ntpservers>
<ntpservers>213.9.73.106</ntpservers>
<ntpservers>188.40.34.195</ntpservers>
</installation>
Diese Datei sollte im gleichen Verzeichnis gespeichert werden, wie der Rest des Hauptverzeichnisses der Xenserver-CD.
Anpassungen für den PXE-Boot
Auf dem neuen Server: folgende Dateien vom eigenen Webserver auf den für die XenServer-Installation vorgesehene Server kopieren:
cd /boot
HOST=xx.xx.xx.xx
wget http://$HOST/xenserver/install.img
wget http://$HOST/xenserver/boot/vmlinuz
wget http://$HOST/xenserver/boot/xen.gz
Nun auf dem neuen Hetzner-Server die Bootloader-Konfiguration anpassen. Ich hatte ein Ubuntu 12.04 minimal gewählt, daher hier Grub2. In der /boot/grub/grub.cfg den ersten menuentry anpassen (siehe letzte 3 Zeilen):
if [ "${linux_gfx_mode}" != "text" ]; then load_video; fi
menuentry 'Ubuntu, with Linux 3.2.0-24-generic' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
gfxmode $linux_gfx_mode
insmod gzio
insmod raid
insmod mdraid1x
insmod part_gpt
insmod part_gpt
insmod ext2
set root='(mduuid/xxxxxxxxxxxxx)'
search --no-floppy --fs-uuid --set=root 2caba589-8a66-457a-81a2-2f43c7203736
multiboot /xen.gz dom0_mem=752M acpi=off nosmp noapic noirqbalance
module /vmlinuz answerfile=http://xx.xx.xx.xx/xenserver/xenserver.xml install
module /install.img
}
Achtung: Die URL vom answerfile muss mit der IP des Servers angegeben werden, nicht mit dem Hostnamen. Daher aufpassen, wenn man NameVirtualHosts o.ä. einsetzt!
Reboot
Mit reboot den Server neu starten. Nun sollte die XenServer-Installation starten, was man leicht auf dem externen Webserver per “tail -f /var/log/apache2/access.log” prüfen kann.
Software-RAID1
Nach der Installation sollte der Xenserver per SSH mit dem im Answerfile eingegebenen Passwort erreichbar sein. XenServer 6 nutzt GPT statt MBR zur Einrichtung der Partitionen. Die 3 TB Festplatten eines EX4 etc. werden damit voll ausgenutzt.
Now it is a good time to copy you ssh key to the server.
zweite Festplatte sdb einrichten
/dev/sda sollte nun 3 Partitionen enthalten. Um die Partitionen gleichmäßig zu übertragen lässt man sich die Partitionen auf /dev/sda anzeigen:
sgdisk -p /dev/sda
Partitionen auf /dev/sdb löschen:
sgdisk --zap-all /dev/sdb
Now reboot the system because the kernel uses the old table of the harddisk.
reboot
Neue GPT Tabelle anlegen:
sgdisk --mbrtogpt --clear /dev/sdb
Anfang und Ende der jeweiligen Partitionen in folgende Befehle übernehmen (hier von meiner config übernommen):
sgdisk --new=1:2048:8388641 /dev/sdb
sgdisk --typecode=1:fd00 /dev/sdb
sgdisk --new=2:8390656:16777249 /dev/sdb
sgdisk --typecode=2:fd00 /dev/sdb
sgdisk --new=3:16779264:1465149134 /dev/sdb
sgdisk --typecode=3:fd00 /dev/sdb
sgdisk /dev/sda --attributes=1:set:2
sgdisk /dev/sdb --attributes=1:set:2
sgdisk --typecode=1:fd00 /dev/sda
sgdisk --typecode=2:fd00 /dev/sda
sgdisk --typecode=3:fd00 /dev/sda
Anschließend
RAID anlegen
Das von Hetzner eingerichtete RAID1 ist teilweise noch vorhanden, XenServer hat sich auf /dev/sda 3 Partitionen eingerichtet und /dev/sdb entsprechend dem Answerfile dieses Beispiels unangetastet gelassen. Die Reste des RAIDs werden zunächst aufgelöst:
mdadm --stop /dev/md0
Neues RAID anlegen:
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 /dev/sda2 /dev/sdb2
mdadm --create /dev/md2 --level=1 --raid-devices=2 missing /dev/sdb3
Optional: Bitmaps für jedes RAID-Device anlegen. Bitmaps haben geringen Einfluss auf die Performance aber reduzieren deutlich die Zeit, in der ein fehlgeschlagenes Array neu synchronisiert werden muss.
mdadm --grow /dev/md0 -b internal
mdadm --grow /dev/md1 -b internal
mdadm --grow /dev/md2 -b internal
Die neue RAID-Konfiguration in eine aktualisierte mdadm.conf speichern:
mdadm --examine --scan > /etc/mdadm.conf
Copy Store Manager Data to RAID
pvcreate /dev/md2 -ff
vgextend VG_<TAB> /dev/md2
pvmove /dev/sda3 /dev/md2
Remove /dev/sda3 from the SR volume group
vgreduce VG_<TAB> /dev/sda3
pvremove /dev/sda3
After the procedure explained on the hetzner site is not working we only make sure that our vms are on the raid:
mdadm -a /dev/md2 /dev/sda3
Continue now on the ISO mount.
- ** STOP here, because it is not working !!! *** Mounte /dev/md0 und kopiere das Filesystem
mkfs.ext3 /dev/md0
mount /dev/md0 /mnt
cd /
cp -axv . /mnt
Nun muss die Datei /mnt/etc/fstab angepasst werden
vi /mnt/etc/fstab
Ersetze den Parameter root=LABEL=root-xxxxxx mit root=/dev/md0 (ohne LABEL=).
Neue Initrd erstellen:
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
Die Datei ‘init’ bearbeiten und nach ‘raidautorun /dev/md0’ folgendes einfügen:
raidautorun /dev/md1
raidautorun /dev/md2
Die neue Ramdisk nun nach /mnt/boot kopieren
find . -print | cpio -o -Hnewc | gzip -c > /mnt/boot/initrd-`uname -r`-raid.img
rm /mnt/boot/initrd-2.6-xen.img
ln -s initrd-`uname -r`-raid.img /mnt/boot/initrd-2.6-xen.img
nano /mnt/boot/extlinux.conf
Nun “root=LABEL=root-xyz” mit “root=/dev/md0” in allen Menüeinträgen ersetzen.
Nun den MBR für GPT auf /dev/sdb einrichten:
cat /mnt/usr/share/syslinux/gptmbr.bin > /dev/sdb
cd /mnt
extlinux --raid -i boot/
umount /dev/md0
sync
Das RAID-Array ist nun fast komplett, es fehlt lediglich /dev/sda1. Dazu nun ins Rescue System rebooten (im Robot Rescue System aktivieren, Passwort kopieren, Server per Hardware-Reset neu booten). Im Rescue System ausführen:
mdadm -a /dev/md0 /dev/sda1
Das RAID-Array muss sich nun erstmals synchronisieren, was einen Augenblick lang(!) dauert. Den Fortschritt kann man wie folgt beobachten: watch -n 1 cat /proc/mdstat
Lokale ISO Libary einbinden
Xenserver 6.0 bietet keine Moeglichkeit ISO Images im lokalen Storage anzubieten. Um dies dennoch zu ermoeglichen, wird im LVM des Datenbereiches ein neues LV angelegt und per lokalem NFS Server durchgereicht. Es ist nicht performant, aber es erfüllt seinen Zweck. Quelle: http://forums.citrix.com/thread.jspa?messageID=1393861&tstart=0
Eigene VG finden
vgscan
#Reading all physical volumes. This may take a while...
#Found volume group "VG_XenStorage-709d46ed-8193-d470-4ab8-21953af4f863" using metadata type lvm2
Neues LVM anlegen create new lvm
(bsp mit 20 GB)
lvcreate -L 20G -n ISO VG_XenStorage-<meineid>
#Logical volume "ISO" created
Filesystem anlegen
mkfs.ext3 /dev/VG_XenStorage-<meineid>/ISO
/etc/exports anpassen
mkdir /ISO
echo "/ISO 127.0.0.1(rw,no_root_squash,sync)" >> /etc/exports
NFS und Portmappen starten und rebootfest aktivieren
chkconfig --level 345 nfs on
chkconfig --level 345 portmap on
service nfs start
service portmap start
Mount beim boot
Am Ende des Files folgendes hinzufuegen:
lvchange -a y /dev/VG_XenStorage-<meineid>/ISO
Edit /etc/fstab and add:
/dev/VG_XenStorage-72b9dcb4-0881-54ff-4699-6447bbf8099d/ISO /ISO ext3 defaults 0 0
Mount the ISO lib:
mount /ISO
ISO Libray in XenCenter eintragen
Im XenCenter kann man nun eine neue Storage-Library hinzufügen, Typ “NFS ISO”. Als Mountpoint “localhost:/ISO” angeben
Netzwerkkonfiguration
To fix problem with the network card modify /etc/modprobe.conf
options r8169 use_dac=1
Host als Router konfigurieren
Der XenServer wird durch Änderungen in der Datei /etc/sysctl.conf als Router konfiguriert (die ersten paar Zeilen bis einschließlich net.ipv4.ip_forward = 0 durch die folgenden ersetzen):
# Kernel sysctl configuration file for Red Hat Linux
#
# For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
# sysctl.conf(5) for more details.
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
net.ipv6.conf.all.forwarding=1
# Controls proxy arp
net.ipv4.conf.default.proxy_arp = 1
# Turn off redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.lo.send_redirects = 0
net.ipv4.conf.xenbr0.send_redirects = 0
Die Einstellungen sind nun nach jedem Neustart aktiv. Sie lassen sich aber auch ohne Neustart direkt mit dem sysctl -p Befehl anwenden:
sysctl -p
Disable Firewall on XEN host
Disable the security level:
system-config-securitylevel-tui
IPv4
For the xen host, insert the gateway your get from Hetzner.
On the VMs use as gateway the ip address from the xen-host.
You have to activate the MACs on a Hetzner interface.
If you have a subnet: Create the file /etc/sysconfig/network-scripts/ifcfg-xenbr0:1 with the following settings:
DEVICE=xenbr0:1
ONBOOT=yes
BOOTPROTO=none
NETMASK=255.255.255.224
IPADDR=192.168.99.1
Start the interface with:
ifup xenbr0:1
IPv6
At first request a IPv6-Subnet (/64) from Hetzner.
The XenServer 6 has a bug and the command modprobe ipv6 is not sucessfully, so we use a work-around. Edit the file /etc/sysconfig/network-scripts/network-functions-ipv6 in function ipv6_test() modify line 180:
old
modprobe ipv6
change it to
modprobe esp6
Configure XenServer by edit /etc/sysconfig/network:
NETWORKING_IPV6=yes
IPV6_DEFAULTDEV=xenbr0
IPV6_DEFAULTGW=fe80::1
Configure IPv6 address by editing /etc/sysconfig/network-scripts/ifcfg-xenbr0:1
DEVICE=xenbr0:1
ONBOOT=yes
BOOTPROTO=none
IPV6INIT=yes
IPV6ADDR=2a01:4f8:101:2040::2/64
IPV6_ROUTER=yes
IPV6_AUTOCONF=no
IPV6FORWARDING=yes
IPV6_DEFAULTDEV=xenbr0:1
IPV6_DEFAULTGW=fe80::1
Create a script in /etc/init.d/network6:
#!/bin/bash
#
# network6 This starts and stops ipv6 on xenbr0
#
# chkconfig: 2345 15 85
# description: ipv6 configuration
#
### BEGIN INIT INFO
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
# Source function library.
. /etc/init.d/functions
# Von Hetzner zugewiesenes Gateway
IPV6GATEWAY=2a01:4f8:101:2040::1
# Eigene Adresse und eigenes Subnetz
IPV6HOSTADDR=2a01:4f8:101:2046::2/112
IPV6HOSTSUBNET=2a01:4f8:101:2046::0/112
usage () {
echo "Usage: service $prog {start|stop}"
RETVAL=1
}
start () {
# Configure our ip address
ip -6 addr add $IPV6HOSTADDR dev xenbr0
# Configure routing to hetzner gateway
ip -6 route add $IPV6GATEWAY dev xenbr0
ip -6 route add default via $IPV6GATEWAY
}
case "$1" in
start) start; RETVAL=$? ;;
*) usage ; RETVAL=2 ;;
esac
exit $RETVAL
########
Make it executable:
chmod +x network6
Add it to start scripts:
chkconfig network6 on
In den jeweiligen VMs (so sie denn mit Linux laufen) nimmt man dann folgende Einstellungen vor:
ip addr add 2a01:4f8:161:xxx::y/64 dev eth0
ip route add default via 2a01:4f8:161:xxx::2
Treiber für die Netzwerkkarte austauschen (optional)
Der standardmäßig im XenServer geladene Treiber (r8169) für die Realtek-Netzwerkkarte produziert unter Umständen Paketverluste. Daher muss auf einen alternative Treiber umgesattelt werden: r8168. Um den Netzwerkkartentreiber zu kompilieren, benötigt man das zur eigenen XenServer-Version passende Driver Development Kit (DDK), welches auf der Citrix Seite heruntergeladen werden kann: http://support.citrix.com/article/CTX133814 .
cd /ISO
wget http://download.citrix.com.edgesuite.net/6764/XenServer-6.0.2-XS602E005-ddk.iso
Vorerst sollte zusätzlich mittels XenCenter das VM Storage als Default markiert werden (Rechtsklick -> Default Storage) da sonst der xe vm-import Befehl nicht funktioniert. ISO Mounten:
mkdir /mnt/iso
mount -o loop /local/iso/XenServer-6.0.0-XS60E003-ddk.iso /mnt/iso
DDK VM Importieren:
xe vm-import filename=/mnt/iso/ddk/ova.xml
Im XenCenter muss dann noch ein Netzwerkdevice zur Virtuellen Maschine hinzugefügt werden, danach kann man die Maschine starten und ein root Passwort setzen mit dem man sich dann einloggen kann. Nun tragen wir die richtigen Netzwerkeinstellungen für die VM ein: /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
IPADDR=IP-ADRESSE-DER-VM
NETMASK=255.255.255.224
ONBOOT=yes
TYPE=ethernet
/etc/sysconfig/network-scripts/route-eth0
IP-ADRESSE-DER_VM dev eth0 scope link
default via IP-DES-XENSERVERS-BZW-BEI-IP-NETZ-DIE-DES-xenbr0:1
/etc/resolv.conf
nameserver 213.133.99.99
nameserver 213.133.100.100
Nun den Treiber ziehen, entpacken und kompilieren:
cd /root
wget http://r8168.googlecode.com/files/r8168-8.031.00.tar.bz2
tar xjf r8168-8.031.00.tar.bz2
cd r8168-8.031.00
make all
Den neuen Treiber (r8168.ko) auf das Hostsystem übertragen nach: /lib/modules/2.6.32.12-0.7.1.xs6.0.2.542.170665xen/kernel/drivers/net/
Dem Treiber dann die richtigen Rechte geben:
chmod 0744 /lib/modules/2.6.32.12-0.7.1.xs6.0.2.542.170665xen/kernel/drivers/net/r8168.ko
Nun den neuen Treiber in die /etc/modprobe.conf eintragen: echo “alias eth0 r8168” > /etc/modprobe.conf
Danach den neuen Treiber aktivieren und den Server neustarten (Achtung, nach Ausführung des folgenden Befehls startet der Server automatisch neu!):
rmmod r8169 && depmod -a && modprobe r8168 && reboot
Wenn alles richtig gelaufen ist, wird der neue Treiber für die Netzwerkschnittstelle genutzt:
lspci -nnk | grep -i net -A2
In der letzten Zeile sollte stehen: “Kernel driver in use: r8168”
Virtuelle Maschinen von einem anderen (älteren) XenServer übertragen
Der XenServer ist zum Glück recht flexibel, was die Übertragung von virtuellen Maschinen eines anderen XenServer-Hosts angeht. Im Grunde gibt es viele Möglichkeiten, eine davon ist z.B. das remote-mounten eines Verzeichnisses (per NFS) auf dem neuen XenServer-Host vom alten XenServer-Host aus. In dieses Verzeichnis wird dann eine VM nach der anderen exportiert (per “xe vm-export uuid=xxx-xxx filename=vm1.xva”) und jeweils auf dem neuen Host wieder importiert (“xe vm-import filename=vm1.xva”).
Install Xen Server 5.5 on Hetzner Server
You need an additional computer on which the installation files are stored. They are downloaded then via http.
Prepare Webserver
I use as webserver a FreeBSD:
wget http://downloadns.citrix.com.edgesuite.net/akdlm/4210/FREE_XenServer-5.5.0-install-cd.iso
mdconfig -a -t vnode -f FREE_XenServer-5.5.0-install-cd.iso -u 0
mount -t cd9660 /dev/md0 /mnt
mkdir /usr/local/www/apache22/data/xenserver
cp -a /mnt/* /usr/local/www/apache22/data/xenserver
umount mnt
mdconfig -d -u 0
Create the unattended installation file, you can use the following tool to do this http://wiki.xenmaster.de/doku.php/tools/xstools and save it as xenserver.xml on the webserver.
<?xml version="1.0" standalone="no"?>
<!--
************************************************************
* XML answer file for unattend Xenserver installation
* created by XenServer PXE Install Tool - (c) Thomas Krampe
*
* BE CAREFUL IF YOU CHANGE SOMETHING MANUALLY IN THS FILE
*
************************************************************
-->
<installation mode="fresh" srtype="lvm">
<bootloader>grub</bootloader>
<primary-disk gueststorage="yes">sda</primary-disk>
<keymap>de</keymap>
<hostname>xen</hostname>
<root-password>_password_</root-password>
<source type ="url">http://_IP_WEBSERVER_/xenserver</source>
<!-- No Post install scripts configured -->
<admin-interface name="eth0" proto="static">
<ip>_IP_</ip>
<subnet-mask>255.255.255.192</subnet-mask>
<gateway>_GATEWAY_</gateway>
</admin-interface>
<nameserver>213.133.99.99</nameserver>
<nameserver>213.133.100.100</nameserver>
<timezone>Europe/Berlin</timezone>
<time-config-method>ntp</time-config-method>
<ntp-servers>ntp</ntp-servers>
<ntpservers>83.246.120.75</ntpservers>
<ntpservers>213.9.73.106</ntpservers>
<ntpservers>188.40.34.195</ntpservers>
</installation>
Installation of Xen
Install a standard linux on it like Debian. Login and copy the following files to /boot:
cd /boot
wget http://_IP_/xenserver/boot/vmlinuz
wget http://_IP_/xenserver/boot/xen.gz
wget http://_IP_/xenserver/install.img
Now we great the grub entry in /boot/grub/menu.lst
default 2
title Install Xenserver
root (hd0,1)
kernel /xen.gz dom0_mem=752M acpi=off nosmp noapic noirqbalance
module /vmlinuz answerfile=http://_IP_/xenserver/xenserver.xml install
module /install.img
Now reboot and check on the webserver if it loads the files.
Use Raid1 on the XEN Server
Copy the partition table from disk 1 to disk 2:
dd if=/dev/sda of=/dev/sdb bs=512 count=1
Create raid partitions on second hard disk:
echo -e "\nt\n1\nfd\nt\n3\nfd\nw\nx" | fdisk /dev/sdb
I got an warning message here:
WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
so I rebooted the system.
Create raid devices:
[ -e /dev/md0 ] || mknod /dev/md0 b 9 0
[ -e /dev/md1 ] || mknod /dev/md1 b 9 1
Startup the degraded 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/sdb3
Create the volume:
pvcreate /dev/md1
volume_group=`vgscan | grep VG | awk -F \" '{print $2}'`
vgextend $volume_group /dev/md1
pvmove /dev/sda3 /dev/md1
# If this is a fresh install, then there won't be any data to move
vgreduce $volume_group /dev/sda3
Now we’re ready to copy the filesystem over to the RAID device /dev/md0
mkfs.ext3 /dev/md0
cd / && mount /dev/md0 /mnt && rsync -a --progress --exclude=/sys --exclude=/proc --exclude=/dev/shm --exclude=/dev/pts / /mnt
mkdir /mnt/sys
mkdir /mnt/proc
sed -r -i 's,LABEL=root-\w+ ,/dev/md0 ,g' /mnt/etc/fstab
Now let’s setup initrd
mkdir /root/initrd && cd /root/initrd
zcat /boot/initrd-`uname -r`.img | cpio -i && \\
cp /lib/modules/`uname -r`/kernel/drivers/md/raid1.ko lib
Now we have to edit the init file:
q="echo Waiting for driver initialization."
sed -r -i "s,^${q}$,\n\necho Loading raid1.ko module\ninsmod /lib/raid1.ko\n${q}\n,g" init
q="resume /var/swap/swap.001"
sed -r -i "s,^${q}$,${q}\necho Running raidautorun\nraidautorun /dev/md0\nraidautorun /dev/md1,g" init
r=`grep mkroot /root/initrd/init`
sed -r -i "s|^${r}$|${r/sda1/md0}|g" init
Now we’ll copy the initial ramdisk to the /boot on the new RAID
find . -print | cpio -o -c | gzip -c > /boot/initrd-`uname -r`.img
sed -r -i 's,LABEL=root-\w+ ,/dev/md0 ,g' /mnt/etc/fstab
sed -r -i 's,LABEL=root-\w+ ,/dev/md0 ,g' /etc/fstab
And setup the boot loader
sed -r -i 's,root=LABEL=root-\w+ ,root=/dev/md0 ,g' /mnt/boot/grub/grub.conf
sed -r -i 's,root=LABEL=root-\w+ ,root=/dev/md0 ,g' /boot/grub/grub.conf
grub-install /dev/sdb
Unmount /dev/md0, sync, and reboot
cd ; umount /mnt || umount /dev/md0
sync
reboot
First we tag the partitions as type Linux raid, then we have to add /dev/sda to the RAID.
echo -e "\nt\n1\nfd\nt\n3\nfd\nw\nx" | fdisk /dev/sda
mdadm -a /dev/md0 /dev/sda1
mdadm -a /dev/md1 /dev/sda3
Now it restores the raid, that can take some time, you can see it with:
cat /proc/mdstat
Add local ISO to Xen
Create a directory with:
mkdir -p /var/opt/xen/iso_import
Create now a ISO storage repository:
xe sr-create name-label=MyISORepository type=iso device-config:location=/var/opt/xen/iso_import/ device-config:legacy_mode=true content-type=iso
Now copy for files to
/var/opt/xen/iso_import/
Create Volume for ISOs on LVM
To find the volume ID:
vgscan
Create new LVM to hold the ISOs, in this case 12GB:
lvcreate -L 12G -n ISO VG_XenStorage-fb805573-ae34-9739-c362-521d364cc04b
Create file system:
mkfs.ext3 /dev/VG_XenStorage-fb805573-ae34-9739-c362-521d364cc04b/ISO
Adapt /etc/exports:
mkdir /ISO
echo "/ISO *(rw,no_root_squash,sync)" >> /etc/exports
Start NFS and portmapper:
chkconfig --level 345 nfs on
chkconfig --level 345 portmap on
service nfs start
service portmap start
Enable mount at boot:
lvchange -a y /dev/VG_XenStorage-fb805573-ae34-9739-c362-521d364cc04b/ISO
mount /dev/VG_XenStorage-fb805573-ae34-9739-c362-521d364cc04b/ISO /ISO
Add ISO library to XenCenter: Click ‘New Storage Repository’ and select ‘NFS ISO’. As mount point use localhost:/ISO.