Difference between revisions of "Xen"
m (Reverted edits by Etegohy (Talk) to last revision by PhilippeTeuwen) |
m |
||
Line 1: | Line 1: | ||
+ | ===XEN: installation=== |
||
− | ''Converted with [[MediaWiki#HTML-WikiConverter|HTML::WikiConverter::MediaWiki]] from my old phpwiki site'' |
||
+ | * see [http://wiki.debian.org/Xen notes on Debian wiki] |
||
− | ---- |
||
+ | * aptitude install xen-linux-image-2.6.32-5-xen-amd64 xen-tools xen-utils |
||
− | === Install of Xen Source (paravirtualizer) on Debian Sarge === |
||
+ | * backup /etc/xen/xend-config.sxp |
||
− | |||
+ | * edit /etc/xen/xend-config.sxp, and uncomment line "(network-script network-bridge)" or for a non-default interface ethX: |
||
− | ==== Install of Xen ==== |
||
+ | (network-script 'network-bridge netdev=ethX bridge=xenbr0') |
||
− | |||
+ | * reboot |
||
− | I used the binary distribution of xen 2.0.7 altough I also tried to compile a custom kernel as I had question about hardware support which I didn't find in the pached kernel. I posted it on the xen-users ML, no answer yet. |
||
+ | * aptitude remove --purge linux-image-2.6.32-5-amd64 linux-image-2.6-amd64 |
||
− | |||
+ | * /etc/default/grub => GRUB_DEFAULT=2 |
||
− | To be documented (note are offline) |
||
+ | * update-grub |
||
− | |||
+ | * reboot |
||
− | update grub's menu.lst and rename /lib/tls in /lib/tls.disabled as it is not natively supported by xen and need a real emulation which will reduced performance a lot (this step has to be done in all unpriviledged guest too (enforce it ?) |
||
+ | * cat /proc/xen/capabilities #(to check xend is running) |
||
− | |||
− | ==== Xen topology ==== |
||
− | |||
− | Xen uses a para-vitualisation hypervisor running in ring 0 (x86 CPU). <br />The kernel runs in ring1 and user-app in ring3. <br />Hardware management is done inside a privileged kernel named domain0 (guest OSes are called domainX). <br />Xen uses a xend daemon in dom0 to manage network, cpu, memory and export standard devices to the domX guest (generally eth0, a root fs and some swap space). <br />xend also manages bridging the real eth0 and sets up a xen-br0 device <br />xend is not running by default on dom0 at startup |
||
− | |||
− | Invoking |
||
+ | ===XEN: guest creation=== |
||
+ | * If you've a proxy it's much easier to have it defined in the environment variables: |
||
+ | ** Edit /etc/environment |
||
+ | http_proxy=http://myproxy:port |
||
+ | ** Logout/login |
||
+ | * Edit the config file for creating images (/etc/xen-tools/xen-tools.conf) to your needs: |
||
+ | <source lang=diff> |
||
+ | --- xen-tools.conf.orig 2010-05-30 22:42:25.000000000 +0200 |
||
+ | +++ xen-tools.conf 2010-08-17 17:47:35.000000000 +0200 |
||
+ | @@ -52,7 +52,7 @@ |
||
+ | # LVM volume group here instead |
||
+ | # |
||
+ | ## |
||
+ | -# lvm = vg0 |
||
+ | +lvm = vg0 |
||
− | update-rc.d xend defaults 80 |
||
− | |||
− | does the job as dmesg says |
||
− | |||
− | eth0: link up, 100Mbps, full-duplex, lpa 0x45E1 |
||
− | eth0: Promiscuous mode enabled. |
||
− | device eth0 entered promiscuous mode |
||
− | xen-br0: port 1(eth0) entering learning state |
||
− | xen-br0: topology change detected, propagating |
||
− | xen-br0: port 1(eth0) entering forwarding state |
||
− | |||
− | and |
||
− | |||
− | |||
− | ns1:/home/skycode# xm list |
||
− | Name Id Mem(MB) CPU State Time(s) Console |
||
− | Domain-0 0 251 0 r---- 13.0 |
||
− | |||
− | So domain0 is now running (in a small 4Go partition, the rest of the disk is left for LVM) |
||
− | |||
− | setting-up LVM for the hosts |
||
− | |||
− | |||
− | apt-get install lvm2 |
||
− | |||
− | Partitioning the free space left on the disk |
||
− | |||
− | |||
− | ns1:/home/skycode# fdisk /dev/hda |
||
− | |||
− | The number of cylinders for this disk is set to 9964. |
||
− | There is nothing wrong with that, but this is larger than 1024, |
||
− | and could in certain setups cause problems with: |
||
− | 1) software that runs at boot time (e.g., old versions of LILO) |
||
− | 2) booting and partitioning software from other OSs |
||
− | (e.g., DOS FDISK, OS/2 FDISK) |
||
− | |||
− | Command (m for help): p |
||
− | |||
− | Disk /dev/hda: 81.9 GB, 81964302336 bytes |
||
− | 255 heads, 63 sectors/track, 9964 cylinders |
||
− | Units = cylinders of 16065 * 512 = 8225280 bytes |
||
− | |||
− | Device Boot Start End Blocks Id System |
||
− | /dev/hda1 1 486 3903763+ 83 Linux |
||
− | /dev/hda2 * 487 608 979965 82 Linux swap / Solaris |
||
− | |||
− | Command (m for help): n |
||
− | Command action |
||
− | e extended |
||
− | p primary partition (1-4) |
||
− | p |
||
− | Partition number (1-4): 3 |
||
− | First cylinder (609-9964, default 609): |
||
− | Using default value 609 |
||
− | Last cylinder or +size or +sizeM or +sizeK (609-9964, default 9964): |
||
− | Using default value 9964 |
||
− | |||
− | Command (m for help): p |
||
− | |||
− | Disk /dev/hda: 81.9 GB, 81964302336 bytes |
||
− | 255 heads, 63 sectors/track, 9964 cylinders |
||
− | Units = cylinders of 16065 * 512 = 8225280 bytes |
||
− | |||
− | Device Boot Start End Blocks Id System |
||
− | /dev/hda1 1 486 3903763+ 83 Linux |
||
− | /dev/hda2 * 487 608 979965 82 Linux swap / Solaris |
||
− | /dev/hda3 609 9964 75152070 83 Linux |
||
− | |||
− | Command (m for help): t |
||
− | Partition number (1-4): 3 |
||
− | Hex code (type L to list codes): 8e |
||
− | Changed system type of partition 3 to 8e (Linux LVM) |
||
− | |||
− | Command (m for help): p |
||
− | |||
− | Disk /dev/hda: 81.9 GB, 81964302336 bytes |
||
− | 255 heads, 63 sectors/track, 9964 cylinders |
||
− | Units = cylinders of 16065 * 512 = 8225280 bytes |
||
− | |||
− | Device Boot Start End Blocks Id System |
||
− | /dev/hda1 1 486 3903763+ 83 Linux |
||
− | /dev/hda2 * 487 608 979965 82 Linux swap / Solaris |
||
− | /dev/hda3 609 9964 75152070 8e Linux LVM |
||
− | |||
− | Command (m for help): w |
||
− | The partition table has been altered! |
||
− | |||
− | Calling ioctl() to re-read partition table. |
||
− | |||
− | reboot :-) |
||
− | |||
− | Create physical volumes |
||
− | |||
− | pvcreate /dev/hda3</pre> |
||
− | add it to a volume groupvgcreate volg0 /dev/hda3 |
||
− | Volume group "volg0" successfully created |
||
− | |||
− | Create 2 partition (root and swap for the first test domain) |
||
− | |||
− | ns1:/home/skycode# lvcreate -L 2G -n test0root volg0 |
||
− | Logical volume "test0root" created |
||
− | ns1:/home/skycode# lvcreate -L 256M -n test0swap volg0 |
||
− | Logical volume "test0swap" created |
||
− | ns1:/home/skycode# mke2fs -j /dev/volg0/test0root |
||
− | mke2fs 1.37 (21-Mar-2005) |
||
− | Filesystem label= |
||
− | OS type: Linux |
||
− | Block size=4096 (log=2) |
||
− | Fragment size=4096 (log=2) |
||
− | 262144 inodes, 524288 blocks |
||
− | 26214 blocks (5.00%) reserved for the super user |
||
− | First data block=0 |
||
− | 16 block groups |
||
− | 32768 blocks per group, 32768 fragments per group |
||
− | 16384 inodes per group |
||
− | Superblock backups stored on blocks: |
||
− | 32768, 98304, 163840, 229376, 294912 |
||
− | |||
− | Writing inode tables: done |
||
− | Creating journal (8192 blocks): done |
||
− | Writing superblocks and filesystem accounting information: done |
||
− | |||
− | This filesystem will be automatically checked every 38 mounts or |
||
− | 180 days, whichever comes first. Use tune2fs -c or -i to override. |
||
− | ns1:/home/skycode# mkswap /dev/volg0/test0swap |
||
− | Setting up swapspace version 1, size = 268431 kB |
||
− | no label, UUID=451e4e02-5d9f-4524-922a-c7432e844b21 |
||
− | ns1:/home/skycode# |
||
− | |||
− | Install a minimal debian sarge with debootstrap and back-it up for futur installs |
||
− | |||
− | |||
− | ns1:/home/skycode# debootstrap --arch i386 sarge /mnt/xen_install http://www.uk.debian.org/debian/ |
||
− | Lots of output ... |
||
− | ns1:/home/skycode# cd /mnt/xen_install/ |
||
− | ns1:/mnt/xen_install# mkdir /var/xen_images |
||
− | ns1:/mnt/xen_install# tar -jpcf /var/xen_images/debian-sarge-pre-config.tar.bz2 . |
||
− | |||
− | Now it's config time |
||
− | |||
− | fstab |
||
− | |||
− | <nowiki> |
||
− | ns1:/mnt/xen_install/etc# cat fstab |
||
− | # Fstab for virtual domain root is exported by dom0 as sda1 |
||
− | # And swap as sda2 |
||
# |
# |
||
+ | @@ -125,12 +125,12 @@ |
||
− | # Exxoss - brewed on March 24th 2006 |
||
+ | # Disk and Sizing options. |
||
− | |||
+ | ## |
||
− | /dev/sda1 / ext3 defaults 0 1 |
||
+ | # |
||
− | /dev/sda2 swap swap defaults 0 0 |
||
+ | -size = 4Gb # Disk image size. |
||
− | proc /proc proc defaults 0 0</nowiki> |
||
+ | +size = 8Gb # Disk image size. |
||
− | |||
+ | memory = 128Mb # Memory size |
||
− | hostname |
||
+ | swap = 128Mb # Swap size |
||
− | |||
+ | # noswap = 1 # Don't use swap at all for the new system. |
||
− | |||
+ | fs = ext3 # use the EXT3 filesystem for the disk image. |
||
− | ns1:/mnt/xen_install/etc# cat hostname |
||
+ | -dist = `xt-guess-suite-and-mirror -s` # Default distribution to install. |
||
− | test0 |
||
+ | +dist = squeeze # Default distribution to install. |
||
− | |||
+ | image = sparse # Specify sparse vs. full disk images. |
||
− | hosts |
||
− | |||
− | |||
− | ns1:/mnt/xen_install/etc# cat hosts |
||
− | 127.0.0.1 localhost |
||
− | |||
− | Network interfaces |
||
− | |||
− | <nowiki> |
||
− | ns1:/mnt/xen_install/etc# cat network/interfaces |
||
− | # Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or |
||
− | # /usr/share/doc/ifupdown/examples for more information. |
||
# |
# |
||
+ | @@ -166,7 +166,7 @@ |
||
− | # Exxoss - brewed march 24th 2006 |
||
− | # virtual domain interface config file |
||
− | # dom0 export a NIC as eth0 |
||
# |
# |
||
+ | # Uncomment this if you wish the images to use DHCP |
||
+ | # |
||
+ | -# dhcp = 1 |
||
+ | +dhcp = 1 |
||
− | # Loopback device |
||
− | auto lo |
||
− | iface lo inet loopback |
||
+ | ## |
||
− | # eth0 device |
||
+ | @@ -184,7 +184,7 @@ |
||
− | auto eth0 |
||
+ | # Uncomment the following line if you wish to interactively setup |
||
− | iface eth0 inet static |
||
+ | # a new root password for images. |
||
− | address 192.168.1.111 |
||
+ | # |
||
− | netmask 255.255.255.0 |
||
+ | -# passwd = 1 |
||
− | gateway 192.168.1.1</nowiki> |
||
+ | +passwd = 1 |
||
− | |||
− | sources.list |
||
− | |||
− | <nowiki> |
||
− | ns1:/mnt/xen_install/etc# cat apt/sources.list |
||
− | #deb file:///cdrom/ sarge main |
||
− | deb </nowiki>http://ftp.debian.skynet.be/ftp/debian/ stable main contrib |
||
− | deb-src http://ftp.debian.skynet.be/ftp/debian/ stable main contrib |
||
− | |||
− | deb http://security.debian.org/ stable/updates main contrib |
||
− | |||
− | lib/tls (again) |
||
− | |||
− | |||
− | ns1:/mnt/xen_install/etc# cd .. |
||
− | ns1:/mnt/xen_install# mv lib/tls lib/tls.disabled |
||
− | |||
− | umount /mnt/xen_install |
||
− | |||
− | Configure xen for the new dom |
||
− | |||
− | in /etc/xen/test0.conf |
||
− | |||
− | <nowiki> |
||
− | ns1:/etc/xen# cat /etc/xen/test0.conf |
||
# |
# |
||
+ | # If you'd like all accounts on your host system which are not present |
||
− | # Test Xen domU config file |
||
+ | @@ -254,10 +254,10 @@ |
||
# |
# |
||
+ | # You may specify the things to use here: |
||
− | |||
+ | # |
||
− | name="test0" |
||
+ | -# serial_device = hvc0 #default |
||
− | memory=256 |
||
+ | +serial_device = hvc0 #default |
||
− | kernel="/boot/vmlinuz-2.6-xenU" |
||
+ | # serial_device = tty1 |
||
− | nics=1 |
||
+ | # |
||
− | disk=</nowiki><span>[%27phy%3Avolg0 'phy:volg0][%27phy%3Avolg0/test0root%2Csda1%2Cw%27%2C%20%27phy%3Avolg0 /test0root,sda1,w', 'phy:volg0]<span class="named-wikiunknown"><u>test0swap,sda2,w'</u>[%27phy%3Avolg0/test0root%2Csda1%2Cw%27%2C%20%27phy%3Avolg0/test0swap%2Csda2%2Cw%27?action=create [[Image:uww.png|?]]]</span></span> |
||
+ | -# disk_device = xvda #default |
||
− | root="/dev/sda1 ro" |
||
+ | +disk_device = xvda #default |
||
− | ns1:/etc/xen# |
||
+ | # disk_device = sda |
||
− | |||
+ | # |
||
− | ==== xm (xend ctl tool) commands ==== |
||
+ | </source> |
||
+ | Example: |
||
− | Create a new domain <pre>xm create /etc/xen/test0.conf -c</pre> |
||
+ | * xen-create-image --hostname=myguest1 --memory=12288 --swap=12288 --vcpus=20 |
||
− | Logout from console to dom0 : Ctrl-] |
||
+ | * WARNING strangely the default root password was disabled with a '*' in /etc/shadow so impossible to log in. I had to mount manually the lv (/dev/vg0/myguest1-disk) to remove the '*'<br>One may prefer to setup the password interactively when creating the image with xen-create-image ... --passwd (or setup passwd=1 in /etc/xen-tools/xen-tools.conf as I've now shown in the above diff file) |
||
+ | * lvm> lvcreate -L 1000G -n myguest1-data vg0 |
||
+ | * /etc/xen/myguest1.cfg: add data volume: |
||
+ | root = '/dev/xvda2 ro' |
||
+ | disk = [ |
||
+ | 'phy:/dev/vg0/myguest1-disk,xvda2,w', |
||
+ | 'phy:/dev/vg0/myguest1-swap,xvda1,w', |
||
+ | 'phy:/dev/vg0/myguest1-data,xvda3,w', |
||
+ | ] |
||
+ | * xm create -c /etc/xen/myguest1.cfg |
||
− | list runing domains <pre> xm list </pre> |
||
+ | * Hook the data drive as /home |
||
+ | ** mkfs.ext4 /dev/xvda3 |
||
+ | ** In /etc/fstab: /dev/xvda3 /home ext4 noatime,nodiratime,errors=remount-ro 0 1 |
||
+ | ** mount /home |
||
+ | ==XEN quickref== |
||
+ | [http://xen-tools.org/software/xen-tools/ Xen Tools], [http://xen-tools.org/software/xen-shell Xen Shell] |
||
+ | See also [http://www.howtoforge.com/virtualization-with-xen-on-debian-lenny-amd64-p2 here] and [http://www.howtoforge.com/xen_tools_xen_shell_argo here] |
||
− | stop a runing domain <pre> xm shutdown domain </pre> |
||
+ | * xen-create-image --hostname=mynewguest |
||
− | ==== Tests ==== |
||
+ | * xen-delete-image |
||
+ | * xen-list-images |
||
+ | * xen-update-image # apt-get update; apt-get upgrade in the guest, !!! only if guest is NOT running |
||
+ | * xm create /etc/xen/mynewguest.cfg |
||
+ | * xm list # Show running xen guests |
||
+ | * xm info # Show xen version and many other info |
||
+ | * xm console mynewguest |
||
+ | ** CTRL+] to detach |
||
+ | * xm shutdown mynewguest |
||
+ | * xm destroy mynewguest |
||
+ | ==XEN tuning== |
||
+ | If you want xen1.example.com to start automatically at the next boot of the system, then do this: |
||
+ | ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto |
||
− | what happens if I try to allocate more meory to a domain than I have available |
||
+ | By default it will attempt to save runing hosts when dom0 is halted. This means a "suspend-to-disk" of all domU in dom0 filesystem (/var/lib/xen/save). To prevent it and do regular shutdown of domU, edit /etc/default/xendomains and change: |
||
− | it fail rturning an error code (12) |
||
+ | #XENDOMAINS_SAVE=/var/lib/xen/save |
||
+ | XENDOMAINS_SAVE="" |
||
+ | ==Misc notes== |
||
− | set the cpu time limit |
||
+ | ===Boot & DHCP=== |
||
+ | I've still sometimes some issues at boot time when the xenbr0 bridge doesn't catch its IP... |
||
+ | <br>In those cases I find dhclient still hooked to the non-existing bnx1 IF (which was renamed pbnx1 by XEN). I've to kill it and start a similar dhclient on IF xenbr0. |
||
+ | <br>Finally I renamed the default interface as eth0 and called the xen bridge script without parameters: (network-script network-bridge) |
||
+ | ===Allocating too much memory=== |
||
− | use cpu_weight in config file like cpu_weight=5 |
||
+ | I tried to create two guests with each 12Gb of RAM while the host had only 16Gb in total. I would have expected a nice handling of the error but it froze xend and I could even not shutdown properly. |
||
+ | <br>And, oh, BTW, no, [http://blog.coparsystems.com/?p=36&more=1&c=1&tb=1&pb=1 xen doesn't support memory overcommitment] |
Revision as of 08:31, 7 April 2011
XEN: installation
- see notes on Debian wiki
- aptitude install xen-linux-image-2.6.32-5-xen-amd64 xen-tools xen-utils
- backup /etc/xen/xend-config.sxp
- edit /etc/xen/xend-config.sxp, and uncomment line "(network-script network-bridge)" or for a non-default interface ethX:
(network-script 'network-bridge netdev=ethX bridge=xenbr0')
- reboot
- aptitude remove --purge linux-image-2.6.32-5-amd64 linux-image-2.6-amd64
- /etc/default/grub => GRUB_DEFAULT=2
- update-grub
- reboot
- cat /proc/xen/capabilities #(to check xend is running)
XEN: guest creation
- If you've a proxy it's much easier to have it defined in the environment variables:
- Edit /etc/environment
http_proxy=http://myproxy:port
- Logout/login
- Edit the config file for creating images (/etc/xen-tools/xen-tools.conf) to your needs:
--- xen-tools.conf.orig 2010-05-30 22:42:25.000000000 +0200
+++ xen-tools.conf 2010-08-17 17:47:35.000000000 +0200
@@ -52,7 +52,7 @@
# LVM volume group here instead
#
##
-# lvm = vg0
+lvm = vg0
#
@@ -125,12 +125,12 @@
# Disk and Sizing options.
##
#
-size = 4Gb # Disk image size.
+size = 8Gb # Disk image size.
memory = 128Mb # Memory size
swap = 128Mb # Swap size
# noswap = 1 # Don't use swap at all for the new system.
fs = ext3 # use the EXT3 filesystem for the disk image.
-dist = `xt-guess-suite-and-mirror -s` # Default distribution to install.
+dist = squeeze # Default distribution to install.
image = sparse # Specify sparse vs. full disk images.
#
@@ -166,7 +166,7 @@
#
# Uncomment this if you wish the images to use DHCP
#
-# dhcp = 1
+dhcp = 1
##
@@ -184,7 +184,7 @@
# Uncomment the following line if you wish to interactively setup
# a new root password for images.
#
-# passwd = 1
+passwd = 1
#
# If you'd like all accounts on your host system which are not present
@@ -254,10 +254,10 @@
#
# You may specify the things to use here:
#
-# serial_device = hvc0 #default
+serial_device = hvc0 #default
# serial_device = tty1
#
-# disk_device = xvda #default
+disk_device = xvda #default
# disk_device = sda
#
Example:
- xen-create-image --hostname=myguest1 --memory=12288 --swap=12288 --vcpus=20
- WARNING strangely the default root password was disabled with a '*' in /etc/shadow so impossible to log in. I had to mount manually the lv (/dev/vg0/myguest1-disk) to remove the '*'
One may prefer to setup the password interactively when creating the image with xen-create-image ... --passwd (or setup passwd=1 in /etc/xen-tools/xen-tools.conf as I've now shown in the above diff file) - lvm> lvcreate -L 1000G -n myguest1-data vg0
- /etc/xen/myguest1.cfg: add data volume:
root = '/dev/xvda2 ro' disk = [ 'phy:/dev/vg0/myguest1-disk,xvda2,w', 'phy:/dev/vg0/myguest1-swap,xvda1,w', 'phy:/dev/vg0/myguest1-data,xvda3,w', ]
- xm create -c /etc/xen/myguest1.cfg
- Hook the data drive as /home
- mkfs.ext4 /dev/xvda3
- In /etc/fstab: /dev/xvda3 /home ext4 noatime,nodiratime,errors=remount-ro 0 1
- mount /home
XEN quickref
- xen-create-image --hostname=mynewguest
- xen-delete-image
- xen-list-images
- xen-update-image # apt-get update; apt-get upgrade in the guest, !!! only if guest is NOT running
- xm create /etc/xen/mynewguest.cfg
- xm list # Show running xen guests
- xm info # Show xen version and many other info
- xm console mynewguest
- CTRL+] to detach
- xm shutdown mynewguest
- xm destroy mynewguest
XEN tuning
If you want xen1.example.com to start automatically at the next boot of the system, then do this:
ln -s /etc/xen/xen1.example.com.cfg /etc/xen/auto
By default it will attempt to save runing hosts when dom0 is halted. This means a "suspend-to-disk" of all domU in dom0 filesystem (/var/lib/xen/save). To prevent it and do regular shutdown of domU, edit /etc/default/xendomains and change:
#XENDOMAINS_SAVE=/var/lib/xen/save XENDOMAINS_SAVE=""
Misc notes
Boot & DHCP
I've still sometimes some issues at boot time when the xenbr0 bridge doesn't catch its IP...
In those cases I find dhclient still hooked to the non-existing bnx1 IF (which was renamed pbnx1 by XEN). I've to kill it and start a similar dhclient on IF xenbr0.
Finally I renamed the default interface as eth0 and called the xen bridge script without parameters: (network-script network-bridge)
Allocating too much memory
I tried to create two guests with each 12Gb of RAM while the host had only 16Gb in total. I would have expected a nice handling of the error but it froze xend and I could even not shutdown properly.
And, oh, BTW, no, xen doesn't support memory overcommitment