3、Xen的安装;

在写本文时,Xen的当前最新版本是xen-3.0.1,它基于的内核版本是2.6.12.6的。您可以根据自己的操作系统的情况来选择一种安装方式,适合您的就是最好的;


3.1 安装Xen的准备工作;

拥有 GRUB引导的Linux做为安装平台,还要编译工具,比如gcc、binutils 及make和automake等;开发库有zlib和python-dev等;

具体明细请参阅: 《Xen v3.0 用户手册》

由于Xen用Python 开发的,所以Python 当然也是必不可少的。如果您是新手,我建议您用自己所用的操作系统软件包管理工具来安装这些软件包。


3.2 在Redhat/Fedora 操作平台上的安装;

在Fedora/Redhat平台上安装比较简单,您可以通过yum 来在线安装Xen和支持Xen的内核;因为Fedora/Redhat已经提供对Xen的支持了;Fedora/Redhat 提供的Xen内核支持比较高;不过就目前我的测试来看好象经常会机器重启,存在的问题可能是桌面环境造成的,比如GNOME桌面,打开就有重启的现象,也可能是Fedora/Redhat提供的Xen内有BUG;

安装Xen及支持Xen的请参考:《Fedora Core 5.0 用 Xen 虚拟Slackware 10.2》

对于Fedora 4.0及Redhat和Fedora 5.0类似;现在Yum的源上都有Xen和支持Xen的内核包;


3.3 通过Xen的二进制包来安装(几乎适用所有的Linux发行版);

通过Xen的二进制软件包来安装,这应该是通用的,几乎适合所有的Linux操作系统。由于二进制所是已经编译好的,我已经在Slackware 平台上用这种方法来安装,还是成功的。另外etony兄也在Debian上安装成功;

您应该到 http://www.xensource.com/downloads 去下载二进制包,文件名中带有xen-3.0.1-install字样的,比如 xen-3.0.1-install-x86_32.tgz,这个软件包表示适用x86_32位机器的。也就是我们用的普通32位PC机。如果您用的是64位机器,应该下载文件名带有x86_64字样的软件包;

下载好后,就解压安装,我们还是以支持x86_32构架机器的xen-3.0.1-install-x86_32.tgz为例:

 

