將 VHD 上傳至 Azure,或將受控磁碟複製到另一個區域 - Azure CLI

適用於:✔️ Linux VM ✔️ Windows VM ✔️ 彈性擴展集

本文說明如何使用 AzCopy,將 VHD 從本機電腦上傳至 Azure 受控磁碟,或將受控磁碟複製到另一個區域。 這個直接上傳的流程可讓您直接將高達 32 TiB 的 VHD 大小上傳至受控磁碟。 Ultra 磁碟、進階 SSD v2、進階 SSD、標準 SSD 和標準 HDD 目前儘支援上傳。

如果您要為 Azure 中的 IaaS VM 提供備份解決方案,您應該使用直接上傳將客戶備份還原至受控磁碟。 從外部來源上傳 VHD 至 Azure 時,速度取決於您的本機頻寬。 從 Azure VM 上傳或複製時,您的頻寬會與標準 HDD 相同。

使用 Microsoft Entra ID 保護上傳

如果您使用 Microsoft Entra ID 來控制資源存取,您現在可使用它來限制 Azure 受控磁碟的上傳。 此功能可在所有區域中以 GA 供應項目的形式提供。 當使用者嘗試上傳磁碟時,Azure 會驗證 Microsoft Entra ID 中要求使用者的身分識別,並確認使用者具有必要的權限。 從更高階的角度來說,系統管理員可以在 Azure 帳戶或訂用帳戶層級上設定原則,以確保在允許上傳磁碟或磁碟快照集之前,Microsoft Entra 有必要的上傳權限。 如果您對於使用 Microsoft Entra ID 保護上傳,有任何相關疑問,請將電子郵件寄至:azuredisks@microsoft .com

必要條件

限制

  • VHD 無法上傳至空的快照集。
  • Azure 備份目前不支援使用 Microsoft Entra ID 保護的磁碟。
  • Azure Site Recovery 目前不支援使用 Microsoft Entra ID 保護的磁碟。

指派 RBAC 角色

若要存取使用 Microsoft Entra ID 保護的受控磁碟,要求使用者必須具有受控磁碟的資料操作員角色,或具有下列權限的自訂角色

  • Microsoft.Compute/disks/download/action
  • Microsoft.Compute/disks/upload/action
  • Microsoft.Compute/snapshots/download/action
  • Microsoft.Compute/snapshots/upload/action

如需有關指派角色的詳細步驟,請參閱使用 Azure CLI 指派 Azure 角色。 若要建立或更新自訂角色,請參閱使用 Azure CLI 建立或更新 Azure 自訂角色

開始使用

如果您想要透過 GUI 上傳磁碟,您可以使用 Azure 儲存體總管。 如需詳細資訊,請參閱使用 Azure 儲存體總管來管理 Azure 受控磁碟

必要條件

若要將 VHD 上傳至 Azure,您必須建立針對此上傳流程設定的空白受控磁碟。 建立磁碟之前,您應該先了解這些磁碟的一些其他資訊。

這種受控磁碟有兩個唯一狀態:

  • ReadToUpload,這表示磁碟已準備好接收上傳,但尚未產生 安全存取簽章 (SAS)。
  • ActiveUpload,這表示磁碟已準備好接收上傳,並已產生 SAS。

注意

在這兩種狀態中,不論磁碟的實際類型為何,受控磁碟都會以標準 HDD 定價計費。 例如,P10 會以 S10 計費。 這將為真,直到在受控磁碟上呼叫 revoke-access 為止,這是將磁碟連結至 VM 的必要流程。

建立空白的受控磁碟

您必須先掌握想上傳 VHD 的檔案大小 (以位元組為單位),才能建立用於上傳的空白標準 HDD。 若要取得,您可以使用 wc -c <yourFileName>.vhdls -al <yourFileName>.vhd。 指定 --upload-size-bytes 參數時,會使用此值。

磁碟建立 Cmdlet 中同時指定-–for-upload參數和--upload-size-bytes參數,以建立空的標準 HDD 以進行上傳:

請將 <yourdiskname><yourresourcegroupname><yourregion> 取代為您選擇的值。 --upload-size-bytes參數會包含 34359738880 範例值,請將其取代為適合您的值。

重要

如果您要建立 OS 磁碟,請將 --hyper-v-generation <yourGeneration> 新增至 az disk create

如果您要使用 Microsoft Entra ID 來保護磁碟上傳的安全,請新增 -dataAccessAuthmode 'AzureActiveDirectory'。 上傳至 Ultra 磁碟或進階 SSD v2 時,您必須選取目標磁碟的正確扇區大小。 如果您使用具有 4k 邏輯扇區大小的 VHDX 檔案,目標磁碟必須設定為 4k。 如果您使用具有 512 邏輯扇區大小的 VHD 檔案,目標磁碟必須設定為 512。

不支援邏輯扇區大小為 512k 的 VHDX 檔案。

##For Ultra Disk or Premium SSD v2, add --logical-sector-size and specify either 512 or 4096, depending on if you're using a VHD or VHDX

az disk create -n <yourdiskname> -g <yourresourcegroupname> -l <yourregion> --os-type Linux --for-upload --upload-size-bytes 34359738880 --sku standard_lrs

