教學:用 Azure CLI 還原虛擬機

本教學說明如何使用 CLI 還原完整的虛擬機。

Azure 備份建立儲存在異地備援復原保存庫的復原點。 當您從復原點還原時,可以還原整個 VM 或個別檔案。

如需使用 PowerShell 還原磁碟及建立已復原 VM 的相關資訊,請參閱使用 PowerShell 備份及還原 Azure VM

現在,您也可以使用 CLI 將備份內容直接還原至 VM (原始/新的),而不需分別執行上述步驟。 如需詳細資訊,請參閱使用 CLI 將資料還原至虛擬機器

必要條件

  • 本教學課程需要 2.0.18 版或更新版本的 Azure CLI。 如果您是使用 Azure Cloud Shell,就已安裝最新版本。

  • 本教學課程需要已使用 Azure 備份保護的 Linux VM。 若要模擬意外刪除 VM 和復原程序,您可以在復原點從磁碟建立 VM。 如果您需要已使用 Azure 備份保護的 Linux VM,請參閱使用 CLI 在 Azure 中備份虛擬機器

Azure 虛擬機器的備份概述

當 Azure 起始備份時,VM 上的備份擴充功能會建立時間點快照集。 此備份擴充功能會在要求第一個備份時安裝在 VM 上。 如果進行備份時 VM 不在執行中,Azure 備份也可以建立基礎儲存體的快照集。

根據預設,Azure 備份會執行檔案系統一致的備份。 Azure 備份建立快照集之後,資料會傳輸至復原服務保存庫。 為了能更有效率,Azure 備份只會找出並傳輸自上次備份之後有變更的資料區塊。

資料傳輸完畢後,系統會移除快照集並建立復原點。

列出虛擬機可用的復原點

若要還原磁碟,您可選取復原點作為復原資料的來源。 由於預設原則會每天建立復原點並保留 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 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。 以您在先前 az backup recoverypoint list 命令的輸出中取得的復原點名稱取代 myRecoveryPointName 也請提供要將受控磁碟還原到其中的目標資源群組

    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 所在的保存庫上啟用跨區域還原時,備份資料會複寫到次要區域。 您可以使用備份資料來執行還原作業。

若要將磁碟還原到次要區域,請在 az backup restore restore-disks 命令中使用 --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

若要將 VM 還原到另一個區域,請在 `az backup restore restore-disks` 命令中指定 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 時,於相同區域內建立 VM/磁碟。 請注意,如果保存庫的儲存體備援為 GRS,則將無法運作,即使來源 VM 已設為區域釘選也一樣。
  • 當保存庫的儲存體備援已啟用跨區域還原,且配對的區域支援區域時,在配對的區域中建立 VM/磁碟。

非受控磁碟還原

如果復原點來自使用非管理磁碟的虛擬機,Azure 備份只會將這些磁碟還原為管理磁碟。 提供一個 Azure 儲存帳號來存放虛擬機設定、部署範本和暫存 VHD 檔案,並為還原的管理磁碟提供目標資源群組。

在其他步驟中,還原的磁碟會用來建立虛擬機。

  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。 以您在先前 az backup recoverypoint list 命令的輸出中取得的復原點名稱取代 myRecoveryPointName。 同時提供還原後管理磁碟的目標資源群組:

    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
    

不支援還原到非管理磁碟。 對於使用非管理磁碟的虛擬機的舊有復原點,請遵循「 從使用非管理磁碟的虛擬機還原舊有復原點」中的指引。

監控還原工作

要監控還原工作的狀態,請使用 az backup 工作清單

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

輸出的結果類似以下範例,顯示還原作業為InProgress

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 備份還可以讓您在進行還原作業時,使用受控識別 (MSI) 來存取必須還原磁碟的儲存體帳戶。 此選項目前僅支援受控磁碟還原。

如果您想要使用保存庫的系統指派的受控識別來還原磁碟,請傳遞額外的旗標 --mi-system-assignedaz backup restore restore-disks 命令。 如果您想要使用使用者指派的受控識別,請以保存庫受控識別的 Azure Resource Manager 識別碼作為參數的值,傳遞參數 --mi-user-assigned。 請參閱這篇文章,以瞭解如何為您的保管庫啟用受管理的身分識別。

從還原的磁碟建立 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.windows.net/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.windows.net/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.windows.net/myVM-daa1931199fd4a22ae601f46d8812276/azuredeploy1fc2d55d-f0dc-4ca6-ad48-aca0519c0232.json"

範本 Blob URI 會採用此格式,並擷取範本名稱

https://<storageAccountName.blob.core.windows.net>/<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

最後一個命令會觸發替代位置還原作業,以根據 TargetVMNameTargetVNetNameTargetVNetResourceGroupTargetSubnetName 參數中指定的輸入在 Target_RG 資源群組中建立新 VM。 這可確保資料會在必要的 VM、虛擬網路和子網路中還原。

下一步

在本教學課程中,您已從復原點還原磁碟,並從磁碟建立 VM。 您已了解如何︰

  • 列出和選取復原點
  • 從復原點還原磁碟
  • 從還原的磁碟建立 VM

前進到下一個教學課程,了解如何從復原點還原個別的檔案。