Hyper-V与虚拟化

排查 Hyper-V 上的 Linux 虚拟机问题 - Windows Server

· 52CE 我爱测

本文提供了在Microsoft Hyper-V 环境中部署和管理 Linux 虚拟机(VM)时诊断和管理常见问题的综合指南。 这些问题可能包括安装挑战、实时迁移失败、时间同步问题、管理控制台中缺少 VM 信息、中央处理单元(CPU)兼容性差异以及许可或支持查询。 解决这些问题对于确保 linux 工作负载在 Hyper-V 基础结构中的可靠性、兼容性和最佳性能至关重要。 Hyper-V 上的 Linux VM 中观察到的常见问题 - VM 安装和启动问题:

本文提供了在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 指令而失败。
  • 频繁的 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)

  1. 查看 VM 配置:

    • 禁用安全启动或将其设置为使用正确的模板(例如, MicrosoftUEFICertificateAuthority 对于支持的 Linux 分发版)。
    • 确保 VM 生成符合 Linux 分发的要求。
  2. 调整 VM 设置:

    • 将固件设置为从正确的设备(DVD 或 ISO)启动。
    • 删除不必要的硬件,例如旧网络适配器。
  3. 进行必要的更改后,请重试 OS 安装。

  4. 如果问题仍然存在,请在第 1 代 VM 上安装 OS。

解决实时迁移和状态文件错误

  1. 检查事件日志和错误代码。 查看事件 ID 21502 和错误代码(如0xC0370027、0x80048054或0x80070037)的 Hyper-V 日志。

  2. 检查 VM 状态文件。 确保 .vmrs 可在源节点和目标节点上访问文件和 .vmcx 文件。

  3. 创建新的 VM:

    1. 关闭受影响的 VM。
    2. 创建新的 VM 并附加原始 OS/数据磁盘。 将 CPU 和 RAM 设置与原始配置匹配。
  4. 测试迁移。 使用新 VM 执行实时迁移。

  5. 监视重复执行。 如果问题得到解决,请继续监视 VM。 如果问题仍然存在,请升级以供进一步的磁盘或文件系统调查。

解决管理控制台和集成数据问题

  1. 验证集成服务:

    • lsmod | grep hv使用来宾 OS 中的命令确认 Hyper-V 模块已加载。
    • 确保已安装最新的 Linux 集成服务。
  2. 启用数据交换。 在 VM 设置中,确保在集成服务下启用“Data Exchange”。

  3. 更新管理控制台。 将最新更新应用于 Hyper-V、SCVMM 或其他管理平台。

  4. 更正 SCVMM 数据库(如果需要):

    1. 备份 SCVMM 数据库。
    2. 使用 SQL 查询更新缺少的 VM 名称或 IP 地址。

解决时间同步问题

  1. 更新集成服务。 确保来宾 OS 已安装最新的 Linux 集成服务。
  2. 验证时间同步设置。 在 Hyper-V 管理器中,确保启用“时间同步”。
  3. 调整来宾 OS 设置。 用于 timedatectl 正确配置系统时钟和时区。 例如,timedatectl set-timezone UTC。
  4. 延迟应用程序启动。 对于时间敏感型应用程序,请在同步完成之前延迟启动。

解决 CPU 功能/指令集问题

  1. 在 Hyper-V Manager 或 PowerShell 中禁用 CPU 兼容性模式:

    Set-VMProcessor -VMName -CompatibilityForMigrationEnabled $false
    
  2. 在来宾 OS 中验证。 运行 cat /proc/cpuinfo 以确认存在所需的 CPU 标志。

  3. 重启 VM 以应用更改。

解决频繁的 VM 断开连接问题

  1. 检查网络和 VM 运行状况。 验证网络适配器是否已正确配置并正常运行。
  2. 查看 VM 克隆做法。 确保克隆后唯一的 MAC 地址和适当的清理。
  3. 调整安全启动设置。 根据 Linux 分发的要求启用或禁用安全启动。
  4. 请联系 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 分发供应商获取进一步帮助。

资料来源与适用范围

资料来源
微软官方中文故障文档
适用范围
适用于 Linux 2 的 Windows 子系统(WSL2)支持和嵌套虚拟化要求的问题。
内容语言
中文;命令、路径和错误标识保留技术原文
本地收录日期
2026-10-26
授权说明
CC BY 4.0

正文与所需资源由本站本地存储。查看来源及更新记录 ↗

请按适用版本和实际日志确认原因;本站没有对每一种系统或设备逐项执行文中的操作。