个人工具

UbuntuHelp:Xen

来自Ubuntu中文

Wikibot讨论 | 贡献2008年4月23日 (三) 12:07的版本

跳转至: 导航, 搜索

Introduction

Xen is a virtual machine for linux that allows you to run multiple operating systems on a single hardware machine.

Terms

  • Dom0: The host machine OS, also called host. You know, the OS of the actual physical server that you have.
  • DomU: A Xen guest domain, also called guest. A DomU is a single Xen virtual machine. The “U” stands for “unprivileged”.
  • HVM: HVM is a way of running Windows in Xen.

Note: This guide is written for Feisty. It is currently not fully compatible with Gutsy, use at your own risk! Older versions are not really a concern, but if you really want to, please merge older information in here cleanly. The next big update of the guide will be for Hardy. Note: If you just want to run a virtual instance of windows, it is recommended to try KVM or [VirtualBox] VirtualBox instead. For irc on freenode, try: ##xen or #ubuntu-virt For development information with the ubuntu xen community, see https://wiki.ubuntu.com/Xen

Installation

Install from packages (recommended)

sudo aptitude install ubuntu-xen-server

Note: There is also an ubuntu-xen-desktop, and an ubuntu-xen-desktop-amd64. The purpose of these is a bit ambiguous, but they install firefox and all kinds of gnome libs. They may also not be PAE enabled... compiled for systems with more then 4GB of RAM. Even if you are on a 64 bit system, you should still install ubuntu-xen-server. More package details here: http://packages.ubuntu.com/feisty/base/ubuntu-xen-server The Feisty AMD64 version of ubuntu doesn't have an ubuntu-xen-server metapackage so far. Instead, use this. For Feisty AMD64:

sudo aptitude install xen-image-2.6.19-4-generic-amd64 bridge-utils libxen3.0 python-xen3.0 xen-docs-3.0 xen-hypervisor-3.0 xen-ioemu-3.0 xen-tools xen-utils-3.0

For Gutsy AMD64:

sudo aptitude install ubuntu-xen-server        # Not in repository at 02/25/2008
sudo aptitude install ubuntu-xen-desktop-amd64 # includes xenman

Maybe install xenman too, but it installs all kinds of gnome stuff. Next you need to enable networking. [Gutsy: I had to reboot the xen kernel before I could run the xend script]

vim /etc/xen/xend-config.sxp

#(network-script network-dummy)
(network-script network-bridge)

then
sudo /etc/init.d/xend restart  # for the change to take effect

Its also a good idea to increase the default number of loop mounts allowed. Not really needed if you are going to use LVM, but it also wont break anything if you do it anyway.

vim /etc/modules

loop max_loop=64

This is probably a good point to reboot your machine so that you use the xen kernel. After reboot is a good chance to check your network and ensure it works. Both Feisty and Gutsy may have network problems with certain hardware. If you are experiencing network problems, check out this potential solution

ACPI

If - after reboot - you see a kernel oops in dmesg or suggestion to boot with irqpoll, then try disabling ACPI and Plug 'n Play OS options in your BIOS. If you have no access to these options from the BIOS, then you may need to boot your kernel with acpi=off option. The reason is that there is no ACPI in the Xen kernel. Edit /boot/grub/menu.list and find a module line:

title           Xen 3.1 / Ubuntu 7.10, kernel 2.6.22-14-xen
root            (hd0,0)
kernel          /boot/xen-3.1.gz
module          /boot/vmlinuz-2.6.22-14-xen root=UUID=your-uuid-here ro console=tty0
module          /boot/initrd.img-2.6.22-14-xen

change the one module line with options above to:

module          /boot/vmlinuz-2.6.22-14-xen root=UUID=your-uuid-here ro console=tty0 acpi=off

Initrd

Most people can skip this section. This is just in case you get a kernel panic at reboot, then you probably have SCSI or SATA modules that need to be included in an initrd. Do this to create an initrd:

sudo depmod -a xen-3.0-i386.gz
sudo mkinitramfs -o /boot/xen-3.0-i386.initrd.img 2.6.19-4-generic

And then add this as a second module line in the Xen section of your menu.lst file.

module      /boot/xen-3.0-i386.initrd.img

This recommendation might be wrong. Please correct it if so. See here and and here for more details.

Prebuilt Binaries install

This section has not yet been written. http://xen.xensource.com/download/dl_31tarballs.html http://www.howtoforge.com/xen_3.0_ubuntu_dapper_drake

Guest Templates

For a full list of possible xen domU config options, type sudo xm create --help_config

LVM partitioning

