将非托管磁盘附加到 VM 进行脱机修复

适用于:✔️ Windows VM

Windows 虚拟机(VM)的一些故障排除方案(例如 VM 未启动时),需要脱机修复其 OS 磁盘。 本文介绍如何在未托管失败的 OS 磁盘时执行此类脱机修复。

确定 OS 磁盘是托管磁盘还是非托管磁盘

Azure 门户

打开 VM 的“概述”边栏选项卡。 如果 OS 磁盘不受托管,则信息性横幅指示 VM 未使用托管磁盘。

Azure 门户中横幅消息的屏幕截图,指示 V M 未使用托管磁盘。

此外, 如果磁盘为非托管磁盘,OS 磁盘的“概述 ”边栏选项卡会将“(非托管)”追加到磁盘名称,如下所示:

屏幕截图显示追加到Azure 门户中 V M 名称的非托管单词。

如果磁盘是托管的,OS 磁盘的“概述”边栏选项卡将显示“ 托管依据 ”字段,如下所示:

Azure 门户中磁盘的概述边栏选项卡的屏幕截图,指示磁盘由 V M 管理。

PowerShell

可以通过输入以下命令来验证 OS 磁盘是否不受管理。 (请务必将“MyResourceGroup”替换为资源组的名称,将“MyVM”替换为 VM 的名称。

(get-azvm -ResourceGroupName MyResourceGroup -Name MyVM).StorageProfile.OsDisk

如果磁盘不受托管,则 ManagedDisk 旁边的输出中不会显示任何值,如以下示例所示:

OsType                  : Windows
EncryptionSettings      :
Name                    : MyVM-Disk1
Vhd                     : Microsoft.Azure.Management.Compute.Models.VirtualHardDisk
Image                   :
Caching                 : ReadWrite
WriteAcceleratorEnabled :
DiffDiskSettings        :
CreateOption            : FromImage
DiskSizeGB              : 127
ManagedDisk             :

如果磁盘是托管磁盘,则会在 ManagedDisk 旁边的输出中看到一个值,如以下示例所示:

OsType                  : Windows
EncryptionSettings      :
Name                    : MyVM2-Disk1
Vhd                     :
Image                   :
Caching                 : ReadWrite
WriteAcceleratorEnabled :
DiffDiskSettings        :
CreateOption            : FromImage
DiskSizeGB              :
ManagedDisk             : Microsoft.Azure.Management.Compute.Models.ManagedDiskParameters

Azure 命令行接口 (Azure CLI)

可以将 az vm show 命令与追加查询 “storageProfile.osDisk.managedDisk” 一起使用,以确定磁盘是否具有托管磁盘,如以下示例所示:

az vm show -n MyVM -g MyResourceGroup --query "storageProfile.osDisk.managedDisk"

如果磁盘不受管理,该命令将不生成任何输出。 如果磁盘是托管的,它将生成输出,如以下示例所示:

{
  "diskEncryptionSet": null,
  "id": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/MyResourceGroup/providers/Microsoft.Compute/disks/MyVm_OsDisk_1",
  "resourceGroup": "MyResourceGroup",
  "storageAccountType": null
}

创建附加到源(失败)VM 的非托管 OS 磁盘的副本

  1. 在Azure 门户中,停止其 OS 磁盘为非托管的源 VM。

  2. 在本地计算机上,下载、安装,然后启动Microsoft Azure 存储资源管理器。 出现提示时提供 Azure 凭据。

  3. 在存储资源管理器导航窗格中,展开相应的订阅。

  4. 选择 VHD 所在的存储帐户,然后选择磁盘的相应容器。 默认情况下,非托管 OS 磁盘存储在 vhds(租用)容器中

    Azure 存储资源管理器的屏幕截图,其中存储帐户容器和 v h d 租约容器均在导航树中突出显示。

  5. 在右窗格中,选择附加到要修复的源 VM 的 VHD,然后选择顶部的“ 复制 ”。 请注意,复制的磁盘只能粘贴到不同的 Blob 容器中。

    Azure 存储资源管理器的屏幕截图,其中显示了已选择的磁盘,其中突出显示了“复制”按钮。

  6. 通过在导航窗格中右键单击 Blob 容器 ,然后选择“创建 Blob 容器” 来创建新的 Blob 容器。 为新 Blob 容器分配所选名称,例如“磁盘副本”。

    Azure 存储资源管理器的 Sreenshot,其中显示了导航菜单中 Blob 容器的快捷菜单,其中突出显示了“创建 Blob 容器”。

  7. 选择 “粘贴” ,将复制的磁盘粘贴到新的 Blob 容器中。

    Azure 存储资源管理器的屏幕截图,其中突出显示了“粘贴”按钮。

使用非托管 OS 磁盘创建修复 VM

  1. 在Azure 门户中,开始创建基于 Windows Server 2019 的新 VM 的过程。 此新 VM 将充当修复 VM,其自己的 OS 磁盘必须是非托管的。

  2. 在“创建虚拟机”向导的“基本信息”页上,选择“可用性选项”列表中不需要基础结构冗余。

    “创建虚拟机向导”的“基本信息”页的屏幕截图,其中显示了为不需要基础结构选择的选项。

  3. 在“磁盘”页上,展开“数据磁盘下方的高级”,然后清除“使用托管磁盘”复选框。 为非托管 OS 磁盘选择存储帐户。 请勿选择附加现有磁盘。 “创建虚拟机”向导的“磁盘”页的屏幕截图,其中清除了“使用托管磁盘”选项。如果无法取消选择“使用托管磁盘”选项,请尝试使用以下命令创建 VM:

    ## Get the subnet ID of the VM
    
    $SubnetID = az network vnet subnet show --resource-group <RG name> --name <Subnet name> --vnet-name <VNet name> --query id -o tsv
    
    ## Create a VM with the unmanaged disk
    
    az vm create \
        --resource-group <RG name>\
        --name <VM name>\
        --image <Image name>\
        --location <location of the VM>\
        --admin-username <Admin name>\
        --subnet $SubnetID\
        --size <VM size>\
        --use-unmanaged-disk  
    
  4. 通过指定适合组织的配置详细信息来完成“创建虚拟机”向导。

将非托管磁盘的副本附加到修复 VM

  1. 在Azure 门户中,打开刚创建的新修复 VM 的“磁盘”边栏选项卡。

  2. 选择“ + 添加数据磁盘”。

    Azure 门户中修复 VM 的“磁盘”边栏选项卡的屏幕截图,其中突出显示了“添加数据磁盘”按钮。

  3. “附加非托管磁盘 ”页上,选择“ 现有 Blob ”作为 源类型

    “附加非托管磁盘”窗口的屏幕截图,其中选择了现有的 Blob 选项。

  4. 在源 Blob,选择“浏览,然后浏览以选择之前创建的 OS 磁盘副本。

    附加非托管磁盘窗口的屏幕截图,其中突出显示了“浏览”按钮。

    磁盘复制容器的屏幕截图,其中选择了磁盘,并突出显示了“选择”按钮。

  5. “附加非托管磁盘 ”页上,接受默认存储 Blob 名称,然后选择“ 确定”。

  6. 在新 修复 VM 的“磁盘 ”边栏选项卡上,选择“ 保存”。

    “磁盘”边栏选项卡的屏幕截图,其中突出显示了“保存”按钮。

如果磁盘已加密,请解锁磁盘

如果磁盘使用 Azure 磁盘加密(ADE)加密,则需要解锁磁盘,然后才能对其进行修复。 为此,请使用 Resolution #3 中所述 的步骤:手动方法解锁修复 VM 上的加密磁盘。

可以使用此处的过程确定磁盘是否已加密: 确认磁盘上已启用 ADE

替换源 VM 上的 OS 磁盘

完成磁盘修复后,请执行以下步骤:

  1. 使用 Azure CLI 或 PowerShell 分离源 VM OS 磁盘。

    Azure CLI

    使用 az vm unmanaged-disk detach 命令,如以下示例所示:

    az vm unmanaged-disk detach -g MyResourceGroup --vm-name MyVm -n disk_name
    

    PowerShell

    在 Azure Cloud Shell 中输入以下命令,一次输入以下命令:

    $VirtualMachine = Get-AzVM -ResourceGroupName "MyResourceGroup" -Name "MyVm" 
    Remove-AzVMDataDisk -VM $VirtualMachine -Name "disk_name"
    Update-AzVM -ResourceGroupName "MyResourceGroup" -VM $VirtualMachine
    

    分离磁盘后,可以替换源 VM 上的 OS 磁盘。

  2. 当提示返回时,打开文本编辑器(如记事本)并记录以下值:

    • 订阅 ID ($subscriptionID):与 Azure 订阅关联的 32 位全局唯一标识符(GUID)。
    • 资源组名称($rgname):源 VM 的资源组。
    • VM 名称($vmname):源(失败)VM 的名称。
    • OS 磁盘 VHD URI ($vhduri):刚从修复 VM 分离的非托管 OS 磁盘副本的 URI。 (可以通过右键单击存储资源管理器中的磁盘并选择“复制 URL来复制此值。
  3. 在 Azure Cloud Shell 中的 PowerShell 命令提示符处输入以下命令,一次一个。 在每个命令中,将值“订阅 ID”、“资源组名称”、“VM 名称”和“OS 磁盘 VHD URI”替换为刚刚从环境记录的相应值。

    $subscriptionID = "Subscription ID"
    $rgname = "Resource group name"
    $vmname = "VM Name"
    $vhduri = "OS disk VHD URI"
    #Add-AzAccount
    Select-AzSubscription -SubscriptionID $subscriptionID
    Set-AzContext -SubscriptionID $subscriptionID
    $vm = Get-AzVM -ResourceGroupName $rgname -Name $vmname
    $vm.StorageProfile.OsDisk.Vhd.Uri = $vhduri
    Update-AzVM -ResourceGroupName $rgname -VM $vm       
    

    操作完成后,应会看到以下输出:

    RequestId IsSuccessStatusCode StatusCode ReasonPhrase
    --------- ------------------- ---------- ------------
                             True         OK OK
    
  4. 在Azure 门户中,打开 VM 上的“磁盘”边栏选项卡。 选择 OS 磁盘,然后验证 VHD URI 是否与上一步中提供的值匹配。

后续步骤

若要阅读 ADE 的概述,请参阅“为 Windows VM 启用Azure 磁盘加密”。 有关可用于管理非托管磁盘的命令的详细信息,请参阅 az vm unmanaged-disk

联系我们寻求帮助

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