Quelques trucs en vrac sur Xen. ====== Kickstart ====== * fichier .cfg Xen kernel = "/var/xen_images/centos/vmlinuz" ramdisk = "/var/xen_images/centos/initrd.img" extra = "text ks=https://192.168.3.1/_ks_.cfg noverifyssl" name = "centos6_1" memory = "1024" disk = [ 'phy:/dev/datavg/centos6_1-disk,xvda,w', ] vif = [ 'bridge=xenbr0', ] vcpus=1 on_reboot = 'destroy' on_crash = 'destroy' * fichier ks.cfg install url --url http://mirror.centos.org/centos/6/os/x86_64 lang en_US.UTF-8 network --device eth0 --bootproto dhcp # Bogus password, change to something sensible! rootpw bogus firewall --disabled authconfig --enableshadow --enablemd5 selinux --disabled timezone --utc Europe/Paris bootloader --location=mbr --driveorder=xvda --append="console=xvc0" reboot # Partitioning clearpart --all --initlabel --drives=xvda zerombr ignoredisk --only-use=xvda part /boot --fstype ext4 --size=100 --ondisk=xvda part pv.2 --size=8000 --grow --ondisk=xvda volgroup rootvg pv.2 logvol / --fstype ext4 --name=LogVol00 --vgname=rootvg --size=1024 --grow logvol swap --fstype swap --name=LogVol01 --vgname=rootvg --size=256 --grow --maxsize=512 %packages @core ====== Convertir image .ova ou .vmdk vers Xen ====== tar vxf Hortonworks_Sandbox_2.1.ova qemu-img convert -O raw Hortonworks_Sandbox_2.1-disk1.vmdk Hortonworks_Sandbox_2.1.raw ====== Créer une VM Linux ====== xen-create-image -lvm=vgdata --debootstrap --size=4GB --memory=1500MB --swap=1500MB --dist=etch --mirror=http://ftp.fr.debian.org/debian/ --force --ip=192.168.1.1 --netmask=255.255.255.0 --gateway=192.168.1.254 --hostname=wowvmii --passwd --kernel=/boot/vmlinuz-2.6.18-6-xen-686 --initrd=/boot/initrd.img-2.6.18-6-xen-686 ====== Exemple de fichier de conf pour une VM Debian ====== * /etc/xen/gameVM.cfg # # Configuration file for the Xen instance gameVM, created # by xen-tools 3.9 on Mon Jun 29 14:35:36 2009. # # # Kernel + memory size # kernel = '/boot/vmlinuz-2.6.26-2-xen-amd64' ramdisk = '/boot/initrd.img-2.6.26-2-xen-amd64' memory = '2048' extra = 'xencons=tty' vcpus = '2' # # Disk device(s). # root = '/dev/sda2 ro' disk = [ 'phy:/dev/vg_data/gameVM-swap,sda1,w', 'phy:/dev/vg_data/gameVM-disk,sda2,w', 'phy:/dev/vg_data/gameVM-data,sdb,w', 'phy:/dev/vg_data/gameVM-data2,sdc,w', ] # # Hostname # name = 'gameVM' # # Networking # vif = [ 'ip=192.168.1.3,vifname=vif1.3' ] # # Behaviour # on_poweroff = 'destroy' on_reboot = 'restart' on_crash = 'restart' ====== Exemple de conf pour une VM XP ====== Testé avec Xen 3.2 sur Debian Lenny kernel = '/usr/lib/xen-3.2-1/boot/hvmloader' builder = 'hvm' memory = '1024' name = "xpVM" vcpus = 1 vif = ['type=ioemu, bridge=xenbr0'] disk = [ 'phy:/dev/vg_data/xpVM-disk,ioemu:hda,w', 'file:/tmp/xp.iso,ioemu:hdc:cdrom,r' ] device_model = '/usr/lib/xen-3.2-1/bin/qemu-dm' boot = 'd' sdl = 0 vnc = 1 vncdisplay = 0 vncviewer = 0 usbdevice = 'tablet' Penser à modifier //(vnc-listen 'X.X.X.X')// dans ///etc/xen/xen-config.sxp// pour avoir un accès VNC lors de l'install et relancer un ///etc/init.d/xend restart//. Une fois l'install terminée on peut retirer la ligne suivante : 'file:/tmp/xp.iso,ioemu:hdc:cdrom,r' Et remplacer : boot = 'd' vnc = 1 Par : boot = 'c' vnc = 0 La connexion se fera via un client RDP par la suite. ====== Créer un bridge local pour une VM Windows (avec HVM) ====== Le NAT ne marche pas des masses (Xen 3.2) avec une VM avec HVM. Du coup un bridge local permet de résoudre le souci : tunctl -t tap0 -u root ip link set up dev tap0 brctl addbr xenbr0 brctl addif xenbr0 tap0 ip link set up dev xenbr0 ip addr add 192.168.3.1/24 dev xenbr0 brctl addif xenbr0 tap0 Sur la ou les VM(s) on utilise 192.168.3.2 par ex. comme adresse IP. ====== Lister les VMs ====== * **xm list** dedibox:/usr/sbin# xm list Name ID Mem(MiB) VCPUs State Time(s) Domain-0 0 1014 2 r----- 16540.9 NXvm 2 256 1 -b---- 459.6 WEBvm 3 512 1 -b---- 1020.3 WoWvmII 1 1000 1 -b---- 6352.7 gserver 8 256 1 r----- 7579.9 ====== Afficher l'uptime des machines ====== * **xm uptime** dedibox:/usr/sbin# xm uptime Name ID Uptime Domain-0 0 22:39:40 NXvm 2 22:36:21 WEBvm 3 22:36:02 WoWvmII 1 22:36:40 gserver 8 19:54:13 ====== Afficher les perfs des VMs ====== * **xentop -b -i 2 2>/dev/null |grep -v vdb |tail -12 |grep -v vbd** xentop -b -i 2 2>/dev/null |grep -v vdb |tail -12 |grep -v vbd xentop - 13:37:31 Xen 3.0.3-1 5 domains: 2 running, 1 blocked, 0 paused, 0 crashed, 0 dying, 0 shutdown Mem: 3144124k total, 3143720k used, 404k free CPUs: 2 @ 2000MHz NAME STATE CPU(sec) CPU(%) MEM(k) MEM(%) MAXMEM(k) MAXMEM(%) VCPUS NETS NETTX(k) NETRX(k) VBDS VBD_OO VBD_RD VBD_WR SSID Domain-0 -----r 16666 99.1 1037476 33.0 no limit n/a 2 0 0 0 0 0 0 0 0 gserver -----r 7712 99.5 261996 8.3 262144 8.3 1 0 0 0 5 6 57598 163161 0 NXvm --b--- 460 0.1 261968 8.3 262144 8.3 1 0 0 0 2 52 27095 216960 0 WEBvm ------ 1029 0.4 524104 16.7 524288 16.7 1 1 637789 364648 8 420 138717 536729 0 WoWvmII ------ 6354 0.5 1023748 32.6 1024000 32.6 1 1 52265 548430 3 193 154307 1415267 0 ====== Afficher la répartition CPU ====== * **xm vcpu-list** dedibox:/usr/sbin# xm vcpu-list Name ID VCPUs CPU State Time(s) CPU Affinity Domain-0 0 0 0 r-- 8989.2 any cpu Domain-0 0 1 0 --- 7777.5 any cpu NXvm 2 0 0 --- 461.1 any cpu WEBvm 3 0 0 -b- 1032.7 any cpu WoWvmII 1 0 0 --- 6355.7 any cpu gserver 8 0 1 r-- 7817.7 any cpu ====== Afficher les infos réseau ====== * **xm network-list //VM//** dedibox:/usr/sbin# xm list |egrep -v "Domain|Name"|awk '{print $1}'|while read i > do > echo $i > xm network-list $i > done NXvm Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path 0 0 00:16:3e:7b:7c:6e 0 4 8 522 /523 /local/domain/0/backend/vif/2/0 WEBvm Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path 0 0 00:16:3e:54:d8:29 0 4 14 528 /529 /local/domain/0/backend/vif/3/0 WoWvmII Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path 0 0 00:16:3e:11:b8:c3 0 4 9 523 /524 /local/domain/0/backend/vif/1/0 gserver Idx BE MAC Addr. handle state evt-ch tx-/rx-ring-ref BE-path 0 0 00:16:3e:27:dd:cb 0 4 11 525 /526 /local/domain/0/backend/vif/8/0 ====== Afficher les poids de chaque VM ====== * **xm sched-credit -d //VM//** xm list|egrep -v Name|awk '{print $1}'|while read i; do echo "--- $i ---" ;xm sched-credit -d $i; done --- Domain-0 --- {'cap': 0, 'weight': 256} --- NXvm --- {'cap': 0, 'weight': 256} --- WEBvm --- {'cap': 0, 'weight': 512} --- WoWvmII --- {'cap': 0, 'weight': 512} --- gserver --- {'cap': 0, 'weight': 256} ====== Ajouter un disque à chaud ====== lvcreate -L 51200 -n ftpVM-data8 vg_data xm block-attach ftpVM phy:/dev/vg_data/ftpVM-data8 /dev/sdi w => Penser à modifier le fichier de conf de la VM pour la prise en compte au boot ====== Troubleshooting ====== ===== 4gb seg fixup errors ===== * Installer le package //libc6-xen// : **apt-get install libc6-xen** * Si /lib/tls existe sur votre machine : **mv /lib/tls /lib/tls.disabled** * **echo ‘hwcap 0 nosegneg’ > /etc/ld.so.conf.d/libc6-xen.conf && ldconfig** * Rebooter la VM ===== Choisir l'ordre de démarrage des VMs ===== Par défaut les VMs sont démarrées par rapport à l'ordre alphabétique des liens sous ///etc/xen/auto// : lrwxrwxrwx 1 root root 20 Dec 22 15:50 0WoWvmII.cfg -> /etc/xen/WoWvmII.cfg lrwxrwxrwx 1 root root 17 Dec 22 15:50 1NXvm.cfg -> /etc/xen/NXvm.cfg lrwxrwxrwx 1 root root 18 Dec 22 15:50 2WEBvm.cfg -> /etc/xen/WEBvm.cfg lrwxrwxrwx 1 root root 20 Mar 8 21:02 3gserver.cfg -> /etc/xen/gserver.cfg ===== Temporiser le démarrage des VMs ===== On peut parfois avoir des soucis si plusieurs VMs démarrent en parallèle. Cela peut arriver qu'une VM soit plus longue à démarrer (fsck par ex.) ce qui amène la VM suivante à démarrer alors que la précédente est toujours en cours de boot. On peut temporiser le lancement des VMs grâce à la variable **XENDOMAINS_CREATE_USLEEP** présente dans le fichier ///etc/default/xendomains//. ===== Perfs réseau dégradées ===== Sous Debian, décommenter la ligne suivante dans ///etc/network/interfaces// sur les VMs : post-up ethtool -K eth0 tx off :!: le package **ethtool** doit être installé. ===== PTY allocation request failed on channel 0 ===== Sur la VM, lancer : apt-get install udev Rajouter la ligne ci-dessous dans le /etc/fstab (sur la console de la VM) : none /dev/pts devpts defaults 0 0 Lancer : mkdir /dev/pts mount -a