xen-tools can create lvm volumes for you, so you can skip this section. If you need to make lvm volumes yourself you can use these commands. I just used the ubuntu installer to setup my LVM volume group initially. If you are using local .img files for your xen guests, then you dont need lvm.

sudo lvdisplay                         # To see existing lvm volumes.
lvcreate -n myguest-disk -L +100G my_volume_group    # To create a volume 
lvcreate -n myguest-swap -L +4G   my_volume_group    # To create another volume

How to extend an LVM partition

# e2fsck -f /dev/vg0/<DomU_name>
# lvextend -L +1G /dev/vg0/<DomU_name>
# resize2fs /dev/vg0/<DomU_name>

Using loopback-mounted-file

Create sparse file for disk, and non-sparse file for swap.

dd if=/dev/zero of=/mnt/domains/myslice/disk.img bs=1 count=0 seek=25G
dd if=/dev/zero of=/mnt/domains/myslice/swap.img bs=1G count=1

mkfs.ext3 ./disk.img  (then say Y)
mkswap ./swap.img

Network for DomU

If you use the bridged network setup, it may be necessary, to enable dhcp for eth0. Make shure, both lines exist.

sudo vim /etc/network/interfaces

  auto eth0
  iface eth0 inet dhcp

DomU using xen-tools (recommended)

First you need to edit some of the default values in xen-tools.conf . Go through the file and set them to what you want. I've mentioned the more important ones below. Make sure you set a gateway and netmask or networking wont work.

# vim /etc/xen-tools/xen-tools.conf

gateway   = 192.168.0.1
netmask   = 255.255.255.0
passwd = 1
kernel = /boot/vmlinuz-2.6.19-4-server
initrd = /boot/initrd.img-2.6.19-4-server
mirror = http://archive.ubuntu.com/ubuntu/

Create a new image.

sudo xen-create-image --hostname=xen1.example.com --ip=192.168.1.10 --ide --force

Tail the log file under /var/log/xen to see progress. There is no real indication on the command-line that anything is happening, though you will see some network traffic, possibly. Someone said that if you don't use --ide, it wont work. So I took their advice. man xen-create-image says " --ide Use IDE names for virtual devices (hda not sda)" When the command finishes, it will leave a config file in /etc/xen named based on the host name your specified. This config file can be used in the command below that creates the virtual instance. Start a xen host.

sudo xm create /etc/xen/xen1.example.com.cfg

Other DomU Setups

Stuff goes here.

Other DomU Guest Configurations

Stuff to check when converting a disk image to a Dom U

/etc/fstab /etc/conf.d/net or /etc/network/interfaces /etc/resolv.conf /lib/modules/kernel-modules ( copy them to the guest if needed ) on gentoo fix the /sbin/rc bug that causes /sys and /proc errors. Make sure you setup an empty /sys, /proc, and setup a skeleton /dev. set root passwd hostname Look out for /etc/udev/rules.d/70-persistent-net.rules which can change your eth device id.

Using debootstrap

sudo apt-get install debootstrap mount the guest partition and sudo cp -a /lib/modules/2.6.19-4-server/ /mnt/myguest/lib/modules/ add more info here.

Gentoo Guest

http://bugs.gentoo.org/show_bug.cgi?id=192436

Ubuntu Guest is Gutsy 7.10 or newer

The xen-tools hook scripts included for gutsy target are merely a link to edgy, which is problematic. The init system has changed since Edgy. Also, there is a bug with accessing hwclock. The result is a newly created gutsy domU appears to crash or hang after mounting the rootfs. The xen-tools patch/workaround:

1) Remove the symbolic link /usr/lib/xen-tools/gutsy.d and make a copy of /usr/lib/xen-tools/edgy.d to /usr/lib/xen-tools/gutsy.d
rm /usr/lib/xen-tools/gutsy.d
cp -a /usr/lib/xen-tools/edgy.d /usr/lib/xen-tools/gutsy.d
mv /usr/lib/xen-tools/gutsy.d/15-disable-hwclock /usr/lib/xen-tools/gutsy.d/21-disable-hwclock

2) Edit /usr/lib/xen-tools/gutsy.d/21-disable-hwclock and be sure to have the lines below:
chroot ${prefix} /usr/sbin/update-rc.d -f hwclock.sh remove
chroot ${prefix} /usr/sbin/update-rc.d -f hwclockfirst.sh remove
chroot ${prefix} rm -f /etc/udev/rules.d/85-hwclock.rules
chroot ${prefix} ln -sf /bin/true /sbin/hwclock

3) Create a hook to enable the gettys

