共用方式為

教程:使用 Azure CLI 还原 VM

本教程介绍如何使用 CLI 还原完整的 VM。

Azure Backup创建存储在异地冗余恢复保管库中的恢复点。 从恢复点还原时,可以还原整个 VM,也可以还原单个文件。

有关使用 PowerShell 还原磁盘和创建恢复的 VM 的信息,请参阅使用 PowerShell 备份和还原Azure VM

现在,还可以使用 CLI 将备份内容直接还原到 VM(原始/新),而无需单独执行上述步骤。 有关详细信息,请参阅使用 CLI 将数据还原到虚拟机

先决条件

  • 如果希望在本地运行 CLI 引用命令,install Azure CLI。 如果在 Windows 或 macOS 上运行,请考虑在 Docker 容器中运行Azure CLI。 有关详细信息,请参阅 如何在 Docker 容器中运行Azure CLI

    • 如果使用本地安装,请使用 az login 命令登录到Azure CLI。 若要完成身份验证过程,请遵循终端中显示的步骤。 有关其他登录选项,请参阅Azure CLI登录。

    • 出现提示时,请在首次使用时安装 Azure CLI 扩展。 有关扩展的详细信息,请参阅 使用 Azure CLI 的扩展。

    • 运行 az version 以查找安装的版本和依赖库。 若要升级到最新版本,请运行 az upgrade

  • 本教程需要 2.0.18 或更高版本的Azure CLI。

  • 本教程需要一个受Azure Backup保护的 Linux VM。 若要模拟意外的 VM 删除和恢复过程,请从恢复点中的磁盘创建 VM。 如果需要使用 Azure Backup 保护的 Linux VM,请参阅 使用 CLI Azure备份虚拟机

Azure VM 的备份概述

Azure启动备份时,VM 上的备份扩展会生成时间点快照。 请求第一个备份时,将在 VM 上安装备份扩展。 如果 VM 在备份发生时未运行,Azure Backup还可以拍摄基础存储的快照。

默认情况下,Azure Backup采用文件系统一致的备份。 Azure Backup拍摄快照后,数据将传输到恢复服务保管库。 为了最大限度地提高效率,Azure Backup仅标识并传输自上一次备份以来已更改的数据块。

数据传输完成后,会删除快照并创建恢复点。

列出 VM 的可用恢复点

若要还原磁盘,请选择恢复点作为恢复数据的源。 由于默认策略每天创建一个恢复点并保留 30 天,因此,可以保留一组恢复点,以便可以选择一个特定的时点用于恢复。

若要查看可用恢复点的列表,请使用 az backup recoverypoint list 命令。 恢复点名称用于恢复磁盘。 在本教程中,我们希望最近的恢复点可用。 --query [0].name 参数可选择最近的恢复点名称,如下所示:

az backup recoverypoint list \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --backup-management-type AzureIaasVM \
    --container-name myVM \
    --item-name myVM \
    --query [0].name \
    --output tsv

还原 VM 磁盘

重要

强烈建议使用 Az CLI version 2.0.74 或更高版本,以享受快速还原的所有益处,包括托管磁盘还原。 最好始终使用最新版本。

托管磁盘还原

如果备份的 VM 具有托管磁盘,并且目的是从恢复点还原托管磁盘,则首先提供Azure存储帐户。 此存储帐户用于存储 VM 配置和部署模板,这两者稍后可用于从还原的磁盘部署 VM。 然后,还需要为托管磁盘提供一个目标资源组以进行还原。

  1. 若要创建存储帐户,请使用 az storage account create 命令。 存储帐户名称必须全部为小写,且全局唯一。 将 mystorageaccount 替换为您独特的名称:

    az storage account create \
        --resource-group myResourceGroup \
        --name mystorageaccount \
        --sku Standard_LRS
    
  2. 使用 az backup restore restore-disks 从恢复点还原磁盘。 将 mystorageaccount 替换为你在前一个命令中创建的存储帐户的名称。 将 myRecoveryPointName 替换为你从前面 az backup recoverypoint list 命令输出中获得的恢复点名称。 还需提供目标资源组,以便将托管磁盘还原至其中

    az backup restore restore-disks \
        --resource-group myResourceGroup \
        --vault-name myRecoveryServicesVault \
        --container-name myVM \
        --item-name myVM \
        --storage-account mystorageaccount \
        --rp-name myRecoveryPointName \
        --target-resource-group targetRG
    

    警告

    为托管磁盘还原提供 目标资源组 。 Azure Backup不支持将磁盘还原为非托管磁盘。 有关使用非托管磁盘的 VM 中的旧恢复点,请参阅 从使用非托管磁盘的 VM 还原旧恢复点

将磁盘还原到次要区域

当你在已保护 VM 的保管库上启用跨区域还原时,会将备份数据复制到次要区域。 可使用备份数据来执行还原操作。

