本文提供了在Microsoft Hyper-V 环境中部署和管理 Linux 虚拟机(VM)时诊断和管理常见问题的综合指南。
这些问题可能包括安装挑战、实时迁移失败、时间同步问题、管理控制台中缺少 VM 信息、中央处理单元(CPU)兼容性差异以及许可或支持查询。 解决这些问题对于确保 linux 工作负载在 Hyper-V 基础结构中的可靠性、兼容性和最佳性能至关重要。
Hyper-V 上的 Linux VM 中观察到的常见问题
-
VM 安装和启动问题:
- 安装 Linux作系统(OS),例如 SUSE Linux Enterprise Server (SLES) 15 SP5,在第 2 代 VM 上停止或失败,但在第 1 代 VM 上成功。
- 将显示安装菜单,但该过程无法完成。
-
实时迁移和 VM 状态错误:
- 特定的基于 Ubuntu 或供应商提供的 Linux VM 无法迁移,错误发生在 58% 到 68% 完成之间。
- 错误消息:“无法还原此虚拟机,因为无法读取保存的状态数据。 删除保存的状态数据,然后尝试启动虚拟机。 (0xC0370027)。”
- Hyper-V 日志中的事件 ID 21502。
- 其他错误代码0x80048054和0x80070037。
-
管理控制台和集成数据问题:
- Linux VM IP 地址和主机名在 Hyper-V 管理器、System Center Virtual Machine Manager(SCVMM)或其他管理控制台中不可见。
- 集成服务已安装并配置,但数据仍缺失。
-
时间同步问题:
- Linux VM 系统时间不会与 Hyper-V 主机同步。
- 在 VM 的实时时钟(RTC)上观察到时区不一致,从而导致应用程序时间偏移。
-
CPU 功能/指令集问题:
- 缺少 CPU 标志,例如
sse4_2Linux VM(cat /proc/cpuinfo)。 - 应用程序或工具由于缺少 CPU 指令而失败。
- 缺少 CPU 标志,例如
-
频繁的 VM 断开连接:
- Linux VM(尤其是基于 Red Hat Enterprise Linux(RHEL)的 VM 经常与 Hyper-V 控制台断开连接。
- 通过 Hyper-V 管理器进行连接时会显示错误消息。
-
许可、支持和功能查询:
- 有关在 Windows Server Standard/Datacenter 上许可非 Windows作系统的问题。
- 有关对旧版 Linux 或 Oracle 数据库工作负荷的支持的查询。
- 有关适用于 Linux 2 的 Windows 子系统(WSL2)支持和嵌套虚拟化要求的问题。
按问题类型分类的根本原因
-
配置和兼容性:
- 第 2 代 VM 不兼容:某些 Linux 分发版需要特定的第 2 代 Hyper-V 设置(例如安全启动或 UEFI),以便成功安装。
- 不支持的 Linux 版本:早期或未列出的 Linux 版本可能不适用于 Hyper-V 集成组件,从而导致数据丢失或作失败。
- 许可和支持差距:文档可能未涵盖 OS/分发/版本兼容性的所有方案。
-
集成服务和 VM 数据报告:
- 缺少或配置错误的集成服务:如果没有适当的配置,Linux 集成服务可能无法报告 IP 地址和主机名等数据。
- 控制台/SCVMM 同步问题:同步延迟或数据库错误可能会阻止显示更新的 VM 数据。
-
文件/状态损坏和迁移失败:
- 损坏的 VMRS 文件:如果 VM 保存的状态或运行时文件已损坏,则可能会出现迁移问题。
- 文件权限问题:与 VM 相关的权限不足或锁定的文件可能会阻止迁移或还原。
-
来宾 OS 设置和平台差异:
- RTC 和时区处理:Hyper-V 在没有时区元数据的情况下向来宾 RTC 提供系统时间;来宾 OS 设置确定解释。
- CPU 兼容性模式:启用此模式会限制来宾的可用 CPU 指令,从而导致功能差距。
-
外部或不支持的方案:
- 特定于应用程序/OS 的问题:来宾 OS 或应用程序(如 Oracle 数据库)中的问题需要供应商支持。
- 功能或环境限制:高级功能(如嵌套虚拟化和 WSL2)需要特定的 VM 配置或硬件。
解决 VM 安装问题(第 2 代 Linux VM)
-
查看 VM 配置:
- 禁用安全启动或将其设置为使用正确的模板(例如,
MicrosoftUEFICertificateAuthority对于支持的 Linux 分发版)。 - 确保 VM 生成符合 Linux 分发的要求。
- 禁用安全启动或将其设置为使用正确的模板(例如,
-
调整 VM 设置:
- 将固件设置为从正确的设备(DVD 或 ISO)启动。
- 删除不必要的硬件,例如旧网络适配器。
-
进行必要的更改后,请重试 OS 安装。
-
如果问题仍然存在,请在第 1 代 VM 上安装 OS。
解决实时迁移和状态文件错误
-
检查事件日志和错误代码。 查看事件 ID 21502 和错误代码(如0xC0370027、0x80048054或0x80070037)的 Hyper-V 日志。
-
检查 VM 状态文件。 确保
.vmrs可在源节点和目标节点上访问文件和.vmcx文件。 -
创建新的 VM:
- 关闭受影响的 VM。
- 创建新的 VM 并附加原始 OS/数据磁盘。 将 CPU 和 RAM 设置与原始配置匹配。
-
测试迁移。 使用新 VM 执行实时迁移。
-
监视重复执行。 如果问题得到解决,请继续监视 VM。 如果问题仍然存在,请升级以供进一步的磁盘或文件系统调查。
解决管理控制台和集成数据问题
-
验证集成服务:
lsmod | grep hv使用来宾 OS 中的命令确认 Hyper-V 模块已加载。- 确保已安装最新的 Linux 集成服务。
-
启用数据交换。 在 VM 设置中,确保在集成服务下启用“Data Exchange”。
-
更新管理控制台。 将最新更新应用于 Hyper-V、SCVMM 或其他管理平台。
-
更正 SCVMM 数据库(如果需要):
- 备份 SCVMM 数据库。
- 使用 SQL 查询更新缺少的 VM 名称或 IP 地址。
解决时间同步问题
- 更新集成服务。 确保来宾 OS 已安装最新的 Linux 集成服务。
- 验证时间同步设置。 在 Hyper-V 管理器中,确保启用“时间同步”。
- 调整来宾 OS 设置。 用于
timedatectl正确配置系统时钟和时区。 例如,timedatectl set-timezone UTC。 - 延迟应用程序启动。 对于时间敏感型应用程序,请在同步完成之前延迟启动。
解决 CPU 功能/指令集问题
-
在 Hyper-V Manager 或 PowerShell 中禁用 CPU 兼容性模式:
Set-VMProcessor -VMName -CompatibilityForMigrationEnabled $false -
在来宾 OS 中验证。 运行
cat /proc/cpuinfo以确认存在所需的 CPU 标志。 -
重启 VM 以应用更改。
解决频繁的 VM 断开连接问题
- 检查网络和 VM 运行状况。 验证网络适配器是否已正确配置并正常运行。
- 查看 VM 克隆做法。 确保克隆后唯一的 MAC 地址和适当的清理。
- 调整安全启动设置。 根据 Linux 分发的要求启用或禁用安全启动。
- 请联系 Linux 供应商支持人员。 将保留的问题上报给 Linux 分发供应商。
解决许可、支持和功能查询问题
- 许可问题:有关 Windows Server 上许可非 Windows作系统的查询,请参阅Microsoft许可专家。
- 旧版 OS 或不支持的功能:有关旧版 Linux 版本、Oracle 数据库或 WSL2 支持的相关供应商。
- 嵌套虚拟化:确认 VM 大小或硬件支持嵌套虚拟化。
数据收集
若要帮助进行故障排除,请收集以下日志和信息:
-
VML 跟踪(用于实时迁移):
VmlTrace.exe /m a /f all all VmlTrace.exe stop -
NetSH 网络跟踪:
netsh trace start capture=yes tracefile=network-trace.etl overwrite=yes persistent=yes netsh trace stop -
集成服务检查:
Get-VMIntegrationService -VMName -
CPU 验证:
cat /proc/cpuinfo -
时间设置(Linux):
timedatectl status timedatectl set-timezone
References
如果执行这些步骤后问题仍然存在,请收集相关日志,并联系 Microsoft 支持部门或 Linux 分发供应商获取进一步帮助。