Partager via


Conversion de machines virtuelles exécutant Linux de SCSI en NVMe

Dans cet article, nous abordons le processus de conversion du stockage SCSI en NVMe pour des machines virtuelles exécutant Linux. En migrant vers NVMe, vous pouvez bénéficier de performances et d’une scalabilité améliorées.

SCSI et NVMe

Les machines virtuelles Azure prennent en charge deux types d’interfaces de stockage : Small Computer System Interface (SCSI) et NVMe. L’interface est une norme héritée qui fournit une connectivité physique et un transfert de données entre les ordinateurs et les périphériques. Le NVMe est similaire à la SCSI, car il assure la connectivité et le transfert des données. Cependant, le NVMe est une interface nettement plus rapide et plus efficace pour transférer des données entre les serveurs et les systèmes de stockage.

Prise en charge des machines virtuelles avec interface SCSI

Azure continue à prendre en charge l’interface SCSI sur les versions des offres de machines virtuelles qui fournissent un stockage SCSI. Toutefois, les nouvelles séries de machines virtuelles n’offriront pas toutes le stockage SCSI comme option à l’avenir.

Qu’est-ce qui change pour votre machine virtuelle ?

Le fait de remplacer l’interface hôte SCSI par du NVMe ne change pas le stockage distant (disque de système d’exploitation ou disques de données), mais la façon dont le système d’exploitation voit les disques change.

Disque Machine virtuelle avec SCSI Machine virtuelle NVMe avec tempdisk SCSI (par exemple, Ebds_v5) Machine virtuelle NVMe avec disque temporaire NVMe
Disque de système d’exploitation /dev/sda /dev/nvme0n1 /dev/nvme0n1
Disque temporaire /dev/sdb /dev/sda /dev/nvme1n1
Premier disque de données /dev/sdc /dev/nvme0n2 /dev/nvme0n2

Conseil / Astuce

Certains types de machines virtuelles ont plusieurs disques temporaires (par exemple, E64ds_v6)

Dans les sections suivantes, nous fournissons un guide pour convertir votre machine virtuelle Azure de SCSI en NVMe à l’aide d’Azure Boost, ce qui vous permet de tirer pleinement parti de ces améliorations de performances et de maintenir votre niveau de compétitivité dans le paysage du cloud computing.

Migrer votre machine virtuelle de SCSI vers NVMe

Pour migrer de SCSI vers NVMe, certaines étapes doivent être effectuées :

  1. Vérifier si votre série de machines virtuelles prend en charge NVMe
  2. Vérifier la préparation de votre système d’exploitation à NVMe
  3. Convertir votre machine virtuelle en NVMe
  4. Vérifier votre système d'exploitation

1. Vérifiez si votre série de machines virtuelles prend en charge NVMe

Les machines virtuelles prises en charge pour prendre en charge les disques attachés NVMe sont décrites sur le site de vue d’ensemble d’Azure Boost dans le tableau de disponibilité.

2. Vérifiez votre système d’exploitation pour la préparation NVMe

Le système d’exploitation doit prendre en charge les appareils NVMe tels que les pilotes de périphérique, et initrdm, le système de fichiers temporaire utilisé pendant le démarrage, doit être préparé. En plus de cela, vous devez valider les points de montage des systèmes de fichiers, car ils vérifient si vous utilisez le nom de l’appareil SCSI (/dev/sdX).

Le script de migration peut automatiquement prendre en charge ces vérifications de préparation lors de l’utilisation du -FixOperatingSystemSettings.

2.1 Vérifier le type de contrôleur de machine virtuelle

2.1.1 Vérifier le type de contrôleur à l’aide de PowerShell
PS C:\Users\user1> $vm = Get-AzVM -name [your-vm-name]
PS C:\Users\user1> $vm.StorageProfile.DiskControllerType
SCSI
PS C:\Users\user1>
2.1.2 Vérifier le type de contrôleur à l’aide d’Azure CLI
$ az vm show --name [your-vm-name] --resource-group [your-resource-group-name]
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Vérifier le type de contrôleur à l’aide du portail Azure

Capture d’écran du portail Azure pour vérifier le contrôleur.

2.2 Préparer la migration

Le script de migration peut s’occuper automatiquement des prérequis lors de l’utilisation du -FixOperatingSystemSettings paramètre.

Si vous souhaitez effectuer manuellement la validation des modifications requises

  • Modules NVMe installés et faisant partie d’initrd/initramfs
  • La configuration GRUB inclut le paramètre nvme_core.io_timeout=240
  • Vérification des appareils dans /etc/fstab

Veuillez consulter votre fournisseur de système d’exploitation pour couvrir toutes les commandes requises pour mettre à jour initrd/initramfs.

2.2.1 Préparer PowerShell

Conseil / Astuce

Cette étape n’est pas nécessaire lors de l’exécution du script dans Azure CloudShell

  1. Installer PowerShell à l’aide de https://aka.ms/powershell

  2. Se connecter à Azure en utilisant Connect-AzAccount et sélectionner l’abonnement approprié avec Select-AzSubscription -Subscription [your-subscription-id]

  3. Définir la stratégie d’exécution à l’aide de Set-ExecutionPolicy -ExecutionPolicy Unrestricted

