Configuring and Installing a Xen Hardware Virtual Machine (HVM) domainU Guest
Previous | Table of Contents | Next |
An Overview of Virtualization Techniques | Installing and Running Windows XP or Vista as a Xen HVM domainU Guest |
Purchase and download the full PDF and ePub versions of this Xen eBook for only $8.99 |
Xen hardware virtual machine (HVM) virtualization provides support for the virtualization of unmodified guest operating systems without the loss of performance inherent in the use of full virtualization (the different types of virtualization are described in the An Overview of Virtualization Techniques chapter of this book). In the case of host systems containing CPUs with virtualization support, the HVM approach provides superior levels of performance when compared to full virtualization.
Checking Hardware Support for Xen Hardware Virtual Machines (HVM)
In order to support hardware virtualization, the CPU must include Intel-VT or AMD-V support. This can be verified using the following commands:
For Intel CPUs:
grep vmx /proc/cpuinfo
For AMD CPUSs:
grep svm /proc/cpuinfo
If your system does not include this support (i.e neither of the above commands produce any output) you can still use Xen in paravirtualization mode. You will not, however, be able to run unmodified operating systems such as Microsoft Windows as a Xen guest operating system.
Preparing to Install a Xen HVM domainU Guest
In order to install a fully virtualized Xen guest some form of disk storage is needed to contain the installed operating system. This can take the form of a physical disk (such as /dev/sdb) or a disk image file. A suitable disk image file can be created using the dd command. For example:
dd if=/dev/zero of=xenguest.img bs=1024k seek=6144 count=0
The above command creates a 6Gb disk image file for use by the Xen HVM domainU guest.
In addition, suitable installation media (such as a DVD or ISO image) will be required from which to install the guest operating system onto the disk image or disk drive.
Creating a Xen HVM Configuration File
The example HVM guest configuration file provided with Xen is as follows:
import os, re arch = os.uname()[4] if re.search('64', arch): arch_libdir = 'lib64' else: arch_libdir = 'lib' #---------------------------------------------------------------------------- # Kernel image file. kernel = "/usr/lib/xen/boot/hvmloader" # The domain build function. HVM domain uses 'hvm'. builder='hvm' # Initial memory allocation (in megabytes) for the new domain. # # WARNING: Creating a domain with insufficient memory may cause out of # memory errors. The domain needs enough memory to boot kernel # and modules. Allocating less than 32MBs is not recommended. memory = 128 # Shadow pagetable memory for the domain, in MB. # If not explicictly set, xend will pick an appropriate value. # Should be at least 2KB per MB of domain memory, plus a few MB per vcpu. # shadow_memory = 8 # A name for your domain. All domains must have different names. name = "ExampleHVMDomain" # 128-bit UUID for the domain. The default behavior is to generate a new UUID # on each call to 'xm create'. #uuid = "06ed00fe-1162-4fc4-b5d8-11993ee4a8b9" #----------------------------------------------------------------------------- # The number of cpus guest platform has, default=1 #vcpus=1 # Enable/disable HVM guest PAE, default=1 (enabled) #pae=1 # Enable/disable HVM guest ACPI, default=1 (enabled) #acpi=1 # Enable/disable HVM APIC mode, default=1 (enabled) # Note that this option is ignored if vcpus > 1 #apic=1 # List of which CPUS this domain is allowed to use, default Xen picks #cpus = "" # leave to Xen to pick #cpus = "0" # all vcpus run on CPU0 #cpus = "0-3,5,^1" # run on cpus 0,2,3,5 # Optionally define mac and/or bridge for the network interfaces. # Random MACs are assigned if not given. #vif = [ 'type=ioemu, mac=00:16:3e:00:00:11, bridge=xenbr0, model=ne2k_pci' ] # type=ioemu specify the NIC is an ioemu device not netfront vif = [ 'type=ioemu, bridge=xenbr0' ] #---------------------------------------------------------------------------- # Define the disk devices you want the domain to have access to, and # what you want them accessible as. # Each disk entry is of the form phy:UNAME,DEV,MODE # where UNAME is the device, DEV is the device name the domain will see, # and MODE is r for read-only, w for read-write. #disk = [ 'phy:hda1,hda1,r' ] disk = [ 'file:/var/images/min-el3-i386.img,hda,w', ',hdc:cdrom,r' ] #---------------------------------------------------------------------------- # Configure the behaviour when a domain exits. There are three 'reasons' # for a domain to stop: poweroff, reboot, and crash. For each of these you # may specify: # # "destroy", meaning that the domain is cleaned up as normal; # "restart", meaning that a new domain is started in place of the old # one; # "preserve", meaning that no clean-up is done until the domain is # manually destroyed (using xm destroy, for example); or # "rename-restart", meaning that the old domain is not cleaned up, but is # renamed and a new domain started in its place. # # The default is # # on_poweroff = 'destroy' # on_reboot = 'restart' # on_crash = 'restart' # # For backwards compatibility we also support the deprecated option restart # # restart = 'onreboot' means on_poweroff = 'destroy' # on_reboot = 'restart' # on_crash = 'destroy' # # restart = 'always' means on_poweroff = 'restart' # on_reboot = 'restart' # on_crash = 'restart' # # restart = 'never' means on_poweroff = 'destroy' # on_reboot = 'destroy' # on_crash = 'destroy' #on_poweroff = 'destroy' #on_reboot = 'restart' #on_crash = 'restart' #============================================================================ # New stuff device_model = '/usr/' + arch_libdir + '/xen/bin/qemu-dm' #----------------------------------------------------------------------------- # boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d) # default: hard disk, cd-rom, floppy #boot="cda" #----------------------------------------------------------------------------- # write to temporary files instead of disk image files #snapshot=1 #---------------------------------------------------------------------------- # enable SDL library for graphics, default = 0 sdl=0 #---------------------------------------------------------------------------- # enable VNC library for graphics, default = 1 vnc=1 #---------------------------------------------------------------------------- # address that should be listened on for the VNC server if vnc is set. # default is to use 'vnc-listen' setting from /etc/xen/xend-config.sxp #vnclisten="127.0.0.1" #---------------------------------------------------------------------------- # set VNC display number, default = domid #vncdisplay=1 #---------------------------------------------------------------------------- # try to find an unused port for the VNC server, default = 1 #vncunused=1 #---------------------------------------------------------------------------- # enable spawning vncviewer for domain's console # (only valid when vnc=1), default = 0 #vncconsole=0 #---------------------------------------------------------------------------- # set password for domain's VNC console # default is depents on vncpasswd in xend-config.sxp vncpasswd='' #---------------------------------------------------------------------------- # no graphics, use serial port #nographic=0 #---------------------------------------------------------------------------- # enable stdvga, default = 0 (use cirrus logic device model) stdvga=0 #----------------------------------------------------------------------------- # serial port re-direct to pty deivce, /dev/pts/n # then xm console or minicom can connect serial='pty' #----------------------------------------------------------------------------- # Qemu Monitor, default is disable # Use ctrl-alt-2 to connect #monitor=1 #----------------------------------------------------------------------------- # enable sound card support, [sb16|es1370|all|..,..], default none #soundhw='sb16' #----------------------------------------------------------------------------- # set the real time clock to local time [default=0 i.e. set to utc] #localtime=1 #----------------------------------------------------------------------------- # set the real time clock offset in seconds [default=0 i.e. same as dom0] #rtc_timeoffset=3600 #----------------------------------------------------------------------------- # start in full screen #full-screen=1 #----------------------------------------------------------------------------- # Enable USB support (specific devices specified at runtime through the # monitor window) #usb=1 # Enable USB mouse support (only enable one of the following, `mouse' for # PS/2 protocol relative mouse, `tablet' for # absolute mouse) #usbdevice='mouse' #usbdevice='tablet' #----------------------------------------------------------------------------- # Set keyboard layout, default is en-us keyboard. #keymap='ja'
This file provides an excellent template to use as the basis for an HVM domainU guest configuration file. Many of these values can be left unchanged. Some key values which will need to be changed will be discussed in the remainder of this section.
Firstly, the domainU system needs to be given a suitable name. The name = field should, therefore, be changed accordingly. For example:
name = "XenHVMGuest1"
The disk = line needs to be modified to reflect the required disk and CD/DVD drive configuration. For example, if you have decided to use a physical disk accessible on the host system as /dev/sdb:
disk = [ 'phy:/dev/sdb,hda,w', 'phy:/dev/cdrom,hdc:cdrom.r' ]
where /dev/cdrom is replaced by the device name for the CDROM/DVD drive on your chosen Linux distribution.
Alternatively, if you have chosen to use a disk image instead of a physical disk drive:
disk = [ 'file:/home/xen/xenguest.img,hda,w', 'phy:/dev/cdrom,hdc:cdrom,r' ]
The above examples assume that you will be installing the guest operating system from a CD or DVD drive. It is also possible to perform the installation from an ISO image residing on the filesystem of the host. For example:
disk = [ 'file:/home/xen/XenGuest.img,hda,w', 'file:/media/disk/ISO/CentOS-5.1-i386-bin-DVD.iso,hdc:cdrom,r' ]
Xen provides a choice of VNC or SDL for supporting a graphical console when the guest is running. For example the following settings select VNC:
vnc = 1 sdl = 0
whilst the following selects SDL:
vnc = 0 sdl = 1
Both SDL and VNC work well in terms of displaying a graphical console, although VNC has some distinct advantages over SDL. Firstly, VNC provides greater flexibility than SDL in terms of remote access to the domainU graphical console. With VNC it is possible to connect to the graphical console from other systems, either on the local network or even over the internet. Secondly, when you close a VNC viewer window the guest domain continues to run allowing you to simply reconnect to carry on where you left off. Closing an SDL window, however, immediately terminates the guest domainU system resulting in possible data loss.
By default Xen does not automatically start the VNC console when the domainU guest starts up. In order to have the graphical console spawned automatically, change the vncconsole = value to 1:
vncconsole=1
Finally, the boot search sequence needs to be defined. Since we have to install the operating system before we can boot from the hard disk drive we need to place the CDROM/DVD first in the boor order:
#----------------------------------------------------------------------------- # boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d) # default: hard disk, cd-rom, floppy boot="dc"
Save the modified configuration file as XenHVMGuest.cfg.
Booting the HVM Guest
The guest system can now be started using the xm create command, for example:
xm create XenHVMGuest.cfg -c
All being well the domainU guest will start with output to the Xen text console similar to the following:
Using config file "./XenHVMGuest.cfg". Started domain XenHVMGuest
and the installation process from the designated media will begin.
Connecting to the HVM domainU Guest Graphical Console
If SDL was chosen for the graphical console then the console should appear when the guest starts up. If, on the other hand, VNC was selected and the HVM domainU was not configured to automatically start vncviewer it is now necessary to connect manually. By default the VNC port is 5900 + the ID of the domain to which you wish to connect (which can be obtained using the xm list command). For example, to connect to domain ID 10:
vncviewer localhost:5910
In my experience this is not always the case and the best way to find out which port is being used is to run the following command:
ps -ef | grep vnc root 2992 2441 13 14:51 ? 00:00:00 /usr/lib/xen/bin/qemu-dm -d 11 -vcpus 1 -boot cd -serial pty -acpi -domain-name XenHVMGuest -net nic,vlan=1,macaddr=00:16:3e:2e:10:b0,model=rtl8139 -net tap,vlan=1,bridge=xenbr0 -vnc 127.0.0.1:0 -vncviewer
As we can see from the above output, the Xen guest named XenHVMGuest is accessible using 127.0.0.1:0. Using this information we would, therefore, connect as follows:
vncviewer 127.0.0.1:0
Once the installation of the guest operating system has completed be sure to reverse the boot order in the configuration file if you no longer wish to have the CD/DVD drive first:
#----------------------------------------------------------------------------- # boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d) # default: hard disk, cd-rom, floppy boot="cd"
Purchase and download the full PDF and ePub versions of this Xen eBook for only $8.99 |
Previous | Table of Contents | Next |
An Overview of Virtualization Techniques | Installing and Running Windows XP or Vista as a Xen HVM domainU Guest |