25 管理虚拟化环境 #
  除了使用建议的 libvirt 库(第 II 部分 “使用 libvirt 管理虚拟机”)以外,您还可以在命令行中使用 xl 工具来管理 Xen Guest 域。
 
25.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 服务。请确保在引导时启动
  
> 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 命令可显示所有虚拟机的状态。
  
>sudoxl 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,可显示挂接到虚拟机的所有虚拟块设备。
25.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。
   
25.2 自动启动 Guest 域 #
要使 Guest 域在主机系统引导后自动启动,请执行以下步骤:
- 创建域配置文件(如果不存在)并将其保存到 - /etc/xen/目录,例如- /etc/xen/domain_name.cfg。
- 在 - auto/子目录中创建 Guest 域配置文件的符号链接。- >- sudoln -s /etc/xen/domain_name.cfg /etc/xen/auto/domain_name.cfg
- 系统下次引导时, - domain_name.cfg中定义的 Guest 域将会启动。
25.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,然后重启动该域。
25.4 时戳计数器 #
您可以为 Guest 域配置文件中的每个域指定时戳计数器 (TSC)(有关详细信息,请参见第 25.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。
25.5 保存虚拟机 #
- 确保要保存的虚拟机正在运行。 
- 在主机环境中输入 - >- sudoxl save ID STATE-FILE- 其中,ID 是要保存的虚拟机 ID,STATE-FILE 是您为内存状态文件指定的名称。默认情况下,当您创建域的快照后,该域将不再运行。使用 - -c可使域保持运行状态,即使在您创建快照后也是如此。
25.6 恢复虚拟机 #
- 确保要恢复的虚拟机自您运行保存操作后始终未启动。 
- 在主机环境中输入 - >- sudoxl restore STATE-FILE- 其中,STATE-FILE 是先前保存的内存状态文件。域在恢复后默认将处于运行状态。要在恢复后暂停域,请使用 - -p。
25.7 虚拟机状态 #
   可以通过查看 xl list 命令的结果来显示虚拟机的状态,结果中以单字符缩写形式显示状态。
  
- r- 正在运行 - 虚拟机当前正在运行,并在消耗分配的资源。
- b- 受阻 - 虚拟机的处理器未运行,且无法运行。虚拟机正在等待 I/O 或已停止工作。
- p- 已暂停 - 虚拟机已暂停。虚拟机不会与超级管理程序交互,但仍保有为其分配的资源,例如内存。
- s- 已关闭 - Guest 操作系统正在关闭、已重引导或已挂起,并且虚拟机正在停止。
- c- 已崩溃 - 虚拟机已崩溃,未在运行。
- d- 即将死机 - 虚拟机正在关机或崩溃。