2.2.2 Télécharger le script

Vous pouvez télécharger le script à l’aide d’une commande PowerShell

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/Azure-NVMe-Utils/Azure-NVMe-Conversion.ps1" -OutFile ".\Azure-NVMe-Conversion.ps1"

2.3 Exécuter la migration

Le script a plusieurs paramètres disponibles :

Paramètre Descriptif Obligatoire
-ResourceGroupName Nom du groupe de ressources de votre machine virtuelle Oui
-VMName Nom de votre machine virtuelle sur Azure Oui
-NewControllerType Le type de contrôleur de stockage de la machine virtuelle doit être converti en (NVMe ou SCSI) Oui
-VMSize Référence SKU de machine virtuelle Azure vers laquelle vous souhaitez convertir la machine virtuelle Oui
-StartVM Démarrer la machine virtuelle après la conversion Non
-IgnoreSKUCheck Ignorer la vérification du SKU de la machine virtuelle Non
-IgnoreWindowsVersionCheck Ignorer la vérification de la version de Windows Non
-FixOperatingSystemSettings Corriger automatiquement les paramètres du système d’exploitation à l’aide d’Azure RunCommands Non
-WriteLogfile Créer un fichier journal Non
-IgnoreAzureModuleCheck N’exécutez pas la vérification des modules Azure installés Non
-IgnoreOSCheck N’effectuez pas de vérification de la préparation du système d’exploitation, l'attente est que le système d’exploitation est déjà prêt. Non
-SleepSeconds Temps nécessaire pour qu’Azure règle les modifications avant de démarrer la machine virtuelle Non

Exemple de commande :

# Example usage
.\Azure-NVMe-Conversion.ps1 -ResourceGroupName <your-RG> -VMName <your-VMname> -NewControllerType <NVMe/SCSI> -VMSize <new-VM-SKU> -StartVM -FixOperatingSystemSettings

Conseil / Astuce

Vous pouvez toujours revenir à SCSI, le script partage une commande avec vous pour revenir directement à votre configuration d’origine.

2.3.1 Exemple de sortie
PS /home/philipp> ./NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType NVMe -VMSize Standard_E4bds_v5 -StartVM -FixOperatingSystemSettings                                          
00:00 - INFO      - Starting script Azure-NVMe-Conversion.ps1
00:00 - INFO      - Script started at 06/27/2025 15:41:39
00:00 - INFO      - Script version: 2025062704
00:00 - INFO      - Script parameters:
00:00 - INFO      -   ResourceGroupName -> testrg
00:00 - INFO      -   VMName -> testvm
00:00 - INFO      -   NewControllerType -> NVMe
00:00 - INFO      -   VMSize -> Standard_E4bds_v5
00:00 - INFO      -   StartVM -> True
00:00 - INFO      -   FixOperatingSystemSettings -> True
00:00 - INFO      - Script Version 2025062704                                                                           
00:00 - INFO      - Module Az.Compute is installed and the version is correct.
00:00 - INFO      - Module Az.Accounts is installed and the version is correct.
00:00 - INFO      - Module Az.Resources is installed and the version is correct.
00:00 - INFO      - Connected to Azure subscription name: AG-GE-CE-PHLEITEN
00:00 - INFO      - Connected to Azure subscription ID: aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e
00:00 - INFO      - VM testvm found in Resource Group testrg
00:01 - INFO      - VM testvm is running
00:01 - INFO      - VM testvm is running Linux
00:01 - INFO      - VM testvm is running SCSI
00:02 - INFO      - Running in Azure Cloud Shell
00:02 - INFO      - Authentication token is a SecureString
00:02 - INFO      - Authentication token received
00:02 - INFO      - Getting available SKU resources
00:02 - INFO      - This might take a while ...
00:06 - INFO      - VM SKU Standard_E4bds_v5 is available in zone 1
00:06 - INFO      - Resource disk support matches between original VM size and new VM size.
00:06 - INFO      - Found VM SKU - Checking for Capabilities
00:06 - INFO      - VM SKU has supported capabilities
00:06 - INFO      - VM supports NVMe
00:06 - INFO      - Pre-Checks completed
00:06 - INFO      - Entering Linux OS section
00:37 - INFO      -    Script output: Enable succeeded: 
00:37 - INFO      -    Script output: [stdout]
00:37 - INFO      -    Script output: [INFO] Operating system detected: sles
00:37 - INFO      -    Script output: [INFO] Checking if NVMe driver is included in initrd/initramfs...
00:37 - INFO      -    Script output: [INFO] NVMe driver found in initrd/initramfs.
00:37 - INFO      -    Script output: [INFO] Checking nvme_core.io_timeout parameter...
00:37 - INFO      -    Script output: [INFO] nvme_core.io_timeout is set to 240.
00:37 - INFO      -    Script output: [INFO] Checking /etc/fstab for deprecated device names...
00:37 - INFO      -    Script output: [INFO] /etc/fstab does not contain deprecated device names.
00:37 - INFO      -    Script output: 
00:37 - INFO      -    Script output: [stderr]
00:37 - INFO      -    Script output: 
00:37 - INFO      - Errors: 0 - Warnings: 0 - Info: 7
00:37 - INFO      - Shutting down VM testvm
01:18 - INFO      - VM testvm stopped
01:18 - INFO      - Checking if VM is stopped and deallocated
01:19 - INFO      - Setting OS Disk capabilities for testvm_OsDisk_1_165411276cbe459097929b981eb9b3e2 to new Disk Controller Type to NVMe
01:19 - INFO      - generated URL for OS disk update:
01:19 - INFO      - https://management.azure.com/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourceGroups/testrg/providers/Microsoft.Compute/disks/testvm_OsDisk_1_165411276cbe459097929b981eb9b3e2?api-version=2023-04-02
01:19 - INFO      - OS Disk updated
01:19 - INFO      - Setting new VM Size from Standard_E4s_v3 to Standard_E4bds_v5 and Controller to NVMe
01:19 - INFO      - Updating VM testvm
01:54 - INFO      - VM testvm updated
01:54 - INFO      - Start after update enabled for VM testvm
01:54 - INFO      - Waiting for 15 seconds before starting the VM
02:09 - INFO      - Starting VM testvm
03:31 - INFO      - VM testvm started
03:31 - INFO      - As the virtual machine got started using the script you can check the operating system now
03:31 - INFO      - If you have any issues after the conversion you can revert the changes by running the script with the old settings
03:31 - IMPORTANT - Here is the command to revert the changes:
03:31 - INFO      -    .\Azure-NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType SCSI -VMSize Standard_E4s_v3 -StartVM
03:31 - INFO      - Script ended at 06/27/2025 15:45:11
03:31 - INFO      - Exiting
PS /home/philipp>