若要将磁盘还原到次要区域,请在 --use-secondary-region 命令中使用 标志。 确保指定位于次要区域的目标存储帐户。

az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --storage-account targetStorageAccountID \
    --rp-name myRecoveryPointName \
    --target-resource-group targetRG
    --use-secondary-region

跨区域还原

可以在同一区域的任意可用区中还原Azure 区域固定的虚拟机

若要将 VM 还原到另一个可用区,请在 TargetZoneNumber 命令中指定 参数。

az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --storage-account targetStorageAccountID \
    --rp-name myRecoveryPointName \
    --target-resource-group targetRG
    --target-zone 3

仅在以下情况下支持跨区域还原:

  • 源 VM 已进行区域固定且未加密。
  • 恢复点仅存在于存储库层中。 不支持仅快照或快照和保管库层。
  • 恢复选项是创建新的 VM 或还原磁盘。 替换磁盘选项替换源数据;因此可用性区域选项不适用。
  • 当存储库的存储冗余为 ZRS 时,请在同一区域创建虚拟机或磁盘。 请注意,如果保管库的存储冗余为 GRS,则将不起作用,即使源 VM 进行了区域固定。
  • 如果为跨区域还原启用了保管库的存储冗余,并且配对区域支持区域,则在配对区域中创建 VM/磁盘。

非托管磁盘恢复

如果恢复点来自使用非托管磁盘的 VM,Azure Backup仅将这些磁盘还原为托管磁盘。 提供Azure存储帐户来存储 VM 配置、部署模板和临时 VHD 文件,并为还原的托管磁盘提供目标资源组。

在其他步骤中,还原的磁盘用于创建 VM。

  1. 若要创建存储帐户,请使用 az storage account create 命令。 存储帐户名称必须全部为小写,且全局唯一。 将 mystorageaccount 替换为您独特的名称:

    az storage account create \
        --resource-group myResourceGroup \
        --name mystorageaccount \
        --sku Standard_LRS
    
  2. 使用 az backup restore restore-disks 从恢复点还原磁盘。 将 mystorageaccount 替换为你在前一个命令中创建的存储帐户的名称。 将 myRecoveryPointName 替换为你从前面 az backup recoverypoint list 命令输出中获得的恢复点名称。 此外,为还原的托管磁盘提供目标资源组:

    az backup restore restore-disks \
        --resource-group myResourceGroup \
        --vault-name myRecoveryServicesVault \
        --container-name myVM \
        --item-name myVM \
        --storage-account mystorageaccount \
        --rp-name myRecoveryPointName \
        --target-resource-group targetRG
    

不支持还原到非托管磁盘。 对于使用非托管磁盘的 VM 中的旧恢复点,请按照 使用非托管磁盘的 VM 还原旧恢复点中的指南进行操作。

监视还原作业

若要监视还原作业的状态,请使用 az backup job list

az backup job list \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --output table

输出类似于以下示例,该示例显示还原作业处于“正在进行”状态:

Name      Operation        Status      Item Name    Start Time UTC       Duration
--------  ---------------  ----------  -----------  -------------------  --------------
7f2ad916  Restore          InProgress  myvm         2017-09-19T19:39:52  0:00:34.520850
a0a8e5e6  Backup           Completed   myvm         2017-09-19T03:09:21  0:15:26.155212
fe5d0414  ConfigureBackup  Completed   myvm         2017-09-19T03:03:57  0:00:31.191807

如果还原作业的“状态”报告为“完成”,则系统已将必要的信息(VM 配置和部署模板)还原到存储帐户 。

使用托管标识来还原磁盘

Azure Backup还允许在还原操作期间使用托管标识(MSI),以访问必须还原磁盘的存储帐户。 目前仅托管磁盘还原支持此选项。

如果要使用保管库的系统分配的托管标识来还原磁盘,请向 az backup restore restore-disks 命令传递附加标志 --mi-system-assigned。 如果要使用用户分配的托管标识,请传递参数 --mi-user-assigned,并将保管库托管标识的 Azure Resource Manager ID 作为该参数的值。 请参阅此文,了解如何为保管库启用托管标识。

从还原的磁盘创建 VM

最后一步是从还原的磁盘创建 VM。 可以使用下载到给定存储帐户的部署模板来创建 VM。

提取任务详细信息

生成的作业详细信息提供可以查询和部署的模板 URI。 使用 job show 命令可获取触发的已还原作业的更多详细信息。

az backup job show \
    -v myRecoveryServicesVault \
    -g myResourceGroup \
    -n 1fc2d55d-f0dc-4ca6-ad48-aca0fe5d0414

此查询的输出将提供所有详细信息,但我们只对存储帐户内容感兴趣。 可以使用 Azure CLI 的 查询功能 来获取相关详细信息

