編輯

共用方式為


遠端 NVMe 磁碟的常見問題

本文說明在 Azure 中建立之虛擬機器上支援遠端 NVM Express (NVMe) 磁碟的一些常見問題。

在 VM 上啟用遠端 NVMe 介面的必要條件為何?

您可以在 VM 設定期間使用 DiskControllerType,將慣用的控制器類型選取為 NVMe 或小型電腦系統介面 (SCSI)。 如果您未指定 DiskControllerType 值,平台會根據 VM 大小設定自動選擇預設控制器。 如果將 VM 大小設定為 SCSI 做為預設值並支援 NVMe,除非您將 DiskControllerType 值更新為 NVMe,否則 VM 會使用 SCSI。

若要在您的 VM 上啟用 NVMe 介面,您必須符合下列必要條件:

  • 選擇支援 NVMe 的 VM 系列。 在 Intel v5 世代 VM 中,只有 Ebsv5 和 Ebdsv5 VM 大小配備了 NVMe。

  • 選取標記 NVMe 支援的作業系統映像。 選取支援的 VM 系列和 OS 映像值之後,系統會提示您選取 NVMe 磁碟控制器類型。

    提示選取磁碟控制器類型的螢幕擷取畫面。

  • 在 Azure 入口網站或 Azure Resource Manager、Azure CLI 或 Azure PowerShell 範本中選取 NVMe 磁碟控制器類型,以選擇加入 NVMe。 如需逐步指示,請參閱一般 NVMe 常見問題

  • 請確定您使用第 2 代 VM,因為 NVMe 僅支援第 2 代映像。

  • 選擇其中一個已啟用 NVMe 的 Azure 區域。

我可以加密遠端 NVMe 磁碟嗎?

Azure 內沒有原生方式可加密這些磁碟。 您可以在 OS 內加密它們,但在啟動時掛接之後,您必須重新加密它們。

如何將 SCSI 型 VM 大小調整為不同大小的遠端 NVMe 啟用 VM?

您可以使用下列流程來:

  • 將使用未標記映像所建立的 SCSI 型 VM 調整為不同大小的 NVMe 啟用 VM,而不需重新建立 VM 組態,而不標記映像。
  • 將 SCSI 型 VM 大小調整為不同大小的 NVMe 啟用 VM,而不需重新建立 VM 組態。

來源 VM 可以是:

  • 支援 NVMe 的未標記 OS 映像。
  • NVMe 標記的 OS 映像。

若要調整 VM 的大小,請使用下列命令來執行 Azure PowerShell 指令碼,將 VM 的目的地 discontrollertype 值設定為 NVMe:

azure-nvme-VM-update.ps1 [-subscription_id] <String> [-resource_group_name] <String> [-vm_name] <String> [[-disk_controller_change_to] <String>] [-vm_size_change_to] <String> [[-start_vm_after_update] <Boolean>] [[-write_logfile] <Boolean>]

如何檢查映像是否已標記為 NVMe?

請使用下列命令以檢查映像是否標記為 NVMe:

az vm image show --urn URN_OF_IMAGE

如何標記支援 NVMe 的遠端磁碟映像?

若要標記支援 NVMe 的映像,請遵循下列步驟:

  1. 將 NVMe 支援的虛擬硬碟 (VHD) 上傳至您的儲存體帳戶。 AzCopy 是一種快速的方式,但您也可以使用入口網站上傳。

    azcopy copy <local path to your VHD> <container in your storage account>
    
  2. 使用 Azure PowerShell、入口網站或 Azure CLI 建立映像庫

  3. 建立映像定義。 請務必包含 --feature DiskControllerTypes=SCSI,NVMe

    以下是 Azure CLI 範例:

    az sig image-definition create --resource-group <resourceGroupName> --gallery-name <galleryName> --gallery-image-definition <imageName> --publisher <publisher> --offer <offerName> --sku <skuName> --os-type <osType> --os-state <osState> --feature DiskControllerTypes=SCSI,NVMe
    
  4. 使用 NVMe 支援的 VHD,在 NVMe 標記資源庫下建立映像版本

    以下是 Azure CLI 範例:

    az sig image-version create --resource-group <resourceGroupName> --gallery-name <galleryName> --gallery-image-definition <imageName> --gallery-image-version <version> --target-regions <region1> <region2> --replica-count <replicaCount> --os-vhd-uri <NVMe-supported vhd uri> --os-vhd-storage-account <storageAccount>
    

如何設定用於建立 VM 的 ARM 範本?

您可以使用 Azure 自訂指令碼延伸模組搭配 Azure Resource Manager 範本 (ARM 範本)。 此解決方案可讓您在 Azure 虛擬機器上下載和執行指令碼,並與 Windows 和 Linux 相容。 如需詳細指引,請參閱 WindowsLinux 的 Azure 自訂指令碼延伸模組文件。

如果我想要使用另一個不支持遠端 NVMe 磁碟的 VM 系列,會發生什麼事?

如果您選取不支援的 VM 系列,就會收到此錯誤訊息:「選取的 VM 大小無法使用 DiskControllerType 開機。 檢查提供的磁碟控制器類型是否為 VM 大小的其中一個支援的磁碟控制器類型。」

