C XM、XL 工具栈和 libvirt
框架 #
C.1 Xen 工具栈 #
从早期发行版 Xen 2.x 开始,xend
就一直是事实上用于管理 Xen 安装的工具堆栈。Xen 4.1 中引入了一个处于技术预览状态的新工具堆栈 libxenlight(又称为 libxl)。libxl 是以 C 编写的小型低级别库,旨在为所有客户端工具堆栈(XAPI、libvirt
、xl)提供简单的 API。Xen 4.2 将 libxl 提升为受官方支持状态,而将 xend
标记为弃用。Xen 4.3 和 4.4 系列中包含了 xend
,使用户有充足的时间将其工具过渡到 libxl。上游 Xen 项目中已去除 xend,从 Xen 4.5 系列和 SUSE Linux Enterprise Server 12 SP1 开始,将不再提供该工具堆栈。
尽管 SLES 11 SP3 包含了 Xen 4.2,但 SUSE 仍保留了 xend
工具堆栈,因为在服务包中进行这种有创性更改会给 SUSE Linux Enterprise 客户造成过大干扰。不过,SLES 12 将提供适当的机会让客户迁移到新的 libxl 工具堆栈,并去除已弃用且不再保留的 xend
堆栈。从 SUSE Linux Enterprise Server
12 SP1 开始,xend
不再受支持。
xend
与 libxl 之间的主要差别之一是,前者是有状态的,而后者是无状态的。使用 xend
时,所有客户端应用程序(例如 xm
和 libvirt
)都会看到相同的系统状态。xend
负责维护整个 Xen 主机的状态。在 libxl 中,xl
或 libvirt
等客户端应用程序必须维护状态。因此,使用 xl
创建的域对于 libvirt
等其他 libxl 应用程序是不可见或不可知的。一般情况下,我们建议不要混用多个 libxl 应用程序,而是使用单个 libxl 应用程序来管理 Xen 主机。在 SUSE Linux Enterprise Server 中,我们建议使用 libvirt
来管理 Xen 主机。这样,便可以通过 virt-manager
、virt-install
、virt-viewer
、libguestfs 等 libvirt
应用程序来管理 Xen 系统。如果使用 xl
管理 Xen 主机,libvirt
将无法访问由 xl 管理的任何虚拟机。因此,任何 libvirt
应用程序也无法访问这些虚拟机。
C.1.1 从 xend/xm to xl/libxl 升级 #
xl
应用程序及其配置格式(请参见 man xl.cfg
)可以向后兼容 xm
应用程序及其配置格式(请参见 man xm.cfg
)。可以通过 xl
来利用现有的 xm
配置。由于 libxl 是无状态的,并且 xl
不支持受管域的表示法,因此 SUSE 建议使用 libvirt
来管理 Xen 主机。SUSE 提供了一个名为 xen2libvirt
的工具,用于提供简单的机制来将以前由 xend
管理的域导入 libvirt
。有关 xen2libvirt
的详细信息,请参见第 C.2 节 “将 Xen 域配置导入 libvirt
”。
C.1.2 XL 设计 #
每个 xl
命令的基本结构如下:
xl subcommand
OPTIONS
DOMAIN
DOMAIN 是域 ID 编号或者域名(在内部转换为域 ID),OPTIONS 是特定于子命令的选项。
尽管 xl/libxl 可以向后兼容 xm/xend,但您应该注意两者之间的几项差别:
受管域或持久域。
libvirt
现在提供此项功能。xl/libxl 不支持在域配置文件中使用 Python 代码。
xl/libxl 不支持基于 SXP 格式配置文件创建域 (
xm
create
-F)。xl/libxl 不支持通过域配置文件中的
w!
在 DomU 之间共享存储。
xl/libxl 是尚在大力开发之中的新工具堆栈,因此相比 xm/xend 工具堆栈仍然缺少一些功能:
SCSI LUN/主机直通 (PVSCSI)
USB 直通 (PVUSB)
Xen 全虚拟化 Linux Guest 的直接内核引导
C.1.3 升级前的核对清单 #
在将 SLES 11 SP4 Xen 主机升级到 SLES 15 之前:
必须从 xm 域配置文件中去除任何 Python 代码。
建议使用
virsh
dumpxml
DOMAIN_NAME DOMAIN_NAME.xml 捕获所有现有虚拟机中的 libvirt 域 XML。建议备份
/etc/xen/xend-config.sxp
和/boot/grub/menu.lst
文件,以保留以前用于 Xen 的参数的参考信息。
目前不支持将 SLES 11 SP4 Xen 主机上运行的虚拟机实时迁移到 SLES 15 Xen 主机。xend
与 libxl 工具堆栈的运行时环境不兼容。需要关闭虚拟机才能进行迁移。
C.2 将 Xen 域配置导入 libvirt
#
xen2libvirt
是用于将旧式 Xen 域配置导入 libvirt
虚拟化库的命令行工具。有关 libvirt
的详细信息,请参见《The Virtualization》(虚拟化)一书。使用 xen2libvirt 可以轻松将已弃用的 xm
/xend 工具堆栈所管理的域导入新的 libvirt
/libxl 工具堆栈中。使用此工具的 --recursive mode
模式可以一次性导入多个域
xen2libvirt
包含在 xen-tools
软件包中。如果需要,请使用以下命令安装该软件包
>
sudo
zypper install xen-tools
xen2libvirt
的一般语法为
xen2libvirt <options> /path/to/domain/config
其中,options
可以是:
-h
,--help
列显有关
xen2libvirt
用法的简短信息。-c
,--convert-only
将域配置转换为
libvirt
XML 格式,但不将配置导入libvirt
。-r
,--recursive
从指定的路径开始,以递归方式转换并/或导入所有域配置。
-f
,--format
指定源域配置的格式。可以是
xm
或sexpr
(S 表达式格式)。-v
,--verbose
列显有关导入过程的更详细的信息。
libvirt
#
假设您有一个通过 xm
管理的 Xen 域,/etc/xen/sle12.xm
中保存了该域的以下配置:
kernel = "/boot/vmlinuz-2.6-xenU" memory = 128 name = "SLE12" root = "/dev/hda1 ro" disk = [ "file:/var/xen/sle12.img,hda1,w" ]
将此配置转换为 libvirt
XML 而不导入,然后查看其内容:
>
sudo
xen2libvirt -f xm -c /etc/xen/sle12.xm > /etc/libvirt/qemu/sles12.xml # cat /etc/libvirt/qemu/sles12.xml <domain type='xen'> <name>SLE12</name> <uuid>43e1863c-8116-469c-a253-83d8be09aa1d</uuid> <memory unit='KiB'>131072</memory> <currentMemory unit='KiB'>131072</currentMemory> <vcpu placement='static'>1</vcpu> <os> <type arch='x86_64' machine='xenpv'>linux</type> <kernel>/boot/vmlinuz-2.6-xenU</kernel> </os> <clock offset='utc' adjustment='reset'/> <on_poweroff>destroy</on_poweroff> <on_reboot>restart</on_reboot> <on_crash>restart</on_crash> <devices> <disk type='file' device='disk'> <driver name='file'/> <source file='/var/xen/sle12.img'/> <target dev='hda1' bus='xen'/> </disk> <console type='pty'> <target type='xen' port='0'/> </console> </devices> </domain>
要将域导入 libvirt
,可以运行不带 -c
选项的相同 xen2libvirt
命令,或者使用导出的文件 /etc/libvirt/qemu/sles12.xml
,并通过 virsh
定义新的 Xen 域:
>
sudo
virsh define /etc/libvirt/qemu/sles12.xml
C.3 xm
与 xl
应用程序之间的差异 #
本章罗列了 xm
与 xl
应用程序之间的所有差异。一般情况下,xl
与 xm
兼容。通常,用户只需在自定义脚本或工具中将 xm
替换为 xl
即可。
您还可以通过 virsh
命令使用 libvirt
框架。本文档只会显示 virsh
的第一个 OPTION。要获取有关此选项的更多帮助,请执行:
virsh
help
OPTION
C.3.1 表示法约定 #
为了让您轻松了解 xl
与 xm
命令之间的差异,本节使用了以下表示法:
表示法 |
含义 |
---|---|
(-) minus |
选项在 |
(+) plus |
选项在 |
C.3.2 新的全局选项 #
选项 |
任务 |
---|---|
(+) |
详细,提高输出的详细程度 |
(+) |
试运行,不实际执行命令 |
(+) |
强制执行。如果 |
C.3.3 未更改的选项 #
xl
和 xm
的常用选项列表,及其等效的 libvirt
选项。
选项 |
任务 |
|
---|---|---|
destroy DOMAIN |
立即终止域。 |
|
domid DOMAIN_NAME |
将域名转换为 DOMAIN_ID。 |
|
domname DOMAIN_ID |
将 DOMAIN_ID 转换为 DOMAIN_NAME。 |
|
help |
显示简短的帮助消息(即常用命令)。 |
|
pause DOMAIN_ID |
暂停域。处于暂停状态的域仍会消耗分配的资源(例如内存),但不符合由 Xen 超级管理程序调度的条件。 |
|
unpause DOMAIN_ID |
使域脱离暂停状态。这样以前暂停的域便符合由 Xen 超级管理程序调度的条件。 |
|
rename DOMAIN_ID NEW_DOMAIN_NAME |
将 DOMAIN_ID 的域名更改为 NEW_DOMAIN_NAME。 |
|
sysrq DOMAIN <letter> |
向域发送魔术系统请求,每种类型的请求由一个不同的字母表示。可以使用此选项向 Linux Guest 发送 SysRq 请求,有关详细信息,请参见 https://www.kernel.org/doc/html/latest/admin-guide/sysrq.html。需要在 Guest 操作系统中安装 PV 驱动程序。 |
|
vncviewer OPTIONS DOMAIN |
挂接到域的 VNC 服务器,并派生 |
|
|
为相关的域设置虚拟 CPU 数量。与 |
|
vcpu-list DOMAIN_ID |
列出特定域的 VCPU 信息。如果未指定域,将提供所有域的 VCPU 信息。 |
|
vcpu-pin DOMAIN_ID <VCPU|all> <CPUs|all> |
固定 VCPU,使其仅在特定的 CPU 上运行。可以使用关键字 all 向域中的所有 VCPU 应用 CPU 列表。 |
|
|
读取 Xen 消息缓冲区,与 Linux 系统上的 dmesg 类似。该缓冲区包含 Xen 引导过程中创建的信息性、警告和错误消息。 | |
|
执行 |
|
|
列显正在运行的域的当前运行时间。使用 | |
|
将调试键发送到 Xen。等同于按 Xen conswitch(默认为 Ctrl-A)三次,然后按“keys”。 | |
|
将 DOMAIN_ID 或 DOMAIN 指定的域移到 CPU_POOL 中。 | |
|
停用 CPU 池。仅当该 CPU 池中没有任何处于活动状态的域时,才可执行此操作。 | |
|
分离域的虚拟块设备。devid 可以是 Dom0 为设备指定的符号名称或设备数字 ID。需要运行 |
|
|
在 DOMAIN_ID 所指定的域中创建新网络设备。network_device 描述要挂接的设备,使用与域配置文件中 vif 字符串相同的格式 |
|
|
将新的直通 PCI 设备热插入到指定的域。BDF 是要直通的物理设备的 PCI 总线/设备/功能。 |
|
|
列出域的直通 PCI 设备 | |
|
确定 FLASK 安全模块是否已装载并正在强制实施其策略。 | |
|
启用或禁用强制实施 FLASK 访问控制的功能。默认值为 permissive,您可以在超级管理程序的命令行上使用 flask_enforcing 选项更改默认值。 |
C.3.4 已去除的选项 #
不再可用于 XL 工具堆栈的 xm
options
列表,以及替代的解决方法(如果有)。
C.3.4.1 域管理 #
已去除的域管理命令及其替代命令列表。
已去除的域管理选项 | ||
---|---|---|
选项 |
任务 |
等效选项 |
(-) |
列显 Xend 日志。 |
可在 |
(-) |
从 Xend 域管理中去除域。 |
|
(-) |
将域添加到 Xend 域管理 |
|
(-) |
启动使用 |
|
(-) |
试运行 - 列显 SXP 中生成的配置,但不创建域 |
|
(-) |
重置域 |
|
(-) |
显示域状态 |
|
(-) |
通过 stdio 代理 Xend XMLRPC | |
(-) |
使域脱离挂起状态,并将其移回到内存中 |
|
(-) |
在状态文件中挂起域,以便稍后可以使用 |
|
C.3.4.2 USB 设备 #
USB options
不可用于 xl/libxl 工具堆栈。virsh
提供 attach-device
和 detach-device
选项,但尚不适用于 USB
。
已去除的 USB 设备管理选项 | |
---|---|
选项 |
任务 |
(-) |
将新 USB 物理总线添加到域 |
(-) |
从域中删除 USB 物理总线 |
(-) |
将新 USB 物理总线挂接到域的虚拟端口 |
(-) |
从域的虚拟端口分离 USB 物理总线 |
(-) |
列出域的所有虚拟端口挂接状态 |
(-) |
列出所有可指派的 USB 设备 |
(-) |
创建域的新虚拟 USB 主机控制器 |
(-) |
销毁域的虚拟 USB 主机控制器 |
C.3.4.3 CPU 管理 #
CPU 管理选项发生了变化。我们提供了一些新选项,请参见:第 C.3.5.10 节 “xl
cpupool-*
”
已去除的 CPU 管理选项 | |
---|---|
选项 |
任务 |
(-) |
将 CPU 池添加到 Xend CPU 池管理 |
(-) |
启动 Xend CPU 池 |
(-) |
从 Xend 管理中去除 CPU 池 |
C.3.4.4 其他选项 #
其他已去除的选项 | |
---|---|
选项 |
任务 |
(-) |
启动交互式外壳 |
(-) |
更改 vnc 口令 |
(-) |
列出虚拟 TPM 设备 |
(-) |
更改块设备配置 |
C.3.5 已更改的选项 #
C.3.5.1 create
#
xl
create
CONFIG_FILE OPTIONS
VARS
libvirt
等效选项:
virsh
create
xl
create
选项 #
已更改的 | |
---|---|
选项 |
任务 |
(*) -f=FILE、--defconfig=FILE |
使用给定的配置文件 |
xm
create
选项 #
已去除的 | |
---|---|
选项 |
任务 |
(-) |
跳过 DTD 检查 - 创建之前跳过 XML 检查 |
(-) |
XML 试运行 |
(-) |
使用给定的 SXP 格式配置脚本 |
(-) |
在路径中搜索配置脚本 |
(-) |
列显配置脚本的可用配置变量 (var) |
(-) |
试运行 — 列显 SXP 中的配置,但不创建域 |
(-) |
创建域后连接到控制台 |
(-) |
安静模式 |
(-) |
创建域后使其保持暂停状态 |
xl
create
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
挂接到域的 VNC 服务器,并派生 vncviewer 进程 |
(+) |
通过 stdin 将 VNC 口令传递给 vncviewer |
C.3.5.2 console
#
xl
console
OPTIONS DOMAIN
libvirt
等效选项
virsh
console
xl
console
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
连接到 PV 控制台,或连接到模拟的串行控制台。PV 域只能使用 PV 控制台,而 HVM 域可以使用上述两种控制台 |
C.3.5.3 info #
xl
info
xm
info
选项 #
已去除的 | |
---|---|
选项 |
任务 |
(-) |
Numa 信息 |
(-) |
列出 Xend 配置参数 |
C.3.5.4 dump-core
#
xl
dump-core
DOMAIN FILENAME
libvirt
等效选项
virsh
dump
xm
dump-core
选项 #
已去除的 | |
---|---|
选项 |
任务 |
(-) |
在不暂停域的情况下转储核心 |
(-) |
转储核心后使域崩溃 |
(-) |
转储核心后重置域 |
C.3.5.5 list
#
xl list
options
DOMAIN
libvirt
等效选项
virsh
list --all
xm
list
选项 #
已去除的 | |
---|---|
选项 |
任务 |
(-) |
|
(-) |
输出处于指定状态的 VM 的信息 |
xl
list
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
同时列显安全标签 |
(+) |
同时列显域 UUID、关机原因和安全标签 |
C.3.5.6 mem-*
#
libvirt
等效选项
virsh
setmem
virsh
setmaxmem
xl
mem-*
选项 #
已更改的 | |
---|---|
选项 |
任务 |
|
追加 |
|
使用气球驱动程序设置域的已用内存 |
C.3.5.7 migrate
#
xl
migrate
OPTIONS DOMAIN
HOST
libvirt
等效选项
virsh migrate --live hvm-sles11-qcow2 xen+
CONNECTOR://USER@IP_ADDRESS/
xm
migrate
选项 #
已去除的 | |
---|---|
选项 |
任务 |
(-) |
使用实时迁移。这会在不关闭域的情况下在主机之间迁移域 |
(-) |
设置迁移域时允许达到的最大迁移速度 (Mbs) |
(-) |
更改受管域的宿主服务器 |
(-) |
在最终挂起之前的迭代次数(默认值为 30) |
(-) |
在最终挂起之前要传送的最大内存量(默认值为 3*RAM)。 |
(-) |
在最终挂起之前的未写入页数(默认值为 50) |
(-) |
中止迁移,而不是执行最终挂起 |
(-) |
在 |
(-) |
使用 SSL 连接进行迁移 |
xl
migrate
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
使用 <sshcommand> 而不是 |
(+) |
在新主机上,不要在后台(在 <host> 上) 等待域死机 |
(+) |
发送 <config> 而不是创建域时使用的配置文件 |
C.3.5.8 域管理 #
xl
reboot
OPTIONS DOMAIN
libvirt
等效选项
virsh
reboot
xm
reboot
选项 #
已去除的 | |
---|---|
选项 |
任务 |
(-) |
重引导所有域 |
(-) |
等待重引导完成后再返回。这可能需要一段时间,因为需要干净地关闭域中的所有服务 |
xl
reboot
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
对于没有 PV 驱动程序的 HVM Guest,回退到 ACPI 重置事件 |
xl
save
OPTIONS DOMAIN
CHECK_POINT_FILE
CONFIG_FILE
libvirt
等效选项
virsh
save
xl
save
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
创建快照后使域保持运行状态 |
xl
restore
OPTIONS
CONFIG_FILE
CHECK_POINT_FILE
libvirt
等效选项
virsh
restore
xl
restore
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
恢复域后不将其取消暂停 |
(+) |
在新主机上不在后台等待域死机 |
(+) |
启用调试消息 |
(+) |
挂接到域的 VNC 服务器,并派生 vncviewer 进程 |
(+) |
通过 stdin 将 VNC 口令传递给 vncviewer |
xl
shutdown
OPTIONS DOMAIN
libvirt
等效选项
virsh
shutdown
xm
shutdown
选项 #
已去除的 | |
---|---|
选项 |
任务 |
(-) |
等待域完成关机后再返回 |
(-) |
关闭所有 Guest 域 |
(-) | |
(-) |
xl
shutdown
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
如果 Guest 不支持 PV 关机控制,则回退为发送 ACPI 电源事件 |
xl
trigger
选项 #
已更改的 | |
---|---|
选项 |
任务 |
|
向域发送触发器。仅适用于 HVM 域 |
C.3.5.9 xl
sched-*
#
xl
sched-credit
OPTIONS
libvirt
等效选项
virsh
schedinfo
xm
sched-credit
选项 #
已去除的 | |
---|---|
选项 |
任务 |
|
域 |
|
权重为 512 的域将获得的 CPU 是所争用的主机上权重为 256 的域的两倍。合法权重范围为 1 到 65535,默认值为 256 |
|
CAP 可选择性修复域能够消耗的最大 CPU 数量 |
xl
sched-credit
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
将输出内容限制为指定 CPU 池中的域 |
(+) |
指定此选项可列出或设置池范围的调度程序参数 |
(+) |
时间片 (TSLICE) 告知调度程序要允许 VM 运行多长时间后再开始抢占模式 |
(+) |
Ratelimit 会尝试限制每秒调度次数 |
xl
sched-credit2
OPTIONS
libvirt
status
virsh
仅支持 credit 调度程序,不支持 credit2 调度程序
xm
sched-credit2
选项 #
已去除的 | |
---|---|
选项 |
任务 |
|
域 |
|
合法权重范围为 1 到 65535,默认值为 256 |
xl
sched-credit2
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
将输出内容限制为指定 CPU 池中的域 |
xl
sched-sedf
OPTIONS
xm
sched-sedf
选项 #xl
sched-sedf
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
将输出内容限制为指定 CPU 池中的域 |
(+) |
域 |
C.3.5.10 xl
cpupool-*
#
xl
cpupool-cpu-remove
CPU_POOL <CPU nr>|node:<node nr>
xl
cpupool-list
[-c|--cpus] CPU_POOL
xl
cpupool-cpu-add
CPU_POOL cpu-nr|node:node-nr
xl
cpupool-create
OPTIONS
CONFIG_FILE [Variable=Value ...]
xm
cpupool-create
选项 #C.3.5.11 PCI 和块设备 #
xl
pci-detach
[-f] DOMAIN_ID <BDF>
libvirt
等效选项
virsh
detach-device
xl
pci-detach
选项 #
添加的 | |
---|---|
选项 |
任务 |
(+) |
如果指定了 |
xm
block-list
选项 #
已去除的 | |
---|---|
选项 |
任务 |
(-) |
列出域的虚拟块设备 |
选项 |
|
---|---|
|
|
|
|
C.3.5.12 网络 #
选项 |
|
---|---|
|
|
|
|
|
|
xl
network-attach
选项 #
已去除的选项 | |
---|---|
选项 |
任务 |
(-) |
C.3.6 新选项 #
选项 |
任务 |
---|---|
|
更新为运行中的域保存的配置。此更新不会立即生效,而是在 Guest 下次重启动时应用。此命令可用于确保在 Guest 重启动时保留对 Guest 进行的运行时修改 |
| |
|
列出共享页的计数。专门列出指定的域的该信息。如果未指定域,则列出所有域的该信息 |
|
列显有关 Guest 的信息。此列表不包括有关 Dom0 和存根域等服务或辅助域的信息 |
|
将 CPU 池重命名为 newname |
|
将计算机分割为在每个 numa 节点一个 CPU 池 |
cd-insert DOMAIN <VirtualDevice> <type:path> |
将 CD-ROM 插入 Guest 域的现有虚拟 CD 驱动器。该虚拟驱动器必须已存在,但当前可以是空的 |
|
从 Guest 的虚拟 CD 驱动器中弹出 CD-ROM。仅适用于 HVM 域 |
|
列出所有可指派的 PCI 设备。它们是系统中配置为可直通且已绑定到 Dom0 中的适当 PCI 后端驱动程序(而不是真实驱动程序)的设备 |
|
使 PCI 总线/设备/功能 BDF 中的设备可指派到 Guest。这会将该设备绑定到 pciback 驱动程序 |
|
使 PCI 总线/设备/功能 BDF 中的设备可指派到 Guest。这至少会从 pciback 取消绑定该设备 |
|
从给定的策略文件装载 FLASK 策略。初始策略将以多重引导模块的形式提供给超级管理程序;此命令允许对策略进行运行时更新。装载新安全策略会重置对设备标签进行的运行时更改 |
C.4 外部链接 #
有关 Xen 工具堆栈的详细信息,请参见以下联机资源:
- Xen 中的 XL
xl
命令XL 命令行。
- xl.cfg
xl.cfg 域配置文件语法。
- xl disk
xl disk 配置选项。
- XL 与 Xend
XL vs Xend 功能比较。
- BDF 文档
- libvirt
virsh 命令。
C.5 以与 xm
兼容的格式保存 Xen Guest 配置 #
尽管 xl
是当前用于管理 Xen Guest 的工具集(此外还有首选的 libvirt
),但您可能需要将 Guest 配置导出为过去使用的 xm
格式。要实现此目的,请执行以下步骤:
首先将 Guest 配置导出到某个文件中:
>
virsh dumpxml guest_id > guest_cfg.xml然后将配置转换为
xm
格式:>
virsh domxml-to-native xen-xm guest_cfg.xml > guest_xm_cfg