Cet article répond à certaines questions courantes sur la prise en charge des disques NVM Express (NVMe) distants sur les machines virtuelles (VM) créées dans Azure.
Quelles sont les conditions préalables à l’activation de l’interface NVMe distante sur ma machine virtuelle ?
Vous pouvez utiliser DiskControllerTypes
pendant la configuration de la machine virtuelle pour sélectionner votre type de contrôleur préféré, tel que NVMe ou Small Computer System Interface (SCSI). Si vous ne spécifiez pas de valeur DiskControllerTypes
, la plateforme choisit automatiquement le contrôleur par défaut en fonction de la configuration de la taille de machine virtuelle. Si la taille de la machine virtuelle est configurée pour SCSI comme valeur par défaut et prend en charge NVMe, la machine virtuelle utilise SCSI, sauf si vous mettez à jour la valeur DiskControllerTypes
sur NVMe.
Pour activer l’interface NVMe sur votre machine virtuelle, vous devez remplir les conditions préalables suivantes :
Choisissez une famille de machines virtuelles qui prend en charge NVMe. Seules les tailles de machines virtuelles Ebsv5 et Ebdsv5 sont équipées de NVMe dans les machines virtuelles de génération Intel v5.
Sélectionnez l’image de système d’exploitation étiquetée comme prenant en charge NVMe. Après avoir sélectionné une famille de machines virtuelles et une image de système d’exploitation prises en charge, vous êtes invité à sélectionner le type de contrôleur de disque NVMe.
Optez pour NVMe en sélectionnant le type de contrôleur de disque NVMe dans le portail Azure ou dans Azure Resource Manager, Azure CLI ou le modèle Azure PowerShell. Pour obtenir des instructions pas à pas, veuillez consulter laFAQ générale sur NVMe.
Vérifiez que vous utilisez une machine virtuelle de Génération 2, car NVMe prend uniquement en charge les images de Génération 2.
Choisissez l’une des régions Azure où NVMe est activé.
Puis-je chiffrer mes disques NVMe distants ?
Il n’existe pas de méthode native dans Azure pour chiffrer ces disques. Vous pouvez les chiffrer dans le système d’exploitation, mais vous devez les chiffrer à nouveau après le montage au démarrage.
Comment puis-je redimensionner une machine virtuelle basée sur SCSI vers une machine virtuelle distante compatible NVMe de taille différente ?
Vous pouvez utiliser le processus suivant pour :
- Redimensionner une machine virtuelle basée sur SCSI créée à l’aide d’une image non marquée vers une machine virtuelle compatible NVMe d’une taille différente sans recréer les configurations de la machine virtuelle et sans marquer l’image
- Redimensionner une machine virtuelle SCSI sur une machine virtuelle compatible NVMe de taille différente sans recréer les configurations de machine virtuelle
La machine virtuelle source peut être :
- Une image de système d’exploitation non marquée qui prend en charge NVMe
- Une image de système d’exploitation étiquetée NVMe
Pour redimensionner la machine virtuelle, utilisez la commande suivante pour exécuter un script Azure PowerShell qui définit la valeur de destination discontrollertype
de la machine virtuelle comme 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>]
Comment puis-je vérifier si une image est étiquetée en tant que NVMe ?
Pour vérifier si une image est étiquetée en tant que NVMe, utilisez la commande suivante :
az vm image show --urn URN_OF_IMAGE
Comment étiqueter une image qui prend en charge NVMe pour les disques distants ?
Pour étiqueter une image prenant en charge NVMe, procédez comme suit :
Chargez un disque dur virtuel (VHD) pris en charge par NVMe sur votre compte de stockage. AzCopy est un moyen rapide, mais vous pouvez également utiliser le portail pour effectuer le chargement.
azcopy copy <local path to your VHD> <container in your storage account>
Créez une galerie d’images à l’aide d’Azure PowerShell, du portail ou d’Azure CLI.
Créez une définition d’image. Prenez soin d’inclure
--feature DiskControllerTypes=SCSI,NVMe
.Voici un exemple d’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
Créez la version de l’image sous la galerie étiquetée NVMe avec le disque dur virtuel pris en charge par NVMe.
Voici un exemple d’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>
Comment configurer un modèle ARM pour la création de machines virtuelles ?
Vous pouvez utiliser l’extension de script personnalisé Azure conjointement avec les modèles Azure Resource Manager (modèles ARM). Cette solution vous permet de télécharger et d’exécuter des scripts sur des machines virtuelles Azure. Cette méthode est également compatible avec Windows et Linux. Pour obtenir des instructions détaillées, reportez-vous à la documentation sur l’extension de script personnalisé Azure pour Windows et Linux.
Que se passe-t-il si je souhaite utiliser une autre famille de machines virtuelles qui ne prend pas en charge les disques NVMe distants ?
Si vous sélectionnez une famille de machines virtuelles non prise en charge, vous obtenez ce message d’erreur : « La taille de machine virtuelle sélectionnée ne peut pas démarrer avec DiskControllerTypes. Vérifiez que le type de contrôleur de disque fourni est l’un des types de contrôleurs de disque pris en charge pour la taille de la machine virtuelle. »
Veillez à sélectionner une famille de machines virtuelles qui prend en charge l’interface NVMe. Pour déterminer les types de contrôleurs de disque pris en charge pour la taille de la machine virtuelle, veuillez consulter la liste des références SKU de ressources dans l’API REST.
Quelles options de stockage sur disque Azure sont compatibles avec les disques NVMe distants ?
Les tailles NVMe peuvent être combinées avec des disques Azure SSD Premium v1, SSD Premium v2 et des disques de stockage Ultra. Pour plus d’informations sur les offres de disques Azure, veuillez consulter les types de disques managés Azure.
Est-ce qu’Azure prend en charge le redimensionnement instantané sur des disques avec des tailles de machine virtuelle NVMe ?
Le redimensionnement en direct des NVMe est pris en charge sur les disques Azure SSD Premium v1, les disques SSD Standard et les disques HDD Standard. Vous pouvez également ajouter des disques NVMe sans redémarrer la machine virtuelle.
Comment puis-je identifier les disques NVMe distants sur une machine virtuelle Linux ?
Obtenez le package
nvme-cli
:sudo apt install nvme-cli
Exécutez la commande NVMe
list
pour récupérer les détails du disque NVMe :sudo nvme list
Voici comment les données apparaissent en réponse aux commandes Azure PowerShell :
Comment identifier les disques NVMe sur une machine virtuelle Windows ?
Ouvrez Azure PowerShell et utilisez la commande suivante :
wmic diskdrive get model,scsilogicalunit
Les disques attachés ASAP sont présentés dans l’invité avec la chaîne de modèle Virtual_Disk NVME Premium
. L’unité logique SCSI a la valeur de l’ID du numéro d’unité logique visible par le portail incrémentée de 1.
Voici un instantané de l’apparence des disques NVMe dans une machine virtuelle Windows compatible NVMe :
L’instantané suivant montre la sortie d’invité pour les disques de données attachés au numéro d’unité logique 0 et au numéro d’unité logique 4 (CRP). L’ID du numéro d’unité logique équivaut à l’ID d’espace de noms.
Puis-je convertir une machine virtuelle basée sur SCSI en une machine virtuelle compatible NVMe tout en conservant la même taille de processeur virtuel de machine virtuelle avec une image de système d’exploitation marquée NVMe ?
Ce scénario est uniquement pris en charge sur les systèmes d’exploitation Linux et n’est pas pris en charge sur les systèmes d’exploitation Windows.
Les disques partagés dans les disques distants sont-ils pris en charge avec les machines virtuelles compatibles NVMe ?
La fonctionnalité de disque partagé est prise en charge pour les disques SSD Premium, SSD Premium v2 et disques de stockage Ultra.
Puis-je utiliser Azure PowerShell ou l’Azure CLI pour créer une machine virtuelle avec un disque de système d’exploitation à partir d’un objet blob existant avec NVMe activé ?
Ce n’est pas possible actuellement. Vous pouvez utiliser la solution de contournement suivante de l’API REST pour créer une machine virtuelle avec un disque de système d’exploitation à partir d’un objet blob existant avec NVMe activé :
$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)