az backup job show \
    -v myRecoveryServicesVault \
    -g myResourceGroup \
    -n 1fc2d55d-f0dc-4ca6-ad48-aca0fe5d0414 \
    --query properties.extendedInfo.propertyBag

{
  "Config Blob Container Name": "myVM-daa1931199fd4a22ae601f46d8812276",
  "Config Blob Name": "config-myVM-1fc2d55d-f0dc-4ca6-ad48-aca0fe5d0414.json",
  "Config Blob Uri": "https://mystorageaccount.blob.core.chinacloudapi.cn/myVM-daa1931199fd4a22ae601f46d8812276/config-appvm8-1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json",
  "Job Type": "Recover disks",
  "Recovery point time ": "12/25/2019 10:07:11 PM",
  "Target Storage Account Name": "mystorageaccount",
  "Target resource group": "mystorageaccountRG",
  "Template Blob Uri": "https://mystorageaccount.blob.core.chinacloudapi.cn/myVM-daa1931199fd4a22ae601f46d8812276/azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json"
}

提取部署模板

模板不能直接访问,因为它在客户的存储帐户和给定容器下。 需要完整的 URL(以及临时 SAS 令牌)才能访问此模板。

首先,从作业详情中提取模板 blob URI。

az backup job show \
    -v myRecoveryServicesVault \
    -g myResourceGroup \
    -n 1fc2d55d-f0dc-4ca6-ad48-aca0fe5d0414 \
    --query properties.extendedInfo.propertyBag."""Template Blob Uri"""

"https://mystorageaccount.blob.core.chinacloudapi.cn/myVM-daa1931199fd4a22ae601f46d8812276/azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json"

模板 blob URI 将具备这种格式,并用于提取模板名称。

https://<storageAccountName.blob.core.chinacloudapi.cn>/<containerName>/<templateName>

因此,以上示例中的模板名称将是 azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json,而容器名称为 myVM-daa1931199fd4a22ae601f46d8812276

现在,请获取此容器和模板的 SAS 令牌(参阅此处了解详细信息)

expiretime=$(date -u -d '30 minutes' +%Y-%m-%dT%H:%MZ)
token=$(az storage blob generate-sas --account-name $storageAccountName --container-name $containerName --name $templateName --permissions r --expiry $expiretime --auth-mode login --as-user --https-only --output tsv)
url=$(az storage blob url --account-name $storageAccountName --container-name $containerName --name $templateName --output tsv --auth-mode login)

部署模板以创建 VM

现在部署模板来创建 VM,如此处所述。

az deployment group create \
  --resource-group ExampleGroup \
  --template-uri $url?$token

若要确认已从恢复的磁盘创建了 VM,请使用 az vm list 列出资源组中的 VM,如下所示:

az vm list --resource-group myResourceGroup --output table

使用 CLI 将数据还原到虚拟机

现在,无需执行多个步骤即可将数据直接还原到原始/备用 VM。

将数据还原到原始 VM

az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --restore-mode OriginalLocation 
    --storage-account mystorageaccount \
    --rp-name myRecoveryPointName \ 
Name      Operation        Status      Item Name    Start Time UTC       Duration
--------  ---------------  ----------  -----------  -------------------  --------------
7f2ad916  Restore          InProgress  myVM         2017-09-19T19:39:52  0:00:34.520850

最后一个命令触发原始位置还原操作,以还原现有 VM 中的数据。

将数据还原到新创建的 VM

az backup restore restore-disks \
    --resource-group myResourceGroup \
    --vault-name myRecoveryServicesVault \
    --container-name myVM \
    --item-name myVM \
    --restore-mode AlternateLocation \
    --storage-account mystorageaccount \

--target-resource-group "Target_RG" \
    --rp-name myRecoveryPointName \
    --target-vm-name "TargetVirtualMachineName" \
    --target-vnet-name "Target_VNet" \
    --target-vnet-resource-group "Target_VNet_RG" \
    --target-subnet-name "targetSubNet"
Name      Operation        Status      Item Name    Start Time UTC       Duration
--------  ---------------  ----------  -----------  -------------------  --------------
7f2ad916  Restore          InProgress  myVM         2017-09-19T19:39:52  0:00:34.520850

最后一个命令会触发备用位置还原操作,根据参数 TargetVMName、TargetVNetName、TargetVNetResourceGroup、TargetSubnetName 在 Target_RG 资源组中创建新 VM。 这可确保数据在所需的 VM、虚拟网络和子网中还原。

后续步骤

在本教程中,你从恢复点还原了一个磁盘,然后从该磁盘创建了一个 VM。 你已了解如何:

  • 列出和选择恢复点
  • 从恢复点还原磁盘
  • 从还原的磁盘创建 VM

请进入下一个教程了解如何从恢复点还原单个文件。