VM 问题故障排除
本节内容的主要用途在于当您看到不寻常的 VM 行为时帮助您解决问题。本部分内容还提供了应用程序日志所在位置以及其他有助于您的 XenServer 解决方案提供商跟踪并解决问题的信息。
重要:
请仅在您的 XenServer 解决方案提供商或技术支持团队的指导下利用本部分中的故障排除信息解决问题。
供应商更新:使用操作系统供应商提供的更新保持您的 VM 处于最新状态。供应商可能会提供针对 VM 崩溃和其他故障的修复。
VM 崩溃
如果遇到 VM 崩溃,内核故障转储可能会帮助您发现问题。请重现崩溃(如有可能)并按照此过程进行操作。请咨询来宾操作系统供应商,以对此问题进行进一步调查。
可以使用 actions-after-crash
参数来控制 VM 的故障转储行为。下面是可能的值:
值 | 说明 |
---|---|
preserve |
使 VM 处于暂停状态。(供分析使用) |
restart |
不进行核心转储,重新启动 VM。(这是默认值) |
destroy |
不进行核心转储,使 VM 处于停止状态。 |
要启用 VM 故障转储的保存功能,请执行以下操作:
-
在 XenServer 主机上,通过运行以下命令确定所需 VM 的 UUID:
xe vm-list name-label=<name> params=uuid --minimal <!--NeedCopy-->
-
使用
xe vm-param-set
更改actions-after-crash
值;例如,在 dom0 上运行以下命令:xe vm-param-set uuid=<vm_uuid> actions-after-crash=preserve <!--NeedCopy-->
-
使 VM 崩溃。
-
请在 dom0 上运行以下命令来确定 VM 的域 ID:
xe vm-param-get uuid=<vm_uuid> param-name=dom-id <!--NeedCopy-->
-
在 dom0 中运行
xl trigger
命令以触发崩溃:xl trigger <dom_id> nmi <!--NeedCopy-->
-
Windows VM 故障转储行为
默认情况下,Windows 故障转储放在 Windows VM 自身的 %SystemRoot%\Minidump
中。可以按照以下菜单路径配置 VM 转储级别:我的电脑 > 属性 > 高级 > 启动和故障恢复。
收集适用于 Windows 的 XenServer VM Tools 诊断
适用于 Windows 的 XenServer VM Tools 包括一个名为 xtbugtool
的诊断工具。此工具可作为 PowerShell 脚本 xtbugtool.ps1
使用。
此外,我们还提供了一个已弃用的批处理脚本版本 xtbugtool.bat
,用于在较旧的 Windows 版本上运行。在可能的情况下,我们建议您使用 PowerShell 版本。
以下操作系统支持此工具:
- Windows 10
- Windows 11
- Windows Server 2016
- Windows Server 2019
- Windows Server 2022
为了帮助诊断适用于 Windows 的 XenServer VM Tools 的任何问题,该脚本会从您的 Windows VM 中收集以下信息:
- 与适用于 Windows 的 XenServer VM Tools 安装相关的注册表项
- NFO 中的 MSinfo 和文本版本
- 系统、安全性和应用程序事件日志
- 以下文件和目录:
C:\ProgramData\Citrix
C:\ProgramData\Citrix Systems, Inc.
C:\ProgramData\XenServer
C:\Windows\Inf\setupapi.dev.log
C:\Windows\Inf\setupapi.setup.log
- 以下命令的输出:
- systeminfo
- tasklist /NH
- pnputil -e
- pnputil /enum-drivers
- winmgmt /verifyrepository
- ipconfig /all
运行 PowerShell 脚本
要运行 PowerShell 脚本,请执行以下步骤:
- 在您的 Windows VM 上,以管理员身份打开 PowerShell 终端。
- 在开始菜单中,键入
PowerShell
并选择以管理员身份运行。 - 将目录更改为
C:\Program Files\XenServer\XenTools\diagnostics
-
请使用以下命令运行该脚本:
xtbugtool.ps1 <path_to_output_directory>
如果您没有为输出路径提供值,该脚本将输出到当前目录。
该脚本将在您指定的输出目录中创建一个压缩文件,其名称采用的格式为 xtbugtool-yyyyMMddHHmmss.zip
。
运行批处理脚本(已弃用)
要运行批处理脚本,请执行以下步骤:
- 在您的 Windows VM 上,以管理员身份打开命令提示符。
- 在开始菜单中,键入
cmd
并选择以管理员身份运行。 - 将目录更改为
C:\Program Files\XenServer\XenTools\diagnostics
-
请使用以下命令运行该脚本:
xtbugtool.bat <path_to_output_directory>
该脚本将在您指定的输出目录中创建一个压缩文件,其名称采用的格式为 xt-bugtool-YYYY.MM.DD-xxxx.zip
。
UEFI 和安全引导问题
我如何更改启用了 UEFI 的 VM 上的 XenCenter 控制台的屏幕分辨率?
要更改启用了 UEFI 的 VM 上的 XenCenter 控制台的屏幕分辨率,请执行以下操作:
- 打开 Windows 设置
- 单击更新和安全按钮
- 在“恢复”选项卡下,按立即重新启动按钮。
- 导航到疑难解答 > 高级选项 > UEFI 固件设置。
- 按重新启动。重新启动过程中,UEFI 设置菜单将加载。
- 导航到设备管理器 > OVMF 平台配置。此操作将显示当前的屏幕分辨率。
- 按 Enter 键查看屏幕分辨率选项。
- 使用箭头键选择所需的屏幕分辨率,然后按 Enter 键。
- 按 F10 键保存更改并确认您的选择。
- 重新启动 VM 以使用更新后的屏幕分辨率查看 XenCenter 控制台。
为什么我不能创建 UEFI 安全引导 VM?
检查您的 VM 操作系统是否支持 UEFI 安全引导模式。以下操作系统支持安全引导:
- Windows 10(64 位)
- Windows 11(64 位)
- Windows Server 2016(64 位)
- Windows Server 2019(64 位)
- Windows Server 2022(64 位)
为什么我的 UEFI 安全引导 VM 无法启动?
如果您在 UEFI 安全引导 VM 的控制台上看到以下消息并在 XenCenter 中看到一条警报,则表示安全引导过程已失败且您的 VM 无法启动。
这通常是由于将未签名的驱动程序安装到 VM 中导致的。调查自上次成功安全引导以来已更新或安装的驱动程序。
可以禁用安全引导并在设置模式下启动 VM,以删除未签名的驱动程序。
重要:
在执行此操作之前,请通过创建快照来备份您的 VM。
要将 UEFI 安全引导 VM 更改为 UEFI 引导 VM,请在托管该 VM 的 XenServer 主机上运行以下命令:
varstore-sb-state <VM_UUID> setup
修复您的 VM 后,运行以下命令以重新启用安全引导:
varstore-sb-state <VM_UUID> user
安全引导是否导致我的 VM 出现问题?
要诊断 VM 上的问题是否是由于为 VM 启用了安全引导而导致的,请禁用安全引导并尝试重现该问题。
要禁用安全引导,请在托管 VM 的 XenServer 主机上运行以下命令:
varstore-sb-state <VM_UUID> setup
调试该问题后,可以运行以下命令以重新启用安全引导:
varstore-sb-state <VM_UUID> user
我如何在安全引导 Windows VM 上运行 Windows 调试?
您无法在安全引导 Windows VM 上运行 Windows 调试。要在 VM 上运行 Windows 调试,可以执行以下操作之一:
-
通过运行以下命令将 VM 切换到 UEFI 引导模式:
xe vm-param-set uuid=<UUID> platform:secureboot=false
重新启动 VM。
调试该问题后,可以运行以下命令以重新启用安全引导:
xe vm-param-set uuid=<UUID> platform:secureboot=auto
重新启动 VM。
-
通过在托管 VM 的 XenServer 主机上运行以下命令来禁用安全引导:
varstore-sb-state <VM_UUID> setup
调试该问题后,可以运行以下命令以重新启用安全引导:
varstore-sb-state <VM_UUID> user
为什么我的启用了 UEFI 的 Windows VM 上仅显示两个 NIC?
即使在创建启用了 UEFI 的 VM 时设置了两个以上的 NIC,当 VM 首次启动时,您也只能看到两个 NIC。在 VM 中安装适用于 Windows 的 XenServer VM Tools 后,此信息将正确显示。
为什么我的模拟设备显示为与 UEFI Windows VM 上的预期类型不同?
UEFI 安全引导 VM 将 NVME 和 E1000 用于模拟设备。但是,当 VM 首次启动时,模拟设备显示为不同类型。在 VM 中安装适用于 Windows 的 XenServer VM Tools 后,此信息将正确显示。
为什么我无法将模板从 BIOS 模式转换为 UEFI 或 UEFI 安全引导模式?
您只能从 XenServer 随附的模板创建启用了 UEFI 的 VM 模板。
请勿对其上安装了某些内容的模板或您从快照创建的模板使用 xe template-param-set
命令。无法更改这些快照的引导模式,如果您尝试更改引导模式,VM 将无法引导。
我如何检查 UEFI 和 UEFI 安全引导变量?
在托管 UEFI 或 UEFI 安全引导 VM 的 XenServer 主机上,运行以下命令:
varstore-ls
此命令列出了可用变量的 GUID 和名称。请在以下命令中使用 GUID 和名称:
varstore-get <VM\_ID> <GUID> <name> | hexdump -C
为什么我不能在安全引导 VM 中使用“测试”驱动程序?
如果您还与第三方合作调试和修复其 UEFI 安全引导 VM 中的问题,第三方可能会提供未签名的驱动程序用于测试或验证目的。这些驱动程序无法在 UEFI 安全引导 VM 中运行。
向第三方申请签名的驱动程序。或者您可以将自己的 UEFI 安全引导 VM 切换到设置模式,以使用未签名的驱动程序运行。
xentop 实用程序
xentop 实用程序以半图形格式显示有关 XenServer 系统和正在运行的域的实时信息。可以使用此工具调查与 VM 关联的域的状态。
要运行 xentop 实用程序,请执行以下操作:
- 通过 SSH 连接到 XenServer 主机,或者在 XenCenter 中转到主机的控制台选项卡。
-
运行以下命令:
xentop
控制台将在表中显示有关该主机的信息。信息会定期刷新。
输出列
xentop 实用程序在控制台中显示以下列:
- NAME(名称)- 域名。“Domain-0”是 XenServer 控制域。其他域属于 VM。
-
STATE(状态)- 域的状态。该状态可以具有以下值之一:
- d - 域即将消失
- s - 域正在关闭
- b - 域已锁定
- c - 域已崩溃
- p - 域已暂停
- r - 域正在其中一个 CPU 上主动运行
- CPU (秒) - 域的 CPU 使用量(以秒为单位)
- CPU (%) - 域的 CPU 使用率百分比
- MEM (k) - 域的当前内存使用量(以 KiB 为单位)
- MEM (%) - 域的当前内存使用率百分比
- MAXMEM (k) - 以 KiB 为单位的最大域内存使用量
- MAXMEM (%) - 以百分比表示的最大域内存使用率
- VCPUS - 分配给域的虚拟 CPU 数量
- NETS - 域使用的虚拟网络数量
- NETTX (k) - 网络传输总量(以 KiB 为单位)
- NETRX (k) - 网络接收总量(以 KiB 为单位)
- VBDS - 虚拟块设备的数量
- VBD_OO - VBD 遇到“超出请求范围”错误的总次数。发生这种情况时,VBD 的 I/O 请求会延迟。
- VBD_RD - VBD 读取请求总数
- VBD_WR - VBD 写入请求总数
- VBD_RSECT - VBD 读取扇区
- VBD_WSECT - VBD 写入扇区
xentop 参数
可以使用以下参数配置 xentop 命令的输出:
- -h - 输出 xentop 命令的命令帮助。
- -V - 输出 xentop 命令的版本。
- -d 或 –delay=SECONDS - 设置两次更新之间的秒数
- -n 或 –networks - 输出与域关联的每个 VIF 网络的数据
- -x 或 –vbds - 输出与域关联的每个 VBD 块设备的数据
- -r 或 repeat-header - 在每个域之前重复表格标题
- -v 或 –vcpus - 输出与域关联的每个 vCPU 的数据
- -i 或 –iterations - 在 xentop 退出之前要显示的迭代次数(更新)
- -f 或 –full-name - 输出完整的域名而非截断的名称
您也可以在 xentop 实用程序中配置其中的大多数参数。