23 管理虚拟化环境 #
除了使用建议的 libvirt
库(第 II 部分 “使用 libvirt
管理虚拟机”)以外,您还可以在命令行中使用 xl
工具来管理 Xen Guest 域。
23.1 XL — Xen 管理工具 #
xl
程序是用于管理 Xen Guest 域的工具。它包含在 xen-tools 软件包中。xl
基于 LibXenlight 库,可用于执行一般的域管理工作,例如创建、监听、暂停或关闭域。通常只有 root
用户才能执行 xl
命令。
xl
只能管理域配置文件指定的运行中 Guest 域。如果某个 Guest 域未运行,则您无法使用 xl
来管理它。
为了允许用户继续像使用已过时的 xm
命令那样来使用受管 Guest 域,目前我们建议使用 libvirt
的 virsh
和 virt-manager
工具。有关更多信息,请参见第 II 部分 “使用 libvirt
管理虚拟机”。
xl
操作依赖于 xenstored
和 xenconsoled
服务。请确保在引导时启动
tux >
systemctl start xencommons
以初始化 xl
所需的所有守护程序。
xenbr0
网桥
在最常用的网络配置中,需在主机域中设置一个名为 xenbr0
的网桥,以便为 Guest 域提供正常工作的网络。
每个 xl
命令的基本结构如下:
xl <subcommand> [options] domain_id
其中,<subcommand> 是要运行的 xl 命令,domain_id 是指派给域的 ID 编号或虚拟机的名称,OPTIONS
表示特定于子命令的选项。
如需可用 xl
子命令的完整列表,请运行 xl help
。对于每个命令,您都可以使用附加参数 --help
获取更详细的帮助。xl
的手册页中提供了有关相应子命令的详细信息。
例如,xl list --help
会显示 list 命令可用的所有选项。举例来说,xl list
命令可显示所有虚拟机的状态。
tux >
sudo
xl list Name ID Mem VCPUs State Time(s) Domain-0 0 457 2 r----- 2712.9 sles12 7 512 1 -b---- 16.3 opensuse 512 1 12.9
r
(正在运行)和 b
(受阻),其中“受阻”的意思是该计算机正在等待 IO,或者由于无需执行任何操作而处于休眠状态。有关状态标志的更多细节,请参见 man 1 xl
。
其他有用的 xl
命令包括:
xl create
,可基于给定的配置文件创建虚拟机。xl reboot
,可重引导虚拟机。xl destroy
,可立即终止虚拟机。xl block-list
,可显示挂接到虚拟机的所有虚拟块设备。
23.1.1 Guest 域配置文件 #
使用 xl
操作域时,每个域都需有相应的域配置文件。用于储存此类配置文件的默认目录为 /etc/xen/
。
域配置文件是一个纯文本文件。它包含多个“键=值”对。有些键是必需的,有些键是通用的且适用于任何 Guest,还有些键只适用于特定的 Guest 类型(半虚拟化或全虚拟化)。值可以是括在单引号或双引号中的字符串("string"
形式)、数字、布尔值,或者括在方括号中的多个值的列表([ value1, value2, ... ]
形式)。
/etc/xen/sled12.cfg
#name= "sled12" builder = "hvm" vncviewer = 1 memory = 512 disk = [ '/var/lib/xen/images/sled12.raw,,hda', '/dev/cdrom,,hdc,cdrom' ] vif = [ 'mac=00:16:3e:5f:48:e4,model=rtl8139,bridge=br0' ] boot = "n"
要启动此类域,请运行 xl create /etc/xen/sled12.cfg
。
23.2 自动启动 Guest 域 #
要使 Guest 域在主机系统引导后自动启动,请执行以下步骤:
创建域配置文件(如果不存在)并将其保存到
/etc/xen/
目录,例如/etc/xen/domain_name.cfg
。在
auto/
子目录中创建 Guest 域配置文件的符号链接。tux >
sudo
ln -s /etc/xen/domain_name.cfg /etc/xen/auto/domain_name.cfg系统下次引导时,
domain_name.cfg
中定义的 Guest 域将会启动。
23.3 事件操作 #
在 Guest 域配置文件中,您可以定义在发生一组预定义的事件时要执行的操作。例如,要告知域在其关机后自行重启动,请在其配置文件中包含下面一行:
on_poweroff="restart"
下面是 Guest 域的预定义事件列表:
- on_poweroff
指定在域自行关机后应执行什么操作。
- on_reboot
当域关机并提供了请求重引导的原因代码时要执行的操作。
- on_watchdog
当域由于 Xen 看门狗超时而关机时要执行的操作。
- on_crash
当域崩溃时要执行的操作。
对于这些事件,可以定义以下操作之一:
- destroy
销毁域。
- restart
销毁域,并立即采用相同的配置创建新域。
- rename-restart
重命名已终止的域,然后立即采用与原始域相同的配置创建新域。
- preserve
保留域。可以检查该域,以后再使用
xl destroy
将它销毁。- coredump-destroy
将域的核心转储写入
/var/xen/dump/NAME
,然后销毁该域。- coredump-restart
将域的核心转储写入
/var/xen/dump/NAME
,然后重启动该域。
23.4 时戳计数器 #
您可以为 Guest 域配置文件中的每个域指定时戳计数器 (TSC)(有关详细信息,请参见第 23.1.1 节 “Guest 域配置文件”)。
使用 tsc_mode
设置可以指定是要“本机”执行 rdtsc 指令(速度较快,但 TSC 敏感型应用程序有时无法正常运行),还是模拟这些指令(始终可正常运行,但性能可能受到影响)。
tsc_mode=0
(默认设置)使用此设置可确保正常运行,同时提供可以实现的最佳性能 — 有关详细信息,请参见 https://xenbits.xen.org/docs/4.3-testing/misc/tscmode.txt。
tsc_mode=1
(始终模拟)如果 TSC 敏感型应用程序正在运行,并且已知且可接受最坏情况下的性能下降,请使用此设置。
tsc_mode=2
(永不模拟)如果此 VM 中运行的所有应用程序都能够灵活适应 TSC 并且需要最高性能,请使用此设置。
tsc_mode=3
(PVRDTSCP)可以半虚拟化(修改)高 TSC 频率应用程序,以同时兼顾正常运行和最高性能 — 任何未经修改的应用程序都必须能够灵活适应 TSC。
有关背景信息,请参见 https://xenbits.xen.org/docs/4.3-testing/misc/tscmode.txt。
23.5 保存虚拟机 #
确保要保存的虚拟机正在运行。
在主机环境中输入
tux >
sudo
xl save ID STATE-FILE其中,ID 是要保存的虚拟机 ID,STATE-FILE 是您为内存状态文件指定的名称。默认情况下,当您创建域的快照后,该域将不再运行。使用
-c
可使域保持运行状态,即使在您创建快照后也是如此。
23.6 恢复虚拟机 #
确保要恢复的虚拟机自您运行保存操作后始终未启动。
在主机环境中输入
tux >
sudo
xl restore STATE-FILE其中,STATE-FILE 是先前保存的内存状态文件。域在恢复后默认将处于运行状态。要在恢复后暂停域,请使用
-p
。
23.7 虚拟机状态 #
可以通过查看 xl list
命令的结果来显示虚拟机的状态,结果中以单字符缩写形式显示状态。
r
- 正在运行 - 虚拟机当前正在运行,并在消耗分配的资源。b
- 受阻 - 虚拟机的处理器未运行,且无法运行。虚拟机正在等待 I/O 或已停止工作。p
- 已暂停 - 虚拟机已暂停。虚拟机不会与超级管理程序交互,但仍保有为其分配的资源,例如内存。s
- 已关闭 - Guest 操作系统正在关闭、已重引导或已挂起,并且虚拟机正在停止。c
- 已崩溃 - 虚拟机已崩溃,未在运行。d
- 即将死机 - 虚拟机正在关机或崩溃。