使用 Azure 虚拟机修复命令修复 Windows VM

如果 Azure 中的 Windows 虚拟机 (VM) 遇到启动或磁盘错误,则可能需要脱机修复磁盘。 常见示例是应用程序更新失败,导致 VM 无法成功启动。 本文详细介绍了如何使用 Azure VM 修复命令自动将损坏的 OS 磁盘附加到另一个 Windows VM,以便进行脱机修复。 通过此过程,如果磁盘使用 Azure 磁盘加密进行加密,则故障的 OS 磁盘将自动解锁第二个 VM(称为修复 VM)。 将故障磁盘附加到修复 VM 后,可以修复任何错误,然后使用修复的磁盘重新生成原始 VM。

重要

  • 本文中的脚本仅适用于使用 Azure 资源管理器的 VM。
  • 运行脚本需要从 VM (端口 443) 建立出站连接。
  • 一次只能运行一个脚本。
  • 无法取消正在运行的脚本。
  • 脚本可以运行的最长时间为 90 分钟,之后将超时。
  • 请勿修改在修复 VM 上创建的标记。 标记是还原命令正常运行所必需的。
  • 对于使用 Azure 磁盘加密的 VM,仅支持使用单通道加密 (使用 KEK) 加密的托管磁盘。

修复过程概述

现在可以使用 Azure VM 修复命令更改 VM 的 OS 磁盘,并且不再需要删除并重新创建 VM。

按照以下步骤排查 VM 问题:

  1. 启动 Azure Cloud Shell
  2. 运行 az extension add/update。
  3. 运行 az vm repair create。
  4. 运行 az vm repair run,或执行缓解步骤。
  5. 运行 az vm repair restore。

若要查看所有可用的 VM 修复命令和参数,请参阅 az vm repair

若要运行命令,需要一个可在订阅中创建以下类型资源的角色:

  • 资源组
  • 虚拟机
  • 资源标记
  • 虚拟网络
  • 网络安全组
  • 网络接口
  • 磁盘
  • 公共 IP 地址 (可选)

修复过程示例

  1. 启动 Azure Cloud Shell

    Azure Cloud Shell是一个免费的交互式 shell,可用于运行本文中的步骤。 它包括预安装并配置为与帐户一起使用的常见 Azure 工具。 如果运行的脚本需要超过 20 分钟, (例如: win-sfc-sf-corruption 脚本) ,则可能更倾向于在本地运行命令。 若要在本地运行命令,需要 Azure CLI 版本 2.0.67 或更高版本。 运行 az --version 以查找版本。 如果需要安装或升级 Azure CLI,请参阅 安装 Azure CLI

    若要打开Cloud Shell,请选择代码块右上角的“试用”。 还可以通过访问 https://shell.azure.com在单独的浏览器选项卡中打开Cloud Shell。

    选择“复制”以复制代码块,然后将代码粘贴到Cloud Shell,然后选择 Enter 运行它。

    如果想要在本地安装并使用 CLI,本快速入门需要 Azure CLI 2.0.67 或更高版本。 运行 az --version 以查找版本。 如果需要安装或升级 Azure CLI,请参阅 安装 Azure CLI

    如果需要使用与当前登录Azure 门户不同的帐户登录到Cloud Shell,可以使用 az loginaz login reference。 若要在与帐户关联的订阅之间切换,可以使用 az account set --subscriptionaz account set reference

  2. 如果这是你第一次使用 az vm repair 命令,请添加 vm-repair CLI 扩展。

    az extension add -n vm-repair
    

    如果以前使用 az vm repair 过命令,请对 vm 修复扩展应用任何更新。

    az extension update -n vm-repair
    
  3. 运行 az vm repair create。 此命令将为非正常运行的 VM 创建 OS 磁盘副本,在新资源组中创建修复 VM,并附加 OS 磁盘副本。 修复 VM 的大小和区域将与指定的非正常运行 VM 相同。 在所有步骤中使用的资源组和 VM 名称将用于非正常运行的 VM。 如果 VM 使用 Azure 磁盘加密,请使用 --unlock-encrypted-vm 解锁加密磁盘,以便在附加到修复 VM 时可以访问该磁盘。 有关详细信息,请参阅 确认磁盘上已启用 ADE。 如果需要对嵌套 Hyper-V 环境中的 VM 进行故障排除,请使用 --enable-nested ,修复 VM 将创建启用 Hyper-V 角色,并使用 OS 磁盘副本创建嵌套 VM。

重要

运行和还原命令将要求使用创建命令中使用的相同大小写输入所有输入,记下或引用修复 VM 上的标记以查看使用的内容。

修复 VM 示例

az vm repair create -g MyResourceGroup -n myVM --repair-username username --repair-password 'password!234' --verbose

使用嵌套 Hyper-V 修复 VM 示例

az vm repair create -g MyResourceGroup -n myVM --repair-username username --repair-password 'password!234' --enable-nested --verbose
  1. 运行 az vm repair run。 此命令将通过修复 VM 在附加的磁盘上运行指定的修复脚本。 如果使用的故障排除指南指定了 run-id,请在此处使用它。 否则,可以使用 az vm repair list-scripts 查看可用的修复脚本。 此处使用的资源组和 VM 名称适用于步骤 3 中使用的非正常运行 VM。 有关修复脚本的其他信息可以在 修复脚本库中找到。

    az vm repair run -g MyResourceGroup -n MyVM --run-on-repair --run-id win-hello-world --verbose
    

    (可选)可以使用修复 VM 执行任何所需的手动缓解步骤,然后继续执行步骤 5。

  2. 运行 az vm repair restore。 此命令会将修复的 OS 磁盘与 VM 的原始 OS 磁盘交换。 此处使用的资源组和 VM 名称适用于步骤 3 中使用的非正常运行 VM。

    az vm repair restore -g MyResourceGroup -n MyVM --verbose
    

验证并启用启动诊断

以下示例在名为 的资源组myResourceGroup中名为 myVMDeployed 的 VM 上启用诊断扩展:

Azure CLI

az vm boot-diagnostics enable --name myVMDeployed --resource-group myResourceGroup --storage https://mystor.blob.core.windows.net/

后续步骤

联系我们寻求帮助

如果你有任何疑问或需要帮助,请创建支持请求联系 Azure 社区支持。 还可以向 Azure 反馈社区提交产品反馈。