28.1 Xen简介
我们都知道,一个计算机中最重要也最昂贵的设备应该就是中央处理器(Central Processing Unit,CPU)了。现在计算机的中央处理器越来越快,除了增加频率外,中央处理器的架构也从单内核跃进到多内核。然而,中央处理器在大部分的时间都是闲置的。以"效能/成本"的比率来说,中央处理器可以说是不符合投资报酬率的设备。
为了提高中央处理器的使用率,后来人类发展了虚拟化技术,让中央处理器可以同时执行多个操作系统。如此一来,我们就可以把一台计算机当做很多台使用。通过虚拟化的技术,可以提高中央处理器的使用量。相对的,也提高了中央处理器的投资报酬率。
最早实现虚拟化技术的,应属IBM的Mainframe平台。它通过实体的切割,使一台计算机可以同时执行多个操作系统,如同许多台计算机一般。但Mainframe成本高,并不是每个用户都有能力购买的;后来虚拟化技术转往软件面来实现,这样就使一台低廉的个人计算机也可以享受虚拟化的好处了。在软件的虚拟化技术中,最著名的应属VMware, Inc.开发的系列产品。
在Linux领域中,也有许多软件虚拟化的产品 ,其中最广受好评的就是由XenSource 公司 (http://www.xensource.com/)发展的Xen。Red Hat也从Red Hat Enterprise Linux 5 开始正式收录Xen,使其成为Red Hat Enterprise Linux 自带的一个子系统。
在虚拟化子系统中,每一个虚拟产生的计算机都称为"虚拟机 (Virtual Machine)";而用来存储所有虚拟机的计算机则称为"宿主机 (Host Machine)"。
28.1.1 虚拟化类型
一般来说,软件的虚拟化技术又可分为两种。
全虚拟化(Full Virtualization)
中央处理器与其他的硬设备都虚拟化。
全虚拟化的好处是,由于全部都由虚拟化系统产生,所以操作系统只要有支持虚拟化系统提供的硬设备 ,就可以不修改操作系统而直接在虚拟机上安装该操作系统。但也因为所有的硬设备都由虚拟产生,所以当虚拟机上的操作系统要读取某一个硬设备时,还需通过虚拟化系统才能读取真实的硬设备,因而效能往往比较差。实现全虚拟化最著名的就是VMware, Inc. 产品。
半虚拟化 (Paravirtualization)
虚拟化系统仅提供中央处理器的虚拟化能力。
其他的硬设备则与真实机器共享同一个硬设备,因此使用硬设备的效率较佳。但缺点是操作系统必须修改其内核才能安装在半虚拟化系统中的虚拟机器中。UML就是一个实现半虚拟化的典型代表。
28.1.2 Xen 的功能
Xen 的主要功能是让你可以在一台计算机上同时执行多个操作系统。而Xen可以用于哪些用途则没有标准的答案,完全视你如何运用虚拟机的特性而定,例举如下用途。
测试新系统:你可以建置一个新的虚拟机,在该机器上安装新版的操作系统或软件,借以测试新系统是否可以正常运行。如果可以,才正式升级真正系统;如果失败,那就乖乖继续使用旧的版本吧!
提高安全性:你也可以把不同的服务建置在不同的虚拟机上,每一个虚拟机仅提供该项服务。这样一来,就算攻击者成功入侵,也会被局限在虚拟机上,而无法读取宿主机上的重要数据。
实际可用性:由于Xen提供了迁移(Migration)的功能,你可以把某一个虚拟机通过网络转移到另外一台宿主机上执行,而客户端,完全不知道服务已经被移转到另外一台计算机了。万一宿主机出现故障,你便可以利用迁移的功能将服务转移到另外一台计算机执行,再把濒临故障的计算机关机维修,借以提高服务的可用性了。
28.1.3 Xen 支持的虚拟化类型
这里有一个好消息和一个坏消息要跟你分享。
在"28.1.1 虚拟化类型"中提到,虚拟化技术可分为全虚拟化与半虚拟化两种。好消息是,Xen对这两种虚拟化技术都有支持!但坏消息是,并不是所有的中央处理器都可以执行全虚拟化!
如果想让Xen提供全虚拟化,那么你的中央处理器必须符合下列条件。
Intel 中央处理器提供vmx标签。
AMD中央处理器提供svm标签。
你可以利用直接查看/proc/cpuinfo 的flags参数来判断中央处理器是否拥有上述标签。以下是我在Intel Core 2 Duo机器上查询flags参数的结果。
[root@linux ~]# grep vmx /proc/cpuinfo |
上述的结果显示,我的计算机中央处理器支持vmx 标签。因此,我计算机的Xen子系统可以支持全虚拟化的功能。
为什么上面的执行结果会显示两个flags?
/proc/cpuinfo文件会记录该机器中每一个中央处理器的信息,如果计算机 有多个中央处理器,这个文件就会存储多笔数据。
因为该机器使用 Intel Core 2 Duo 的处理器,所以虽然实体上只有一个处理器,但却具备双内核功能。Red Hat Enterprise Linux 系统便将其视为两个处理器看待。因而/proc/cpuinfo中就会记录两个处理器的信息,当然,也就会有两个flags参数。
28.1.4 Xen的虚拟机
Xen 允许建立多个虚拟机,每一个虚拟机都会在自己的区域(Domain)中执行。Xen提供了两种区域。
Domain-0
这是宿主机之区域。实体的计算机及实体计算机执行的Red Hat Enterprise Linux都在这个区域中执行。你无法修改Domain-0区域的设置与配置。
Domain-U
每一个虚拟机执行的区域称为 Domain-U。每当建立一个新的虚拟机时,Xen 就会产生一个 Domain-U 的区域,以供该虚拟机使用。你可以在新建虚拟机器时定义该区域的设置,也可在虚拟机启动后修改该区域的配置。
28.1.5 Xen的组件
Red Hat Enterprise Linux 5 提供的 Xen 包含了下列几项 RPM 软件包。
xen:这是Xen的主程序,以及执行Xen必备的组件。
kernel-xen:这是针对Xen改写的Linux内核软件包。
libvirt:提供虚拟化所需的链接库及管理工具。
python-virtinst:文字接口建立并安装虚拟机的工具。
virt-manager:一个图形化的Xen综合管理工具。
上述的软件包分布于虚拟化软件包群组中。如果使用yum安装,则虚拟化软件包群组名称为Virtualization。
28.2 创建 Domain-0
要享受Xen带来的好处,得先创建Domain-0的环境。创建Domain-0的步骤,大致上分为3个。
(1)安装虚拟化子系统。
(2)启动 kernel-xen 内核。
(3)启动 xend 服务。
以下是这几个步骤的详细说明。
28.2.1 安装虚拟化子系统
首先,你得安装虚拟化子系统,包含Xen及其所必须的组件。在Red Hat Enterprise Linux 5 中安装Xen子系统有两种方法。
通过"新增卸载软件(system-config-packages)"
你可以在GNOME桌面中依次选择【应用程序】→【添加/删除软件】命令,利用【添加/删除软件】这个工具程序来安装虚拟化子系统。此时,请选择【浏览】页面中左方的【虚拟化】复选框,然后单击【调用】按钮,即可安装完整的Xen子系统。
通过yum
使用yum安装Virtualization这个软件包群组。Virtualization软件包群组中包含所有Xen的组件,因此,你只需利用yum groupinstall便可安装Xen的所有组件。
如果你不是Red Hat Enterprise Linux 的合法用户,或者你安装Red Hat Enterprise Linux 时未输入安装号码(Installation Number),那么你是无法安装虚拟化子系统的。
以下是我使用yum安装Xen虚拟化子系统的示范。
[root@linux ~]# yum -d 0 -y groupinstall 'Virtualization' |
28.2.2 启动 kernel-xen 内核
第二个步骤,你必须启动专为Xen打造的Linux内核。
Red Hat Enterprise Linux 5提供了一个名为kernel-xen 的软件包,这个软件包存储了执行 Xen所需的Linux内核。因此,你必须检查是否有这个软件包,如果没有,请手动安装kernel-xen软件包。
此外,你还必须以kernel-xen软件包提供的内核来启动计算机。通常安装kernel-xen软件包后,Red Hat Enterprise Linux并不会将kernel-xen软件包设置为开机时默认的内核,因此,请在重新启动时手动选择kernel-xen的内核!
以下是我检查目前启动中内核版本的方法。
①
由rpm的执行结果可知,我的Red Hat Enterprise Linux 系统已安装了kernel- xen软件包。
② uname -r 查询的结果指出,目前执行中的内核版本为2.6.18-8.el5.xen。版本数字的最后一段明显说明了这是Xen版本的内核。
28.2.3 启动 xend 服务
建置Domain-0的最后一个步骤,就是确保xend服务正常地执行。
xend 服务是Xen中用来管理所有虚拟机的一个服务,如果xend没有启动,你就无法使用本章提到的方法来管理所有的虚拟机。因此,为确保虚拟机能正常使用,你必须检查一下xend 的状态。如果xend尚未启动,请记得将其启动起来。
以下是我启动xend服务的示范。
[root@linux ~]# rpm -q kernel-xen |
①
目前我的 xend 服务为停止状态。
②
此时执行任何Xen管理工具都会失败。
③
手动启动xend服务。
④
检查一下xend服务是否成功启动了。
⑤
为保证以后开机都能自动启动xend 服务,别忘记使用chkconfig启动xend。
28.3 新建 Domain-U
要享受Xen带来的好处,除了配置Domain-0所需的环境外,你还必须建立至少一个Domain-U虚拟机。
本节将引导你在Red Hat Enterprise Linux 5 环境中成功地建立 Domain-U。
28.3.1 前期准备
在着手建立一个新的Domain-U虚拟机前,你必须准备好下列各项所需的项目。
操作系统的安装来源
你必须先准备好要安装的操作系统的安装光盘或文件,才能在Xen的虚拟机上安装该操作系统。如果要安装Red Hat Enterprise Linux,Xen 仅允许通过安装服务器(Installation Server)来进行安装;此外,最好也准备好Red Hat Enterprise Linux的 Kickstart 配置文件。
Kickstart 是提供 Red Hat Enterprise Linux 自动安装的子系统。除了可以协助你自动安装系统外, 还允许你在安装前或安装后自动地设置 Red Hat Enterprise Linux 环境。
如果你对安装服务器与Kickstart有兴趣,请参阅本书第26章。
虚拟机使用的磁盘空间
Xen允许你把操作系统安装在下列几种存储设备上。
磁盘分区(Partition)。
逻辑卷管理员(Logic Volumne Manager,LVM)的逻辑卷(Logic Volumne,LV)。
图像文件(Image File)。
若要把虚拟机的操作系统安装在磁盘分区上,你得先建立一个空的磁盘分区,才能建立新的虚拟机。与分区一样,安装在逻辑卷上也必须先准备好该逻辑卷。但若安装在图像文件中,则可建立新的虚拟机时指定该图像文件的位置,Xen管理工具就会帮你建立好图像文件。
此外,如果你希望通过网络将Xen 虚拟机迁移(Migration) 至另外一台Xen,则该虚拟机的磁盘空间最好存储于网络独立的存储(Storage)空间中。
28.3.2 通过虚拟系统管理(1)
如果要建立一个新的Domain-U,最简单的方式就是使用"虚拟系统管理 (virt-manager)" 。你可以利用下列任何一个方法,通过虚拟系统管理的建立新的虚拟系统向导来建立一个新的虚拟机。
选择【文件】→【新机器】命令,便可启动建立新的虚拟系统向导。
单击主画面中下方的【新增】按钮,也可以启动建立新的虚拟系统向导。
启动建立新的虚拟系统向导后,首先你会看到如图28-1所示的画面。在这个步骤中会提示你稍后需要准备的信息,确定这些信息都准备妥当后,请单击【前进】按钮,进入下一个步骤,正式新建虚拟机。
紧接着,你必须要为新的虚拟机取一个名称,如图28-2所示该名称必须符合下列条件。
不能为空的:虚拟系统的名称不能省略,因此你一定要为该虚拟机命名。
必须是独一无二的:因Xen的管理工具将会利用虚拟机的名称作为识别数据,因此不能与其他已经存在的虚拟机的名称重复。
不能包含空格符,且总长度必须小于50个字符。
输入完毕后,单击【前进】按钮,进入下一个步骤。
[root@linux ~]# service xend status |
|
(点击查看大图)图28-1 建立新的虚拟系统向导--欢迎画面 |
接着请指定该虚拟机使用的虚拟方法,如图28-3所示。
半虚拟化:这就是半虚拟化。
完全虚拟:这是全虚拟化的别名。
这个步骤会因为机器设备不同而有不同的影响:如果计算机的中央处理器仅支持半虚拟化,则这个步骤就不会让你选择全虚拟化选项;如果中央处理器支持全虚拟化,则此时你可以选择该虚拟机要以何种方式执行。
完成后请单击【前进】按钮。接着请在如图28-4 所示的画面中,完成下列设置。
安装介质URL:指定要安装的操作系统安装源(Installation Source)的URL。
Kickstart URL:指定自动安装的配置文件的URL。
完成后,单击【前进】按钮,进入下一个步骤。
|
(点击查看大图)图28-2 建立新的虚拟系统向导--命名 |
|
(点击查看大图)图28-3 建立新的虚拟系统向导--虚拟化方法 |
28.3.2 通过虚拟系统管理(2)
接下来,请设置该虚拟机的存储空间。如图28-5所示在此步骤中,你可以选择如下选项。
普通磁盘分区:若你打算以分区 (Partition)、多重磁盘设备 (Multiple Disk, MD) 或 LVM 的逻辑卷 (Logic Volumn,LV)作为虚拟机的磁盘空间,则请选择这个选项,并请于分区字段中输入该磁盘设备的设备文件名。
简单文件:这个选项是以图像文件作为虚拟机的磁盘空间的。
文件位置:请输入图像文件的路径名称。
文件大小:你可以在此输入图像文件的大小。
Allocate entire virtual disk now?:如果你希望立即配置图像文件,则请勾选这个复选框。
完成上述项目后,单击【前进】按钮,进入下一个步骤。
紧接着你必须为新建的虚拟机设置CPU与内存大小如图28-6所示。
VM Max Memory:该虚拟机执行后使用的内存的最大值。
VM Startup Memory:该虚拟机启动后使用的内存大小,该设置必须小于或等于VM Max Memory的大小。
CUP:这个字段用来设置虚拟机使用的CPU数量,必须小于或等于逻辑主处理器的数量。
这些配置项目都可以在虚拟机执行后修改。所以新建虚拟机时,无须担心这些设置值是否正确无误。完成后,单击【前进】按钮,进入最后一个步骤。
|
(点击查看大图)28-4 建立新的虚拟系统向导--安装媒体 |
最后,建立新的虚拟系统向导会显示先前输入的设置,如图28-7所示。请确认上述的设置是否都正确无误。如有错误,请单击【后退】按钮前往修正,如完全正确,请单击【结束】按钮,结束建立新的虚拟系统向导。
建立新的虚拟系统结束后,Xen 便会开始启动安装媒体,如图28-8所示,并在该虚拟机上安装你选择的操作系统。
|
(点击查看大图)图28-5 建立新的虚拟系统向导--设置存储空间 |
|
(点击查看大图)图28-6 建立新的虚拟系统向导--硬件配置 |
这可能需要一些时间,请耐心等候。安装完毕后,请单击安装程序的【重新启动】按钮,以结束安装程序。完成后,你的虚拟机也成功地建立完成了。
28.3.3 通过 virt-install 工具
虚拟系统管理 是一个X Window System 执行的图形化Xen 管理工具,可是若Red Hat Enterprise Linux 不提供X Window System,那么该如何建立一个新的Domain-U呢?
此时,你可以改用 virt-install工具。virt-install 是一个在文本模式中执行的命令,其语法如下:
其中的OPTIONS 为 virt-install的参数,常用的参数如表28-1所示。
表28-1 virt-install 常用参数一览表
|
(点击查看大图)图28-7 建立新的虚拟系统向导--确认步骤 |
|
(点击查看大图)图28-8 建立新的虚拟系统向导--开始安装 |
virt-install [OPTIONS...] |
参数 | 说明 |
-n NAME | 指定虚拟机的名称 |
-r MEMORY | 指定虚拟机的内存用量 |
-u UUID | 指定虚拟机的唯一通用标识符 (Universally Unique Identifier,UUID)。 省略这个参数时,virt-install 将会自动产生 |
--vcpus=VCPUS | 指定虚拟机的虚拟 CPU (Virtual CPU, VCPU) |
-f DISKFILE | 指定虚拟磁盘的文件路径名称 |
-s DISKSIZE | 用来指定虚拟磁盘的大小,这个参数需配合 -f 使用。DISKSIZE为虚拟磁盘的大小,单位是GB |
-m MAC | 指定虚拟机的网络卡之硬件地址。这 个参数可以省略,省略时virt-install 将自动产生 |
-p | 以半虚拟化的方式建立虚拟机 |
-l LOCATION | 指定安装来源 |
如果你没有指定足够的参数,则virt-install将会以交谈(也就是一问一答)的方式搜集所需的信息。以下是我以交谈的方式建立一个新的虚拟机的示范。
28.4 虚拟系统管理
虚拟系统管理是一个图形化的Xen管理工具。你可以利用虚拟系统管理进行下列工作。
建立一个新的 Domain-U。
监控 Domain-0 与 Domain-U。
查看 Domain 的详细资料。
开启 Domain-U 的控制台。
修改 Domain-U 的设置。
控制 Domain-U。
本节将介绍如何使用虚拟系统管理这个管理工具来进行上述的工作。
28.4.1 启动虚拟系统管理
首先来研究如何启动虚拟系统管理吧!你可以通过下列两种方法来启动虚拟系统管理。
通过菜单:在GNOME 桌面环境上,请依次选择【应用程序】→【系统工具】 →【虚拟系统管理】命令,以启动虚拟系统管理。
通过命令:在图形化的终端机仿真程序中执行 virt-manager 命令也可以启动虚拟系统管理。
由于虚拟系统管理可以用来管理本机的Xen,也允许管理其他计算机的 Xen 系统。因此,启动虚拟系统管理时,会要求你选择要连接至哪一台运行Xen系统,如图28-9所示。
在这个画面中,你可以选择如下选项。
Xen 主系统位置:这个选项代表连接至本机的 Xen 子系统。
远程 Xen 主机:通过网络读取其他执行Xen且相同中央处理器架构的计算机。
其他 hypervisor:不同中央处理器架构的Xen系统。
选择完毕后,请单击【连接】按钮。此时会看到虚拟系统管理的主画面,如图28-10所示。表示已经完成虚拟系统管理的启动工作了。
28.4.2 监控Domain
在图 28-10所示的虚拟系统管理 主画面中,中间区域会显示所有已启动的虚拟机器。其中每一行会显示下列的字段。
ID:虚拟机的标识符。
名称:虚拟机的名称。
状态:目前虚拟机的状态。
CPU 占用:该虚拟机使用了多少 CPU。
内存占用:该虚拟机使用了多少内存。
虚拟系统管理也允许你修改要监控的字段内容。如果要修改显示字段,你可以利用【查看】文本框来进行修改。
8.4.3 查看Domain
除了可以监控所有的虚拟机外,你也可以查看该虚拟机的详细信息。通过下列任何一种方法都可查看某一个虚拟机的详细信息。
在菜单栏中依次选择【编辑】→【系统细节】命令。
选择要查看的虚拟机,然后用单击鼠标右键,选择 【Details】 选项。
单击最下方的【细节】按钮。
开启虚拟机的详细信息时,会显示如图 28-11所示的画面。
在虚拟机的详细信息画面中,会提供下列两个选项卡。
概况:这里会显示该虚拟机的识别信息、状态,以及效能。
硬件:用来显示该虚拟机的硬设备。
查看完毕后,关闭虚拟机的详细信息窗口即可。
28.4.4 开启 Domain-U 控制台
如果你已经建立好一些虚拟机,那么在启动这些虚拟机后,你也可以开启该虚拟机的控制台,以使用这个虚拟机。要开启虚拟机的控制台,你只需在虚拟系统管理中执行以下几个步骤。
(1)在如图28-10所示的画面中双击该虚拟机。
(2)用鼠标右键单击该虚拟机,在弹出的快捷菜单中选择【打开】命令。
(3)选择要开启的虚拟机后,单击最下方的【打开】按钮。
开启虚拟机的控制台后,你会看到如图28-12所示的虚拟机的控制台画面。
[root@linux ~]# virt-install |
|
(点击查看大图)图28-9 【虚拟系统管理】对话框 |
你看,这样是不是就像打开计算机的屏幕一样,可以看到该操作系统执行的画面?这是否与其他虚拟化产品 一样?
不过,与其他虚拟化产品不同的是,Xen关闭虚拟机的控制台窗口后,并不会结束该虚拟机,而会在背景中默默地继续执行着。所以,你可以在平时关闭虚拟机器的控制台,当需要操作的时候再打开即可。
28.4.5 修改Domain-U设置
你也可以在虚拟机执行期间修改其硬件的配置。通过调整硬件资源的分配,可以动态地调整虚拟机的性能。如果要修改虚拟机的硬件配置,请打开如图 28-11所示的画面,再切换至【硬件】选项卡,如图 28-13 所示,你就可以修改各种硬件的设置了。
在如图28-3所示的画面中,你可以修改以下的选项。
Processor:用来修改虚拟机的CPU配置。
Memory:用来修改虚拟机的内存数量。
Disk xvda:用来修改虚拟机的磁盘设备。
Xen 并不允许你修改 Domain-0 虚拟机的硬设备,部分的硬设备也无法在Domain-U 虚拟机执行后修改。
如果有需要修改各种硬件的设置,请记得单击【应用】按钮,以便立即启用新的设置。
28.4.6 控制Domain-U
Xen 允许你对每一个 Domain-U 的虚拟机进行下列的操作。
执行:启动该虚拟机,如同按下计算机的电源一样。
暂停:暂停虚拟机的执行,暂停后可以随时取消暂停,恢复执行的状态。
关机:关闭该虚拟机,跟按下电源开关一样。
存储:存储目前虚拟机的状态,可供日后随时回复该状态。存储时,就像是时间冻结一般,可以让虚拟机上的状态永久地存储下来。
抓取画面:将虚拟机目前的画面存储下来。
若打算利用虚拟系统管理来控制 Domain-U的虚拟机,请先开启该虚拟机器的画面,然后单击【虚拟系统】菜单中的项目即可,如图28-14所示。
|
(点击查看大图)图28-10 虚拟系统管理主画面 |
28.5 xm 管理工具
除了通过虚拟系统管理图形化管理程序来管理Xen中的虚拟机外,Xen也提供了一个命令模式中的管理工具。这个工具称为 xm (Xen Manager)。
本节将介绍如何使用xm来管理Xen中的虚拟机。
28.5.1 xm 基本语法
如果要使用 xm 来管控虚拟机,你必须使用下列的语法:
|
(点击查看大图)图28-11 虚拟系统管理 虚拟机详细信息 |
其中的COMMAND为 xm 的命令,常用的xm命令如表28-2所示。而ARGS则是COMMAND使用的参数与自变量,不同的COMMAND搭配的ARGS 也会不一样。至于每一个 COMMAND 可使用哪些 ARGS 将于本章节后再介绍。
表28-2 xm常用命令一览表
|
(点击查看大图)图28-12 虚拟机的控制台 |
|
(点击查看大图)图28-13 虚拟机的硬件 |
|
图28-14 控制虚拟机 |
xm COMMAND [ARGS...] |
命令 | 说明 |
console | 连接至虚拟机的控制台 |
create | 建立一个 Domain-U 的虚拟机 |
destroy | 删除一个 Domain-U 的虚拟机 |
list | 列出 Domain |
mem-set | 重新设置 Domain-U 的内存大小 |
pause | 暂停 Domain-U 虚拟机的执行 |
reboot | 重新启动某一个虚拟机 |
restore | 还原虚拟机 |
save | 存储虚拟机的状态 |
Shutdown | 关闭虚拟机 |
top | 监控虚拟机的执行状态 |
unpause | 取消暂停,亦即继续执行虚拟机 |
uptime | 显示虚拟机的 uptime |
vcpu-set | 修改虚拟机的 CPU 数量 |
28.5.2 列出Domain
你可以使用xm来列出Xen中的区域。要列出Xen的区域信息,使用方法如下:
其中的 --long 与 --label 的功能说明如下。
--long:以完整的格式显示该虚拟机的详细信息。
--label:显示虚拟机的安全卷标 (Security Label)。
以下是我使用xm list来列出Xen 区域的范例。
显示区域时,xm 会显示下列的每一个字段。
Name:这个字段显示虚拟机的名称。
ID:这是虚拟机的标识符。
Mem:虚拟机目前使用多少的内存。
VCPUs:虚拟机目前使用的 CPU 数量。
State:虚拟机的状态。这个字段中,若显示若干标签,则每一个标签代表的意义如下。
r:代表该虚拟机正在执行中(Running)。
b:该虚拟机因等候 I/O 而被阻断(Block)。
p:该虚拟机已被暂停(Pause)。
s:该虚拟机已被关闭(Shutdown)。
c:虚拟机宕机(Crash)。
d:虚拟机正在结束中(Dying)。
Time:虚拟机执行共花费多少时间。
28.5.3 启动与删除 Domain-U
在安装虚拟机后,Red Hat Enterprise Linux 5的Xen 会默认停止该虚拟机。如果打算启动该虚拟机,你必须以xm来启动它:
其中的CONFIGFILE是该虚拟机的配置文件路径名称,而后面的参数则是该虚拟机器内核的启动参数。
关于虚拟机的配置文件。
Red Hat Enterprise Linux 5中提供的是Xen 3.0 版。在该版本的Xen中,建立一个新的虚拟机后,会自动产生该虚拟机的配置文件,但在其他版本的Xen里,可能不会自动产生虚拟机的配置文件。
默认虚拟机配置文件会存储于/etc/xen/中,且以该虚拟机的名称作为配置文件的名称。
另外,Xen 里面也允许你删除(Destroy)一个虚拟机。删除的时候,Xen会立即终止该虚拟机的执行,就如同按下计算机的电源一样。
若采用删除的方式来终止虚拟机的执行,你可能会失去所有未存储的资料。所以,请不要随意使用删除的方式来结束虚拟机的执行,若真要这样做,可能会造成无法想象的后果。
如果你想要利用 xm 来删除一个虚拟机,你可以执行下列命令:
其中的DOMAIN就是虚拟机的名称。
以下是我使用xm来启动与删除一个虚拟机的示范。
①
目前我的 Red Hat Enterprise Linux 中仅有一个Domain-0,表示未启动任何虚拟机器。
②
在/etc/xen/ 目录中,有一个名为system1的文件,这就是system1 虚拟机器的配置文件。
③
现在,利用xm来启动system1虚拟机吧!
④
完成后,再次查看所有的虚拟机,就可发现system1已经顺利地启动了。
⑤
现在,利用xm来删除system1虚拟机。
⑥
确认一下system1是否还在。根据xm list的结果可知,system1虚拟机已经被终止了。
⑦
删除虚拟机并不会删除虚拟机的配置文件,因此,/etc/xen/中仍存储着system1这个文件。
28.5.4 连接至虚拟机控制台
启动虚拟机后,你可以连接到该虚拟机的控制台来使用该虚拟机。如果要通过xm来连接虚拟机的控制台,则必须使用xm console 命令:
其中的DOMAIN就是虚拟机的名称。连接虚拟机后,如果要回到真实的机器,你可以在虚拟机的控制台中按下【Ctrl+]】组合键。这样就可以返回真实机器上。
以下是我使用xm 连接至虚拟机控制台的范例。
①
连接到 system1 虚拟机的控制台。
②
根据目前的主机名可知,现在的确是在 system1 的虚拟机下。
③
看一下uptime的结果,这台虚拟机才开机2分钟。
④
按下【Ctrl+D】组合键回到宿主机的Shell下吧!
28.5.5 监控 Domain
如果你打算监控每一个虚拟机的状态,则可以使用xen top 进行监控。
在监控虚拟机的过程中,你会看到画面的下方有一行信息,提示你可以做什么动作。在监控的过程中可以执行的动作整理如表28-3所示。
表28-3 在监控中可以执行的动作
xm list [ --long | --label ] [DOMAIN...] |
[root@linux ~]# xm list |
xm create [-c] CONFIGFILE [NAME=VALUE...] |
xm destroy DOMAIN |
[root@linux ~]# xm list |
xm console DOMAIN |
[root@linux ~]# xm console system1 ?① |
xentop - 11:59:32 Xen 3.0.3-rc5-8.el5 Delay Networks vBds VCPUs Repeat header Sort order Quit |
项目 | 按键 | 说明 |
Delay | D | 修改显示更新频率,单位为秒 |
Networks | N | 修改显示网络的状态 |
vBds | B | 切换是否显示虚拟磁盘的状态 |
VCPUs | V | 切换是否显示虚拟中央处理器信息 |
Repeat header | R | 切换是否在每一个虚拟机前显示表格字段 |
Sort order | S | 切换排序的字段 |
Quit | Q | 结束 xm top,回到 Shell |
28.5.6 修改Domain-U
当然,跟虚拟系统管理一样,你也可以利用xm来修改 Domain-U 的硬件设备之设置。你可以执行如下的操作
调整内存大小
mem-set用来修改虚拟机内存的目前使用量,而mem-max 则用来修改内存的最大值。值得注意的是,mem-set 设置的值不能超过mem-max设置的值的大小。
调整 CPU 数量
其中的DOMAIN为虚拟机的名称,Mem为内存的大小,单位为MB,而VCPU则是虚拟机CPU的数量。
①
目前system1的内存为499 MB。
②
将system1的内存改为256 MB吧。
② Xen 并不会马上修改,它会慢慢地调降至指定的大小。
④
稍候片刻,system1的内存就成了255 MB。
28.5.7 控制Domain-U
Xen允许你控制虚拟机的执行状态,也可以利用xm来控制Xen中的虚拟机。至于如何使用xm来控制虚拟机的状态,请参阅表28-4。
表28-4 使用XM控制虚拟机的状态说明
其中DOMAIN为虚拟机的名称。另外,shutdown 与 reboot可以配合下列的参数。
-a, --all:代表全部的虚拟机。
w, --wait:需等候多少时间。
以下是我使用xm控制虚拟机的示范。
①
目前 system1 并无显示 p 标签,代表该虚拟机处在正常的执行中。
②
暂停 system1 吧!
③
目前 system1 的状态区位中出现了p标签,代表 system1 已经暂停了。
④
现在来取消 system1 的暂停状态。
⑤ system1 果然又继续执行了。
28.6 virsh管理工具
另外一个命令模式的 Xen 管理工具叫做virsh(Virtual Shell)。virsh 是由一个名为 libvirt的软件提供的管理工具,提供管理虚拟机更高级的能力。virsh大部分的功能与xm 一样,你可以利用 virsh 来启动、删除、控制、监控Xen 的区域,因此你也可以利用 virsh 来管理 Xen 中所有的虚拟机。
你可能会很好奇,既然已经提供了xm管理工具,为何Red Hat Enterprise Linux 还需提供virsh?
这是因为在Linux领域里,除了Xen外,还有许多种机制也提供虚拟化的功能,然而,不同的虚拟化系统的使用方法都不太相同。为了让Linux可以通过同一种方法读取与管理各种虚拟化子系统,libvirt团队(http://libvirt.org/)便开发出了libvirt.so链接库,让软件的开发人员可以用 libvirt.so提供的API来管控所有的虚拟化系统。而virsh 就是利用 libvirt.so 链接库编写而成的管理工具。因此,不管实质上执行的是何种虚拟化子系统,你只需学会 virsh 的使用方法,就可以藉此来使用或管理各种虚拟化系统提供的虚拟机了。
本节将介绍 virsh 这个管理工具的使用方法。
28.6.1 基本语法
virsh的基本用法如下:
另外需要注意的是,virsh提供两种执行模式:"直接模式(Direct Mode)"与"互动模式(Interactive Mode)"。在直接模式里,你必须在Shell中以参数、自变量的方式来执行virsh,如果在互动模式中,则virsh会提供一个提示字符串,你可以在该提示字符串后,输入要执行的命令。如果执行virsh没有指定任何参数或自变量则默认就是进入互动模式。
与xm一样,COMMAND也是 virsh提供的命令,常用的命令如表 28-5所示。
表28-5 virsh常用命令一览表
xm mem-set DOMAIN MEM |
xm vcpu-set DOMAIN VCPU |
[root@linux ~]# xm list |
动作 | 命令 |
暂停虚拟机 | xm pause DOMAIN |
取消暂停 | xm unpause DOMAIN |
关闭虚拟机 | xm shutdown [OPTIONS] DOMAIN |
重新启动虚拟机 | xm reboot [OPTIONS] DOMAIN |
[root@linux ~]# xm list |
virsh [COMMAND] [ARGS...] |
命令 | 说明 |
help | 显示该命令的说明 |
quit | 结束 virsh,回到 Shell |
connect | 连接到指定的虚拟机服务器 |
create | 启动一个新的虚拟机 |
destroy | 删除一个虚拟机 |
start | 开启(已定义的)非启动的虚拟机 |
define | 从 XML 定义一个虚拟机 |
undefine | 取消定义的虚拟机 |
dumpxml | 转储虚拟机的设置值 |
list | 列出虚拟机 |
reboot | 重新启动虚拟机 |
save | 存储虚拟机的状态 |
restore | 回复虚拟机的状态 |
suspend | 暂停虚拟机的执行 |
resume | 继续执行该虚拟机 |
dump | 将虚拟机的内核转储到指定的文件,以便进行分析与排错 |
shutdown | 关闭虚拟机 |
setmem | 修改内存的大小 |
setmaxmem | 设置内存的最大值 |
setvcpus | 修改虚拟处理器的数量 |
而virsh命令语法的ARGS则是COMMAND 搭配的参数。不同的COMMAND可能需搭配不同的参数,至于什么COMMAND可以搭配哪些参数,我将会在对各功能的介绍中提到。
总地来说,如果ARGS需指定虚拟机,你可以使用下列的格式指定是哪一个虚拟机器。
虚拟机的名称。
虚拟机启动后的标识符。
虚拟机的 UUID。
以下就是使用 virsh 的示范。
①
以互动模式执行 virsh。
②
结束 virsh 的执行,回到默认的 Shell 下。
③
这是以直接模式执行 virsh,结果与互动模式完全一样。
由于virsh与xm的部分功能相同,因此,本节仅介绍virsh与xm的不同之处。
28.6.2 查看Domain信息
virsh 可以查看虚拟机的相关信息,你只需在执行 virsh 时配合如表28-6所示的命令。
表28-6 查看Domain信息执行的命令
执行上述的每一个命令时,你都必须指定虚拟机的名称、标识符和UUID。以下是我使用 virsh 查看虚拟机信息的示范。
①
这是 system1 虚拟机的标识符。
②
这是标识符 3 的虚拟机之名称。
③ system1 的 UUID。
④
这则是 system1 完整的信息。
28.6.3 转储区域配置
除了上述的功能外,virsh也允许把某一个虚拟机目前的设置值存储下来。virsh把设置值存储下来的动作,称为"转储(Dump)"。
转储虚拟机设置值有什么好处?
好处很多,我至少想到两个。首先,转储虚拟机的设置值可以让你把某一个虚拟机的设置备份下来,以供日后恢复该设置配置。其次,如果要用 virsh 来启动一个虚拟机,你必须指定该虚拟机的配置文件。因此,如果你希望用virsh 来管理所有的虚拟机,那么请务必把每一个虚拟机的设置值转储下来后妥善保存。
如果要转储虚拟机的设置值,你可以执行:
其中的DOMAIN就是要转储的虚拟机。你可以使用虚拟机的名称、标识符或是UUID来指定要转储到哪一个虚拟机。以下是我使用virsh转储虚拟机的范例。
①
这是 system1 的设置数据。
②
目前这个目录下只有这几个文件。
③
现在把 system1 转储后的设置数据转向存储于 system1.virsh.xml文件中。
④
这就是 system1 的设置数据备份文件。