cp /usr/lib/xen-tools/gutsy.d/30-disable-gettys /usr/lib/xen-tools/gutsy.d/32-enable-gettys
now edit the above file to execute the following:

#
#  Change first console setting to xvc0 upstart
#
echo "xvc0" >> ${prefix}/etc/securetty
sed -i "s/tty1/xvc0/" ${prefix}/etc/event.d/tty1

Set runlevel and console devices: echo "extra = '2 console=xvc0'" >> /etc/xen/guestname.cfg Edit guestname.cfg and assign mac addr to the vif: vif = [ 'mac=xx:xx:xx:xx:xx:xx, ip=a.b.c.d' ]

Windows HVM Guests

Make sure you have HVM support turning on in the BIOS.

sudo xm dmesg | grep VMX

For the initial install you can mount a iso as a cdrom. A vnc server will be started on localhost. To get the server to run on the machines public facing ips, make this change.

vim /etc/xen/xend-config.sxp

#(vnc-listen '127.0.0.1')
(vnc-listen '0.0.0.0')

and dont forget  sudo /etc/init.d/xend restart

Your xen guest config file should look like this:

#Kernel and memory size
kernel = '/usr/lib/xen-ioemu-3.0/boot/hvmloader'
device_model = "/usr/lib/xen-ioemu-3.0/bin/qemu-dm"
builder = 'hvm'
memory  = '512'
disk    = [ 'phy:barracudas/winxp01-disk,ioemu:hda,w', 'file:/home/steven/winxp.iso,ioemu:hdc:cdrom,r' ]

#  Hostname and Networking
name    = 'winxp01'
vif  = [ 'type=ioemu, bridge=xenbr0' ]

#  Behaviour
boot='d'  #d is cdrom boot, c is disk boot.
vnc=1
vncviewer=1
sdl=0

This works for booting a Windows 2003 HVM guest:

#  -*- mode: python; -*-

import os, re
arch = os.uname()[4]
if re.search('64', arch):
    arch_libdir = 'lib64'
else:
    arch_libdir = 'lib'

kernel = "/usr/lib/xen/boot/hvmloader"
builder='hvm'
memory = 756
shadow_memory = 8
name = "Windoze"
vif = [ 'type=ioemu, bridge=xenbr0' ]
disk = [ 'phy:/dev/vm-disks/win2k3,ioemu:hda,w', 'file:/root/en_win_srv_2003_r2_standard_cd1.iso,hdc:cdrom,r' ]
boot = "d"

device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm'
vnc=1
vncpasswd=''
serial='pty'

GNOME as domU guest

  1. Configure GDM to start VNC, editing the `/etc/X11/gdm/gdm.conf`

Under [servers] heading, add this line, and comment out others like it:

  0=VNC 

Before the [server-Standard] section, add:

  [server-VNC]
  name=VNC server
  command=/usr/bin/Xvnc -geometry 800x600 -depth 24
  flexible=true 

More info: http://wiki.xensource.com/xenwiki/XenDemoLaptop More information: http://www.mail-archive.com/[email protected]/msg24961.html http://openvz.org/pipermail/users/2007-January/000521.html

Troubleshooting

Setting locale failed errors

If you are getting errors on your guest that look like this,

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
        LANGUAGE = (unset),
        LC_ALL = (unset),
        LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

then just run this command: locale-gen en_US.UTF-8 Of course replace your own local name there.

Logging into your domU via the console

In order to be able to login to your domU from the console using:

 
xm create {your hostname}.cfg -c 

(to the set root password for ssh, for instance, or to see more output than just kernel output when debugging) it may be necessary to add the following line to your /etc/xen/{your hostname}.cfg

extra='xencons=tty'

domU freezes as init touches the hardware clock

Additionally, if the domU seems to freeze after "Setting the system clock.." you may need to mount the domU and add the following line to the bottom of /etc/default/rcS:

HWCLOCKACCESS=no

Other issues

See the older wiki entry XenVirtualMachine for additional suggestions to try. Also try out this guide for xen on feisty: http://www.howtoforge.com/ubuntu_7.04_xen_from_repositories

Great, its setup. Now how do I use it?

Here are the most important Xen commands:

xm create -c /path/to/config - Start a virtual machine.
xm shutdown <name> - Stop a virtual machine.
xm destroy <name> - Stop a virtual machine immediately without shutting it down. It's as if you switch off the power button.
xm list - List all running systems.
xm console <name> - Log in on a virtual machine.
xm help - List of all commands.

Links

Sister Wiki's

Learning Sites

  • [10] - A wiki dedicated to documenting the different virtualization technologies available in Linux.

Other Reference