如果您要上傳不同的磁碟類型,請將 standard_lrs 取代為 premium_lrspremium_zrsstandardssd_lrsstandardssd_zrspremiumv2_lrs、 或 ultrassd_lrs

(選擇性) 授與磁碟的存取權

若使用 Microsoft Entra ID 保護上傳,您必須指派 RBAC 權限以授與磁碟的存取權,並產生可寫入的 SAS。

az role assignment create --assignee "{assignee}" \
--role "{Data Operator for Managed Disks}" \
--scope "/subscriptions/{subscriptionId}/resourcegroups/{resourceGroupName}/providers/{providerName}/{resourceType}/{resourceSubType}/{diskName}"

產生可寫入的 SAS

既然您已建立設定好上傳流程的空白受控磁碟,您就可以將 VHD 上傳至該磁碟。 若要將 VHD 上傳至磁碟,您需要可寫入的 SAS,以便將其參考為上傳目的地。

若要產生空白受控磁碟的可寫入 SAS,請取代 <yourdiskname><yourresourcegroupname>,然後使用下列命令:

az disk grant-access -n <yourdiskname> -g <yourresourcegroupname> --access-level Write --duration-in-seconds 86400

傳回值範例:

{
  "accessSas": "https://md-impexp-t0rdsfgsdfg4.blob.core.windows.net/w2c3mj0ksfgl/abcd?sv=2017-04-17&sr=b&si=600a9281-d39e-4cc3-91d2-923c4a696537&sig=xXaT6mFgf139ycT87CADyFxb%2BnPXBElYirYRlbnJZbs%3D"
}

上傳 VHD 或 VHDX

既然您有空白受控磁碟的 SAS,就可以使用它將受控磁碟設定為上傳命令的目的地。

使用 AzCopy v10,藉由指定您產生的 SAS URI,將本機 VHD 或 VHDX 檔案上傳至受控磁碟。

此上傳的輸送量與標準 HDD 相同。 例如,如果您有等於 S4 的大小,則輸送量最多為 60 MiB/秒。 但是,如果您有等於 S70 的大小,則輸送量最多為 500 MiB/秒。

AzCopy.exe copy "c:\somewhere\mydisk.vhd" "sas-URI" --blob-type PageBlob

上傳完成之後,您就不再需要將資料寫入磁碟,請撤銷 SAS。 撤銷 SAS 將會變更受控磁碟的狀態,並讓您得以將磁碟附加至 VM。

取代 <yourdiskname><yourresourcegroupname>,然後使用下列命令讓磁碟可供使用:

az disk revoke-access -n <yourdiskname> -g <yourresourcegroupname>

複製受控磁碟

直接上傳也會簡化複製受控磁碟的流程。 您可以在相同區域內或跨區域 (到另一個區域) 進行複製。

下列指令碼會為您執行此動作,此流程類似於稍早所述的步驟,但有一些差異,因為您正在使用現有磁碟。

重要

當您提供 Azure 受控磁碟的大小 (以位元組為單位) 時,必須新增 512 的位移。 這是因為 Azure 會在傳回磁碟大小時省略頁尾。 如果您未這麼做,複本將會失敗。 下列指令碼已經為您執行此動作。

請以您的值取代 <sourceResourceGroupHere><sourceDiskNameHere><targetDiskNameHere><targetResourceGroupHere><yourTargetLocationHere> (位置值的範例是 uswest2),然後執行下列指令碼以複製受控磁碟。

提示

如果您要建立 OS 磁碟,請將 --hyper-v-generation <yourGeneration> 新增至 az disk create

sourceDiskName=<sourceDiskNameHere>
sourceRG=<sourceResourceGroupHere>
targetDiskName=<targetDiskNameHere>
targetRG=<targetResourceGroupHere>
targetLocation=<yourTargetLocationHere>
#Expected value for OS is either "Windows" or "Linux"
targetOS=<yourOSTypeHere>

sourceDiskSizeBytes=$(az disk show -g $sourceRG -n $sourceDiskName --query '[diskSizeBytes]' -o tsv)

az disk create -g $targetRG -n $targetDiskName -l $targetLocation --os-type $targetOS --for-upload --upload-size-bytes $(($sourceDiskSizeBytes+512)) --sku standard_lrs

targetSASURI=$(az disk grant-access -n $targetDiskName -g $targetRG  --access-level Write --duration-in-seconds 86400 --query [accessSas] -o tsv)

sourceSASURI=$(az disk grant-access -n $sourceDiskName -g $sourceRG --duration-in-seconds 86400 --query [accessSas] -o tsv)

azcopy copy $sourceSASURI $targetSASURI --blob-type PageBlob

az disk revoke-access -n $sourceDiskName -g $sourceRG

az disk revoke-access -n $targetDiskName -g $targetRG

下一步

既然您已成功將 VHD 上傳至受控磁碟,您可以將資料磁碟連結至現有的 VM將磁碟連結至 VM 作為 OS 磁碟,以此建立新的 VM。

如果您有其他問題,請參閱常見問題中的上傳受控磁碟一節。