Si vous avez des difficultés à accéder au système d’exploitation par la suite, essayez de vérifier

  • Console série pour les systèmes d’exploitation Linux

  • Capture d’écran du système d’exploitation dans le portail Azure

Lorsque quelque chose se produit, vous pouvez toujours revenir à SCSI à l’aide de la commande affichée à la fin du script :

.\Azure-NVMe-Conversion.ps1 -ResourceGroupName testrg -VMName testvm -NewControllerType SCSI -VMSize Standard_E4s_v3 -StartVM

2.4 Vérifier le résultat

2.4.1 Vérifier le résultat dans le portail Azure

Capture d'écran du portail Azure.

2.4.2 Résultat de vérification dans PowerShell
PS C:\Users> $vm = Get-AzVM -name [your-vm-name]
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

3. Vérifiez votre système d’exploitation

3.1 Vérifier les appareils

Vous pouvez vérifier les appareils à l’aide de la commande nvme. Si la commande nvme est manquante, installez le package « nvme-cli ».

nvme list

La sortie doit afficher le disque du système d’exploitation et les disques de données. Capture d’écran des disques de système d’exploitation et des disques de données.

3.2 Obtenir le fichier udev pour NVMe (facultatif)

Sur les machines virtuelles SCSI, les règles udev intégrées à waagent (agent Azure) ont créé des liens dans /dev/disk/azure/scsi1/lunX pour identifier les disques de données. Comme SCSI n’est plus utilisé, les règles ne s’appliquent plus.

Avec l’une des deux options disponibles pour déployer des règles udev compatibles NVMe, de nouveaux liens symboliques sont visibles dans le répertoire /dev/disk/azure/data/by-lun. Ce répertoire remplace /dev/disk/azure/scsi1.

nvme-conversion-vm:/usr/lib/udev/rules.d # ls -l /dev/disk/azure/data/by-lun/
total 0
lrwxrwxrwx 1 root root 19 Jun 7 13:52 0 -> ../../../../nvme0n2
lrwxrwxrwx 1 root root 19 Jun 7 13:52 1 -> ../../../../nvme0n3
nvme-conversion-vm:/usr/lib/udev/rules.d #
3.2.1 Téléchargement manuel du fichier udev

Pour télécharger le nouveau fichier de règles udev, utilisez cette commande : curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/Azure-NVMe-Utils/88-azure-nvme-data-disk.rules puis exécutez udevadm control --reload-rules && udevadm trigger pour recharger les règles udev.

3.2.2 Prêt à installer des packages à l’aide des utils de machine virtuelle Azure

Des packages précompilés sont disponibles sur l'index de /results/cjp256/azure-vm-utils/ pour plusieurs distributions.

Plusieurs distributions ont commencé à intégrer le package. Vous pouvez l’installer directement à partir de leur dépôt.

Répartition Version minimale
SUSE SLES 15 SP5 ou version ultérieure
RedHat RHEL 9.6 ou version ultérieure
Ubuntu Ubuntu 25.04 ou version ultérieure