請務必選取支援 NVMe 介面的 VM 系列。 若要判斷 VM 大小支援哪些磁碟控制器類型,請參閱 REST API 中的資源 SKU 清單

哪些 Azure 磁碟儲存體選項與遠端 NVMe 磁碟相容?

NVMe 大小可以與 Azure 進階 SSD v1、進階 SSD v2 和 Ultra 磁碟儲存體結合。 如需 Azure 供應項目的詳細資訊,請參閱 Azure 受控磁碟類型

Azure 是否支援使用 NVMe VM 大小的磁碟即時重設大小?

Azure 進階 SSD v1 磁碟、標準 SSD 磁碟及標準 HDD 磁碟支援 NVMe 的即時重設大小。 您也可以新增 NVMe 磁碟,而不重新啟動 VM。

如何識別 Linux VM 上的遠端 NVMe 磁碟?

  1. 取得 nvme-cli 套件:

    sudo apt install nvme-cli
    
  2. 執行 NVMe list 命令以擷取 NVMe 磁碟詳細資料:

    sudo nvme list
    

    在 Linux 虛擬機器上識別 NVMe 磁碟的指示螢幕擷取畫面。

    在 Linux 入口網站中選擇命名空間識別碼的指示螢幕擷取畫面。

    以下是回應 Azure PowerShell 命令時資料的出現方式

    Azure PowerShell 命令的範例回應螢幕擷取畫面。

如何識別 Windows VM 上的 NVMe 磁碟?

開啟 Azure PowerShell,並使用下列命令:

wmic diskdrive get model,scsilogicalunit

在 Windows 上使用 NVMe 的範例 PowerShell 命令螢幕擷取畫面。

ASAP 連結的磁碟會在客體中以模型字串 Virtual_Disk NVME Premium 顯示。 SCSI 邏輯單元具有入口網站可見 LUN 識別碼的值遞增 1。

以下是啟用 NVMe 的 Windows VM 中 NVMe 磁碟顯示方式的快照集:

此螢幕擷取畫面顯示 Azure PowerShell 命令範例,以識別 Windows VM 上的 NVMe 磁碟。

下列快照集顯示在連接到 LUN 0 和 LUN 4 (CRP) 的資料磁碟客體輸出。 LUN 識別碼相當於命名空間識別碼。

此螢幕擷取畫面顯示 NVMe 磁碟在已啟用 NVMe 的 Windows VM 中顯示方式的範例。

我是否可以將 SCSI 型 VM 轉換為啟用 NVMe,同時使用 NVMe 標記的 OS 映像保留相同的 VM vCPU 大小?

只有在 Linux 作業系統上才支援此案例,而 Windows 作業系統不支援。

已啟用 NVMe VM 是否支援遠端磁碟的共用磁碟?

進階 SSD、進階 SSD v2 及 Ultra 磁碟儲存體磁碟都支援共用磁碟功能。

我可以使用 Azure PowerShell 或 Azure CLI,從已啟用 NVMe 的現有 Blob 建立具有 OS 磁碟的 VM 嗎?

目前無法執行此動作。 相反地,您可以使用下列 REST API 因應措施,從已啟用 NVMe 的現有 Blob 建立具有 OS 磁碟的 VM:

$subscriptionID = '<Your Subscription ID>'
$resourceGroupName = '<Your Resource Group Name>'
$storageAccountName = '<Your Account Name>'
$storageAccountContainer = '<Your Account Container>'
$blobName = 'blob-nvme_OsDisk_1.vhd'

$diskName = 'test'
$diskSkuName = 'Standard_LRS'
$diskSizeGB = 30
$osType = 'Linux' 
$hyperVGeneration = 'V2'
$location = 'eastus'

$azContext = Get-AzContext
$azProfile = [Microsoft.Azure.Commands.Common.Authentication.Abstractions.AzureRmProfileProvider]::Instance.Profile
$profileClient = New-Object -TypeName Microsoft.Azure.Commands.ResourceManager.Common.RMProfileClient -ArgumentList ($azProfile)
$token = ($profileClient.AcquireAccessToken($azContext.Subscription.TenantId)).AccessToken

$body = @{
    location = $location
    sku = @{ name = $diskSkuName }
    properties = @{
        osType                  = $osType
        hyperVGeneration        = $hyperVGeneration
        supportedCapabilities   = @{diskControllerTypes = 'SCSI, NVMe'}
        diskSizeGB              = $diskSizeGB
        creationData = @{
            storageAccountId	= "/subscriptions/$subscriptionID/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"

            sourceUri           = "https://$storageAccountName.blob.core.windows.net/$storageAccountContainer/$blobName"
            createOption		= 'Import'
        }
    }
}

$apiVersion='2023-10-02'
$restUri = "https://management.azure.com/subscriptions/$subscriptionID/resourceGroups/$resourceGroupName/providers/Microsoft.Compute/disks/$diskName`?api-version=$apiVersion"
$authHeader = @{
    'Content-Type'='application/json'
    'Authorization'='Bearer ' + $token
}

Invoke-RestMethod `
    -Uri $restUri `
    -Method 'Put' `
    -Headers $authHeader `
    -Body ($body | ConvertTo-Json)