[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz
[root@localhost ~]# cd xen-3.0.1-install
[root@localhost xen-3.0.1-install]# sh install.sh

 

判断是不是安装好了,请查看/boot目录,会发现有很多文件名带有xen字样的文件,另外在/lib/moudules中也会发现有支持xen的内核模块;另外再看一看是否有/etc/xen这个目录。我想应该是有的。


3.4 通过Xen的源码包编译安装(仅供参考);

通过Xen的二进制包来安装,可能有时内核不太适应我们的需要,这时我们要通过Xen的源码包来安装。通过自己编译来安装Xen及支持Xen的内核;Xen的源码包,您可以到 http://www.xensource.com/downloads去下载。文件名带有 xen-3.0.1-src字样的,比如 xen-3.0.1-src.tgz。


3.41 编译原理;

通过Xen的源码包编译,其实也没有什么神秘的。在Xen的源码包中提供了一些内核补丁和内核配置文件等。当我们执行编译命令时,首先编译的是Xen程序本身,然后是编译内核 。在编译内核时,程序会自动判断是否有内核源码 ,xen-3.0.1支持的内核是2.6.12.6,如果在xen的解压目录下没有,他就会自动内核的官方站 http://www.kernel.org 下载 linux-2.6.12.tar.bz2。然后就是自动解压并为此内核打补丁。然后系统会根据指令要求,然后采用相应的内核配置文件,或配置内核进行编译。


3.42 编译过程简说;

第一步:解压软件包,查看Xen源码包所带的文件;

 

[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz
[root@localhost ~]# cd xen-3.0.1
[root@localhost xen-3.0.1]# ls

COPYING    Config.mk README        docs    install.sh            patches xen
ChangeLog Makefile   buildconfigs extras linux-2.6-xen-sparse tools

 

我们解压xen-3.0.1-src.tgz 后,进入解压目录,会看到以上的文件或文件夹。patches是内核的补丁包,linux-2.6-xen-sparse是支持Xen的内核目录树,值得注意的是内核的配置文件就在这个目录中;

 

[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/
xen0_defconfig_ia64    xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32
xen0_defconfig_x86_32 xenU_defconfig_ia64    xenU_defconfig_x86_64 xen_defconfig_x86_64

 

看到上面所列出的内核配置文件了吧,我们可能会发现文件名带有xen0字样的和xenU字样的两类文件。在这两类内核中,我们大多会修改的内核配置文件是运行xen的操作系统的内核配置文件,另一个是用于虚拟操作系统的内核配置文件;

xen0字样的就是我们一般是用于我们运行xen的操作系统的内核 ,而xenU字样的就是为虚拟操作系统所提供的内核。另外还有x86_32和x86_64之分,这表示CPU的架构。

比如我们用的是x86架构32位的CPU,我们在编译内核的时候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。

举个例子:比如我的机器架构是x86_32位的,我安装xen的操作系统是Slackware,我想在Slackware 虚拟Debian 、Gentoo、Fedora等操作系统。这时编译虚拟平台Slackware所用的内核的配置文件就是 xen0_defconfig_x86_32 ,而被虚拟平台(Debian 、Gentoo、Fedora等操作系统)所用的内核就是 xenU_defconfig_x86_32 。

弄明白内核配置文件有何用?我们能明白xen在编译过程中用了哪些内核配置文件,目的是我们在编译过程中可以根据自己的需要来修改它,以编译出适合我们需要的内核。

比如我们想让Slackware 支持xen,并且还要支持NTFS文件系统;所以我们就要修改 xen0_defconfig_x86_32这个文件。找出如下一行;

 

# CONFIG_NTFS_FS is not set

 

改为

 

CONFIG_NTFS_FS=m

 

如果您想让被虚拟的操作系统(Debian 、Gentoo、Fedora等)也支持NTFS文件系统,所以要在 xenU_defconfig_x86_32找出如下一行;

 

# CONFIG_NTFS_FS is not set

 

改为

 

CONFIG_NTFS_FS=m

 

第二步:配置内核;

这一步有两种方法,一个是直接修改内核配置文件,另一个是内核配置界面来配置;

方法一:通过修改内核配置文件;

Xen所带的内核配置文件位于解压目录中的linux-2.6-xen-sparse/arch/xen/configs 。我们前面已经提到了相关配置文件的用途。请仔细看前一步的说明;

方法二:通过内核配置界面来配置;

[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig

第三步:编译和安装Xen;

 

[root@localhost xen-3.0.1]# make
[root@localhost xen-3.0.1]# make install

 


3.43 创建initrd文件;

有的系统需要initrd-XXXX.img或initrd.gz文件才能引导起来,如果您的系统用了支持xen的支持引导不起来,就要创建一个initrd-XXXX.img或initrd.gz的文件;请参考: 《Xen v3.0 用户手册》


3.44 关于xen0和xenU内核说明;

一般的情况下会在/boot目录中有两个与xen相关的内核,有的文件名带有vmlinuz-XXXX-xen0字样的,有的带有vmlinuz-XXXX-xenU字样的;比如:

 

[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen*
lrwxrwxrwx 1 root root      21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root      21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -> vmlinuz-2.6.12.6-xenU
lrwxrwxrwx 1 root root      21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -> vmlinuz-2.6.12.6-xen0
lrwxrwxrwx 1 root root      21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -> vmlinuz-2.6.12.6-xenU
-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0
-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU

 

其实就是两个与xen相关的内核,其它的都是这两个内核文件的链接;也就是vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU。vmlinuz-2.6.12.6-xen0是用来引导虚拟平台的,比如我们在Slackware上安装Xen,那Slackware就是虚拟平台;所以如果要让Slackware的xen能运行起来,必须用xen相关的内核 ,也就是vmlinuz-2.6.12.6-xen0这个内核。 而XenU字样这个内核,是用来引导虚拟操作系统用的,我们在以后会提到它。


4、引导XenLinux的GRUB配置;

一旦我们在Linux操作系统安装好Xen后,这样的系统应该被称为XenLinux。如何才能引导拥有Xen的Linux呢?这时我们要用到GRUB系统引导管理器。我们修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位于/boot/grub目录中;


4.1 判断系统所在的分区;

 

[root@localhost ~]# df -h
Filesystem            容量 已用 可用 已用% 挂载点
/dev/hda6              12G 6.9G 4.9G 59% /

 


4.2 查看/boot目录中xen相关的配置文件;

 

[root@localhost ~]# ls /boot

 

注意:我们前面已经说过了,xen提供了两个内核,一个是虚拟平台用的,也就是文件名带有xen0字样的;另一个带有xenU字样的,这是用于引导和支持虚拟操作系统用的。

什么虚拟平台,比如我们想用Slackware 的Xen虚拟Fedora、Gentoo .... 。那么Slackware就是虚拟平台,而Fedora、Gentoo... .. 是被虚拟的操作系统。Slackware是一个真实安装在您的机器上的操作系统,它提供的是一个运行xen的环境。为了让Slackware能支持xen ,所以必须用于支持Xen的内核,也就是在/boot中有xen0字样的文件。

如果您安装了Xen,会在/boot中有两个文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU,


4.3 禁掉 TLS Libraries ;

 

[root@localhost ~]#mv /lib/tls /lib/tls.disabled

 

禁掉的理由,请查看: 《Xen v3.0 用户手册》


4.4 引导XenLinux的GRUB内容;

 

title SlackXen
kernel /boot/xen-3.0.gz
module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0

 

如果有inintrd-2.xxxx-xen.img或initrd.gz之类的文件才能引导起来系统,还要加一行;要以/boot中的initrd相关的文件为准;

 

modules /boot/initrd.gz

 

有关GRUB的文档:《系统引导管理器GRUB,为初学者指南》

注意:与传统GRUB的定义有点不同,就是kernel 是用来定义Xen的,而Linux的内核及initrd映像是通过module 指令定义的;要仔细看好;


5、Xen的配置和管理工具;


5.1 Xen的相关文件存放位置;

xen安装后,文件放在什么地方了呢?主要放在以下几个目录;


5.11 内核及xen自身存放于 /boot

安装有xen的操作系统下的/boot目录中,存放xen本身及支持xen的内核文件。比如文件名带有xen0和xenU相关的文件;


5.12 内核模块存放于 /lib/modules

内核模块包括虚拟平台支持xen的内核xen0的模块,及支持虚拟操作系统所用的xenU的模块,一般的情况下是在 /lib/modules下有两个xen相关的目录存放。一个是文件夹名带有xen0字样的,另一个是xenU字样的;


5.13 xen的配置文件及守护程序的存放位置;

一般的情况下,Xen的配置文件存放于/etc/xen目录。 比如 xend-config.sxp是用于配置网络的,不过我们不必更改,用其默认的就能完成我们的需要。xmexample1 xmexample2是两个示例性的配置文件。我们在配置引导被虚拟的操作系统时,这两个文件可供参考;

Xen的服务器xend和xendomains启动脚本,一般是位于/etc/init.d/目录中,也就是/etc/init.d/xend ;/etc/init.d/xend负责启动xend服务器,而/etc/init.d/xendomains负责第一个虚拟的系统及其它的Domains,也就是Domain 0 。


5.14 可执行命令存放于/usr/sbin

 

[root@localhost ~]#ls /usr/sbin/xen*
/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored
/usr/sbin/xenbaked     /usr/sbin/xend         /usr/sbin/xenperf    /usr/sbin/xentop

[root@localhost ~]#ls /usr/sbin/xm

 


5.2 Xen服务器的启动;

xend服务器的启动/停止/重启/状态查询,请用下面的命令;

 

[root@localhost ~]# /etc/init.d/xend start   启动xend,如果 xend没有运行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在运行)
[root@localhost ~]# /etc/init.d/xend restart 重启正在运行的 xend,如果xend没有运行,则启动
[root@localhost ~]# /etc/init.d/xend status   查看xend状态

 

启动xendomains 服务器的启动/停止/重启/状态查询,请用下面的命令;一般的情况下,xend服务器启动了,xendomains也会自动启动。所以这个只是掌握一下就行了;

 

[root@localhost ~]# /etc/init.d/xend start   启动xend,如果 xend没有运行)
[root@localhost ~]# /etc/init.d/xend stop 停止xend,如果xend正在运行)
[root@localhost ~]# /etc/init.d/xend restart 重启正在运行的 xend,如果xend没有运行,则启动
[root@localhost ~]# /etc/init.d/xend status   查看xend状态

 

 

[root@localhost ~]# /etc/init.d/xendomains start
[root@localhost ~]# /etc/init.d/xendomains stop
[root@localhost ~]# /etc/init.d/xendomains restart
[root@localhost ~]# /etc/init.d/xendomains status

 


5.3 Xen 管理工具xm;

我们前面提到Xen的可执行命令中,我们可能看到了一些以xen开头的命令,您不妨尝试一个一个的尝试一下他们是做什么用的;比如xend是服务器的开启运行命令 ... ....

其中xm命令,就是管理Xen的最基本的工具;您可以通过xm --help 来获得帮助;

5.31 列出所有正在运行的虚拟操作系统;

 

[root@localhost ~]# /usr/sbin/xm   list

Name                              ID Mem(MiB) VCPUs State Time(s)
Domain-0                           0      450     1 r----- 5377.0
fc5                                4      256     1 -b----     0.1

 

列出所有正在运行的虚拟系统(也可以称为虚拟机);我们可以看到,一个名为Domain-0的系统正在运行。Domain-0就是Xen本身,也可以称为虚拟平台内存大小,而Domain-0负责提供其它虚拟操作系统的硬件环境,其它的系统都是基于Domain-0开始的,我们看到他的ID为0就应该知道它的权限是至高无尚的。所占用的内存是450M,不过这个是可以指定的。 虚拟的CPU个数是1个,运行状态处于r,也就是run,正在运行中;运行时间是5377秒;

还有一个虚拟系统fc5,他的id是4,占用内存256M,虚拟CPU个数是1个 ... ...


5.32 通过配置文件来引导被虚拟的操作系统;

 

[root@localhost ~]# /usr/sbin/xm    create -c 虚拟操作系统的启动配置文件

 

比如我们要启动被虚拟的操作系统Fedora Core 5.0 ,我们要写一个启动Fedora的配置文件,比如是fc5vm.cfg。然后就可以通过下面的命令来引导Fedora了;

 

[root@localhost ~]# /usr/sbin/xm     create   -c   fc5vm.cfg

 


5.33 从终端或控制台登录正在运行的虚拟操作系统;

 

[root@localhost ~]# /usr/sbin/xm    console   正在运行的虚拟操作系统的Name或ID;

 

举例:

 

[root@localhost ~]# /usr/sbin/xm   list
Name                              ID Mem(MiB) VCPUs State Time(s)
Domain-0                           0      512     1 r----- 5561.9
fc5                                4      256     1 -b----     0.2

[root@localhost ~]# /usr/sbin/xm   console   fc5

 


5.34 存储正在运行的虚拟操作系统的状态及唤醒虚拟操作系统;

 

[root@localhost ~]# /usr/sbin/xm   save <DomId> <File>   
[root@localhost ~]# /usr/sbin/xm   restore <File>          

 

举例:

 

[root@localhost ~]# /usr/sbin/xm   list
Name                              ID Mem(MiB) VCPUs State Time(s)
Domain-0                           0      458     1 r-----   260.3
fc5                                2      256     1 ------     6.5

[root@localhost ~]# /usr/sbin/xm     save 2 fc5run.save
[root@localhost ~]# /usr/sbin/xm    restore fc5run.save
[root@localhost ~]# /usr/sbin/xm     console fc5

 


5.35 停止正在运行的虚拟操作系统/激活停止的虚拟操作系统

 

[root@localhost ~]# /usr/sbin/xm    pause <DomId>
[root@localhost ~]# /usr/sbin/xm    unpause <DomId>  

 

举例:

 

[root@localhost ~]# /usr/sbin/xm   list

Name                              ID Mem(MiB) VCPUs State Time(s)
Domain-0                           0      458     1 r-----   260.3
fc5                                2      256     1 ------     6.5

[root@localhost ~]# /usr/sbin/xm    pause 2
[root@localhost ~]# /usr/sbin/xm    unpause 2

 


5.36 调整虚拟平台/虚拟操作系统的占用内存

我们可以调整正在运行中的虚拟平台(Domain-0)所占内存大小及虚拟操作系统所占用的内存大小;

 

[root@localhost ~]# /usr/sbin/xm mem-set   <DomId>   <Mem>

 

举例:

 

[root@localhost ~]# /usr/sbin/xm   list

Name                              ID Mem(MiB) VCPUs State Time(s)
Domain-0                           0      458     1 r-----   260.3
fc5                                2      256     1 ------     6.5

[root@localhost ~]# /usr/sbin/xm mem-set 2 128

 


5.37 关闭被虚拟的系统

 

[root@localhost ~]# /usr/sbin/xm    shutdown 虚拟操作系统的Name或DomID
[root@localhost ~]# /usr/sbin/xm   destroy <DomId> 立即停止虚拟的系统 (重要);

 

举例:

 

[root@localhost ~]# /usr/sbin/xm   list

Name                              ID Mem(MiB) VCPUs State Time(s)
Domain-0                           0      458     1 r-----   260.3
fc5                                2      256     1 ------     6.5

[root@localhost ~]# /usr/sbin/xm   shutdown fc5

[root@localhost ~]# /usr/sbin/xm   shutdown 2

[root@localhost ~]# /usr/sbin/xm    destroy 2

 


5.38 调整虚拟平台及虚拟操作系统的虚拟CPU个数;

 

[root@localhost ~]# /usr/sbin/xm    vcpu-set   <DomId> <VCPUs>  

 

举例:

 

[root@localhost ~]# /usr/sbin/xm   list

Name                              ID Mem(MiB) VCPUs State Time(s)
Domain-0                           0      458     1 r-----   260.3
fc5                                2      256     1 ------     6.5

[root@localhost ~]# /usr/sbin/xm    vcpu-set 2 4

 


5.39 查看虚拟系统运行的状态;

 

[root@localhost ~]# xm   top

[root@localhost ~]# xentop
http://www.ahbank.org/