﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>IT博客-Terra's Blog</title><link>http://www.cnitblog.com/Terra/</link><description>May the Force be with you &amp; me!</description><language>zh-cn</language><lastBuildDate>Mon, 04 May 2026 19:24:38 GMT</lastBuildDate><pubDate>Mon, 04 May 2026 19:24:38 GMT</pubDate><ttl>60</ttl><item><title>什么是Xen</title><link>http://www.cnitblog.com/Terra/archive/2007/10/13/34815.html</link><dc:creator>Terra</dc:creator><author>Terra</author><pubDate>Sat, 13 Oct 2007 09:03:00 GMT</pubDate><guid>http://www.cnitblog.com/Terra/archive/2007/10/13/34815.html</guid><wfw:comment>http://www.cnitblog.com/Terra/comments/34815.html</wfw:comment><comments>http://www.cnitblog.com/Terra/archive/2007/10/13/34815.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cnitblog.com/Terra/comments/commentRss/34815.html</wfw:commentRss><trackback:ping>http://www.cnitblog.com/Terra/services/trackbacks/34815.html</trackback:ping><description><![CDATA[
		<p>2007年10月13日<br /></p>
		<p>什么是Xen<br />虚拟平台是指能支持运行Xen的真实安装的操作系统； </p>
		<p>　　虚拟操作系统：是指在虚拟平台上安装和虚拟运行的操作系统； </p>
		<p>　　比如我在Slackware 中安装了Xen，那Slackware就是虚拟平台，通过虚拟平台就可以虚拟其它操作系统了；比如通过Slackware来虚拟Debian、Fedora ... ... </p>
		<p>　　1、什么是Xen; </p>
		<p>　　Xen 是一个开放源代码的para-virtualizing虚拟机（VMM），或“管理程序 ”，是为x86架构的机器而设计的。Xen 可以在一套物理硬件上安全的执行多个虚拟机；Xen是基于内核的虚拟程序，它和操作平台结合的极为密切，所以它占用的资源最少。 </p>
		<p>　　什么是虚拟机呢？可能大家知道VMWARE吧，是的，Xen就是类似这样的程序，比如我们可以在Fedora 上虚拟安装和使用Slackware、Debian、Gentoo ... ... 等发行版。因为Xen是基于内核的，相对VMWARE 来说，它占用的系统资源也就是VMWARE的百分之几左右。Xen是不是更有优势呢？只有您实践了才知道。这也是我写本文的最主要原因； </p>
		<p>　　1.1 Xen的特性; </p>
		<p>　　虚拟机的性能更接近真实硬件环境） </p>
		<p>　　在真实物理环境的平台和虚拟平台间自由切换） </p>
		<p>　　在每个客户虚拟机支持到 32个虚拟CPU，通过 VCPU热插拔） </p>
		<p>　　支持PAE指令集的x86/32, x86/64平台 </p>
		<p>　　通过Intel 虚拟支持VT的支持来用虚拟原始操作系统（未经修改的）支持（包括Microsoft Windows） </p>
		<p>　　优秀的硬件支持.支持几乎所有的Linux设备驱动 </p>
		<p>　　1.2 Xen的应用范围; </p>
		<p>　　服务器整合：在虚拟机范围内，在一台物理主机上安装多个服务器, 用于演示及故障隔绝； </p>
		<p>　　无硬件依赖：允许应用程序和操作系统对新硬件的移值测试； </p>
		<p>　　多操作系统配置：以开发和测试为目的，同时运行多个操作系统； </p>
		<p>　　内核开发：在虚拟机的沙盒中，做内核的测试和调试，无需为了测试而单独架设一台独立的机器； </p>
		<p>　　集群运算：和单独的管理每个物理主机相比较,在VM级管理更加灵活,在负载均衡方面,更易于控制,和隔离; </p>
		<p>　　为客户操作系统提供硬件技术支持：可以开发新的操作系统, 以得益于现存操作系统的广泛硬件支持,比如Linux； </p>
		<p>　　1.3 Xen的操作系统支持和硬件支持; </p>
		<p>　　请参阅： 《Xen v3.0 用户手册》 </p>
		<p>　　2、Xen的一点理论基础; </p>
		<p>　　基于Xen的操作系统，有多个层，最底层和最高特权层是 Xen程序本身。Xen 可以管理多个客户操作系统，每个操作系统都能在一个安全的虚拟机中实现。在Xen的术语中，Domain由Xen控制，以高效的利用CPU的物理资源。每个客户操作系统可以管理它自身的应用。这种管理包括每个程序在规定时间内的响应到执行，是通过Xen调度到虚拟机中实现。 </p>
		<p>　　当Xen启动运行后，第一个虚拟的操作系统，就是Xen本身，我们通过xm list，会发现有一个Domain 0的虚拟机。Domain 0 是其它虚拟主机的管理者和控制者，Domain 0 可以构建其它的更多的Domain ，并管理虚拟设备。它还能执行管理任务，比如虚拟机的体眠、唤醒和迁移其它虚拟机。 </p>
		<p>　　一个被称为xend的服务器进程通过domain 0来管理系统，Xend 负责管理众多的虚拟主机，并且提供进入这些系统的控制台。命令经一个命令行的工具通过一个HTTP的接口被传送到xend。 </p>
		<p>3、Xen的安装； <br />　　在写本文时，Xen的当前最新版本是xen-3.0.1，它基于的内核版本是2.6.12.6的。您可以根据自己的操作系统的情况来选择一种安装方式，适合您的就是最好的； </p>
		<p>　　3.1 安装Xen的准备工作； </p>
		<p>　　拥有 GRUB引导的Linux做为安装平台，还要编译工具，比如gcc、binutils 及make和automake等；开发库有zlib和python-dev等； </p>
		<p>　　具体明细请参阅： 《Xen v3.0 用户手册》 </p>
		<p>　　由于Xen用Python 开发的，所以Python 当然也是必不可少的。如果您是新手，我建议您用自己所用的操作系统软件包管理工具来安装这些软件包。 </p>
		<p>　　3.2 在Redhat/Fedora 操作平台上的安装； </p>
		<p>　　在Fedora/Redhat平台上安装比较简单，您可以通过yum 来在线安装Xen和支持Xen的内核；因为Fedora/Redhat已经提供对Xen的支持了；Fedora/Redhat 提供的Xen内核支持比较高；不过就目前我的测试来看好象经常会机器重启，存在的问题可能是桌面环境造成的，比如GNOME桌面，打开就有重启的现象，也可能是Fedora/Redhat提供的Xen内有BUG； </p>
		<p>　　安装Xen及支持Xen的请参考：《Fedora Core 5.0 用 Xen 虚拟Slackware 10.2》 </p>
		<p>　　对于Fedora 4.0及Redhat和Fedora 5.0类似；现在Yum的源上都有Xen和支持Xen的内核包； </p>
		<p>　　3.3 通过Xen的二进制包来安装（几乎适用所有的Linux发行版）； </p>
		<p>　　通过Xen的二进制软件包来安装，这应该是通用的，几乎适合所有的Linux操作系统。由于二进制所是已经编译好的，我已经在Slackware 平台上用这种方法来安装，还是成功的。另外etony兄也在Debian上安装成功; </p>
		<p>　　您应该到 <a href="http://www.xensource.com/downloads">http://www.xensource.com/downloads</a> 去下载二进制包，文件名中带有xen-3.0.1-install字样的，比如 xen-3.0.1-install-x86_32.tgz，这个软件包表示适用x86_32位机器的。也就是我们用的普通32位PC机。如果您用的是64位机器，应该下载文件名带有x86_64字样的软件包； </p>
		<p>　　下载好后，就解压安装，我们还是以支持x86_32构架机器的xen-3.0.1-install-x86_32.tgz为例： </p>
		<p>　　[root@localhost ~]# tar zxvf xen-3.0.1-install-x86_32.tgz </p>
		<p>　　[root@localhost ~]# cd xen-3.0.1-install </p>
		<p>　　[root@localhost xen-3.0.1-install]# sh install.sh </p>
		<p>　　判断是不是安装好了，请查看/boot目录，会发现有很多文件名带有xen字样的文件，另外在/lib/moudules中也会发现有支持xen的内核模块；另外再看一看是否有/etc/xen这个目录。我想应该是有的。 </p>
		<p>　　3.4 通过Xen的源码包编译安装（仅供参考）； </p>
		<p>　　通过Xen的二进制包来安装，可能有时内核不太适应我们的需要，这时我们要通过Xen的源码包来安装。通过自己编译来安装Xen及支持Xen的内核；Xen的源码包，您可以到 <a href="http://www.xensource.com/downloads">http://www.xensource.com/downloads</a>去下载。文件名带有 xen-3.0.1-src字样的，比如 xen-3.0.1-src.tgz。 </p>
		<p>　　3.41 编译原理; </p>
		<p>　　通过Xen的源码包编译，其实也没有什么神秘的。在Xen的源码包中提供了一些内核补丁和内核配置文件等。当我们执行编译命令时，首先编译的是Xen程序本身，然后是编译内核 。在编译内核时，程序会自动判断是否有内核源码 ，xen-3.0.1支持的内核是2.6.12.6，如果在xen的解压目录下没有，他就会自动内核的官方站 <a href="http://www.kernel.org/">http://www.kernel.org/</a> 下载 linux-2.6.12.tar.bz2。然后就是自动解压并为此内核打补丁。然后系统会根据指令要求，然后采用相应的内核配置文件，或配置内核进行编译。 </p>
		<p>　　3.42 编译过程简说； </p>
		<p>　　第一步：解压软件包，查看Xen源码包所带的文件； </p>
		<p>　　[root@localhost ~]# tar zxvf xen-3.0.1-src.tgz </p>
		<p>　　[root@localhost ~]# cd xen-3.0.1 </p>
		<p>　　[root@localhost xen-3.0.1]# ls </p>
		<p>　　COPYING Config.mk README docs install.sh patches xen </p>
		<p>　　ChangeLog Makefile buildconfigs extras linux-2.6-xen-sparse tools </p>
		<p>　　我们解压xen-3.0.1-src.tgz 后，进入解压目录，会看到以上的文件或文件夹。patches是内核的补丁包，linux-2.6-xen-sparse是支持Xen的内核目录树，值得注意的是内核的配置文件就在这个目录中； </p>
		<p>　　[root@localhost xen-3.0.1]# ls linux-2.6-xen-sparse/arch/xen/configs/ </p>
		<p>　　xen0_defconfig_ia64 xen0_defconfig_x86_64 xenU_defconfig_x86_32 xen_defconfig_x86_32 </p>
		<p>　　xen0_defconfig_x86_32 xenU_defconfig_ia64 xenU_defconfig_x86_64 xen_defconfig_x86_64 </p>
		<p>　　看到上面所列出的内核配置文件了吧，我们可能会发现文件名带有xen0字样的和xenU字样的两类文件。在这两类内核中，我们大多会修改的内核配置文件是运行xen的操作系统的内核配置文件，另一个是用于虚拟操作系统的内核配置文件； </p>
		<p>　　xen0字样的就是我们一般是用于我们运行xen的操作系统的内核 ，而xenU字样的就是为虚拟操作系统所提供的内核。另外还有x86_32和x86_64之分，这表示CPU的架构。 </p>
		<p>　　比如我们用的是x86架构32位的CPU，我们在编译内核的时候就要用到 xen0_defconfig_x86_32 和xenU_defconfig_x86_32 配置文件。 </p>
		<p>　　举个例子：比如我的机器架构是x86_32位的，我安装xen的操作系统是Slackware，我想在Slackware 虚拟Debian 、Gentoo、Fedora等操作系统。这时编译虚拟平台Slackware所用的内核的配置文件就是 xen0_defconfig_x86_32 ，而被虚拟平台（Debian 、Gentoo、Fedora等操作系统）所用的内核就是 xenU_defconfig_x86_32 。 </p>
		<p>　　弄明白内核配置文件有何用？我们能明白xen在编译过程中用了哪些内核配置文件，目的是我们在编译过程中可以根据自己的需要来修改它，以编译出适合我们需要的内核。 </p>
		<p>　　比如我们想让Slackware 支持xen，并且还要支持NTFS文件系统；所以我们就要修改 xen0_defconfig_x86_32这个文件。找出如下一行; </p>
		<p>　　# CONFIG_NTFS_FS is not set </p>
		<p>　　改为 </p>
		<p>　　CONFIG_NTFS_FS=m </p>
		<p>　　如果您想让被虚拟的操作系统（Debian 、Gentoo、Fedora等）也支持NTFS文件系统，所以要在 xenU_defconfig_x86_32找出如下一行; </p>
		<p>　　# CONFIG_NTFS_FS is not set </p>
		<p>　　改为 </p>
		<p>　　CONFIG_NTFS_FS=m </p>
		<p>　　第二步：配置内核； </p>
		<p>　　这一步有两种方法，一个是直接修改内核配置文件，另一个是内核配置界面来配置； </p>
		<p>　　方法一：通过修改内核配置文件； </p>
		<p>　　Xen所带的内核配置文件位于解压目录中的linux-2.6-xen-sparse/arch/xen/configs 。我们前面已经提到了相关配置文件的用途。请仔细看前一步的说明； </p>
		<p>　　方法二：通过内核配置界面来配置； </p>
		<p>　　[root@localhost xen-3.0.1]# make linux-2.6-xen0-config CONFIGMODE=menuconfig </p>
		<p>　　第三步：编译和安装Xen； </p>
		<p>　　[root@localhost xen-3.0.1]# make </p>
		<p>　　[root@localhost xen-3.0.1]# make install </p>
		<p>　　3.43 创建initrd文件； </p>
		<p>　　有的系统需要initrd-XXXX.img或initrd.gz文件才能引导起来，如果您的系统用了支持xen的支持引导不起来，就要创建一个initrd-XXXX.img或initrd.gz的文件；请参考： 《Xen v3.0 用户手册》 </p>
		<p>　　3.44 关于xen0和xenU内核说明； </p>
		<p>　　一般的情况下会在/boot目录中有两个与xen相关的内核，有的文件名带有vmlinuz-XXXX-xen0字样的，有的带有vmlinuz-XXXX-xenU字样的；比如： </p>
		<p>　　[root@localhost xen-3.0.1]# ls -la /boot/vmlinuz*xen* </p>
		<p>　　lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6-xen0 -&gt; vmlinuz-2.6.12.6-xen0 </p>
		<p>　　lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6-xenU -&gt; vmlinuz-2.6.12.6-xenU </p>
		<p>　　lrwxrwxrwx 1 root root 21 2006-04-12 07:42 /boot/vmlinuz-2.6.12-xen0 -&gt; vmlinuz-2.6.12.6-xen0 </p>
		<p>　　lrwxrwxrwx 1 root root 21 2006-04-12 07:49 /boot/vmlinuz-2.6.12-xenU -&gt; vmlinuz-2.6.12.6-xenU </p>
		<p>　　-rw-r--r-- 1 root root 2180524 2006-04-12 07:42 /boot/vmlinuz-2.6.12.6-xen0 </p>
		<p>　　-rw-r--r-- 1 root root 1129950 2006-04-12 07:49 /boot/vmlinuz-2.6.12.6-xenU </p>
		<p>　　其实就是两个与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字样这个内核，是用来引导虚拟操作系统用的，我们在以后会提到它。</p>
		<p>　　4、引导XenLinux的GRUB配置; <br />　　一旦我们在Linux操作系统安装好Xen后，这样的系统应该被称为XenLinux。如何才能引导拥有Xen的Linux呢？这时我们要用到GRUB系统引导管理器。我们修改一下GRUB的配置文件menu.lst或grub.conf就行了。此文件位于/boot/grub目录中； </p>
		<p>　　4.1 判断系统所在的分区； </p>
		<p>　　[root@localhost ~]# df -h </p>
		<p>　　Filesystem 容量 已用 可用 已用% 挂载点 </p>
		<p>　　/dev/hda6 12G 6.9G 4.9G 59% / </p>
		<p>　　4.2 查看/boot目录中xen相关的配置文件； </p>
		<p>　　[root@localhost ~]# ls /boot </p>
		<p>　　注意：我们前面已经说过了，xen提供了两个内核，一个是虚拟平台用的，也就是文件名带有xen0字样的；另一个带有xenU字样的，这是用于引导和支持虚拟操作系统用的。 </p>
		<p>　　什么虚拟平台，比如我们想用Slackware 的Xen虚拟Fedora、Gentoo .... 。那么Slackware就是虚拟平台，而Fedora、Gentoo... .. 是被虚拟的操作系统。Slackware是一个真实安装在您的机器上的操作系统，它提供的是一个运行xen的环境。为了让Slackware能支持xen ，所以必须用于支持Xen的内核，也就是在/boot中有xen0字样的文件。 </p>
		<p>　　如果您安装了Xen，会在/boot中有两个文件vmlinuz-2.6.12.6-xen0和vmlinuz-2.6.12.6-xenU， </p>
		<p>　　4.3 禁掉 TLS Libraries ； </p>
		<p>　　[root@localhost ~]#mv /lib/tls /lib/tls.disabled </p>
		<p>　　禁掉的理由，请查看： 《Xen v3.0 用户手册》 </p>
		<p>　　4.4 引导XenLinux的GRUB内容； </p>
		<p>　　title SlackXen </p>
		<p>　　kernel /boot/xen-3.0.gz </p>
		<p>　　module /boot/vmlinuz-2.6-xen0 root=/dev/hda6 ro console=tty0 </p>
		<p>　　如果有inintrd-2.xxxx-xen.img或initrd.gz之类的文件才能引导起来系统，还要加一行；要以/boot中的initrd相关的文件为准; </p>
		<p>　　modules /boot/initrd.gz </p>
		<p>　　有关GRUB的文档：《系统引导管理器GRUB，为初学者指南》 </p>
		<p>　　注意：与传统GRUB的定义有点不同，就是kernel 是用来定义Xen的，而Linux的内核及initrd映像是通过module 指令定义的；要仔细看好； </p>
		<p>　　5、Xen的配置和管理工具； </p>
		<p>　　5.1 Xen的相关文件存放位置； </p>
		<p>　　xen安装后，文件放在什么地方了呢？主要放在以下几个目录； </p>
		<p>　　5.11 内核及xen自身存放于 /boot </p>
		<p>　　安装有xen的操作系统下的/boot目录中，存放xen本身及支持xen的内核文件。比如文件名带有xen0和xenU相关的文件； </p>
		<p>　　5.12 内核模块存放于 /lib/modules </p>
		<p>　　内核模块包括虚拟平台支持xen的内核xen0的模块，及支持虚拟操作系统所用的xenU的模块，一般的情况下是在 /lib/modules下有两个xen相关的目录存放。一个是文件夹名带有xen0字样的，另一个是xenU字样的； </p>
		<p>　　5.13 xen的配置文件及守护程序的存放位置； </p>
		<p>　　一般的情况下，Xen的配置文件存放于/etc/xen目录。 比如 xend-config.sxp是用于配置网络的，不过我们不必更改，用其默认的就能完成我们的需要。xmexample1 xmexample2是两个示例性的配置文件。我们在配置引导被虚拟的操作系统时，这两个文件可供参考； </p>
		<p>　　Xen的服务器xend和xendomains启动脚本，一般是位于/etc/init.d/目录中，也就是/etc/init.d/xend ；/etc/init.d/xend负责启动xend服务器，而/etc/init.d/xendomains负责第一个虚拟的系统及其它的Domains，也就是Domain 0 。 </p>
		<p>　　5.14 可执行命令存放于/usr/sbin </p>
		<p>　　[root@localhost ~]#ls /usr/sbin/xen* </p>
		<p>　　/usr/sbin/xen-bugtool /usr/sbin/xenconsoled /usr/sbin/xenmon.py /usr/sbin/xenstored </p>
		<p>　　/usr/sbin/xenbaked /usr/sbin/xend /usr/sbin/xenperf /usr/sbin/xentop </p>
		<p>　　[root@localhost ~]#ls /usr/sbin/xm </p>
		<p>　　5.2 Xen服务器的启动； </p>
		<p>　　xend服务器的启动/停止/重启/状态查询，请用下面的命令； </p>
		<p>　　[root@localhost ~]# /etc/init.d/xend start 启动xend，如果 xend没有运行） </p>
		<p>　　[root@localhost ~]# /etc/init.d/xend stop 停止xend，如果xend正在运行） </p>
		<p>　　[root@localhost ~]# /etc/init.d/xend restart 重启正在运行的 xend，如果xend没有运行，则启动 </p>
		<p>　　[root@localhost ~]# /etc/init.d/xend status 查看xend状态 </p>
		<p>　　启动xendomains 服务器的启动/停止/重启/状态查询，请用下面的命令；一般的情况下，xend服务器启动了，xendomains也会自动启动。所以这个只是掌握一下就行了； </p>
		<p>　　[root@localhost ~]# /etc/init.d/xend start 启动xend，如果 xend没有运行） </p>
		<p>　　[root@localhost ~]# /etc/init.d/xend stop 停止xend，如果xend正在运行） </p>
		<p>　　[root@localhost ~]# /etc/init.d/xend restart 重启正在运行的 xend，如果xend没有运行，则启动 </p>
		<p>　　[root@localhost ~]# /etc/init.d/xend status 查看xend状态 </p>
		<p>　　[root@localhost ~]# /etc/init.d/xendomains start </p>
		<p>　　[root@localhost ~]# /etc/init.d/xendomains stop </p>
		<p>　　[root@localhost ~]# /etc/init.d/xendomains restart </p>
		<p>　　[root@localhost ~]# /etc/init.d/xendomains status </p>
		<p>　　5.3 Xen 管理工具xm； </p>
		<p>　　我们前面提到Xen的可执行命令中，我们可能看到了一些以xen开头的命令，您不妨尝试一个一个的尝试一下他们是做什么用的；比如xend是服务器的开启运行命令 ... .... </p>
		<p>　　其中xm命令，就是管理Xen的最基本的工具；您可以通过xm --help 来获得帮助； </p>
		<p>
				<br /> </p>
<img src ="http://www.cnitblog.com/Terra/aggbug/34815.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cnitblog.com/Terra/" target="_blank">Terra</a> 2007-10-13 17:03 <a href="http://www.cnitblog.com/Terra/archive/2007/10/13/34815.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>