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.

Remarque

Les machines virtuelles configurées avec le lancement fiable ne peuvent pas passer de SCSI à NVMe.

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.

Machine virtuelle avec SCSI Machine virtuelle avec NVMe
Disque de système d’exploitation /dev/sda /dev/nvme0n1
Disque temporaire /dev/sdb /dev/sda
Premier disque de données /dev/sdc /dev/nvme0n2

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érifier 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é.

Important

Si votre type de machine virtuelle n’est pas répertorié, changez de type de machine virtuelle.

2. Vérifier la préparation de votre système d’exploitation à 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).

Pour faciliter ce processus, nous avons créé un script bash qui effectue la prévalidation pour vous.

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 nvme-conversion-vm
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 nvme-conversion-vm --resource-group nvme-conversion
{
"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 Exécuter un script de vérification préliminaire

Le script bash ne modifie rien automatiquement sur votre système. Il fournit uniquement des recommandations concernant les commandes à exécuter.

Ces recommandations portent sur les éléments suivants :

  • Modules NVMe
  • Configuration de GRUB
  • Vérification des appareils dans /etc/fstab

Pour démarrer le script, utilisez la commande suivante (curl) :

curl -s -S -L https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
As an alternative you can also use wget:
wget --no-verbose -O - https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
Third option is to download the script from the [GitHub repository](https://github.com/Azure/SAP-on-Azure-Scripts-and-Utilities/tree/main/NVMe-Preflight-Check) and run it manually.

nvme-conversion-vm:/home/azureuser # curl -s -S -L https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-preflight-check.sh | sh -s -- -v
------------------------------------------------
START of script
------------------------------------------------
------------------------------------------------
OK NVMe Module is installed and available on your VM
------------------------------------------------
------------------------------------------------
ERROR NVMe Module is not loaded in the initramfs image.

     mkdir -p /etc/dracut.conf.d
     echo 'add_drivers+=" nvme nvme-core nvme-fabrics nvme-fc nvme-rdma nvme-loop nvmet nvmet-fc nvme-tcp "' >/etc/dracut.conf.d/nvme.conf
     dracut -f -v

------------------------------------------------
GRUB_CMDLINE_LINUX_DEFAULT="console=ttyS0 net.ifnames=0 dis_ucode_ldr earlyprintk=ttyS0 multipath=off rootdelay=300 scsi_mod.use_blk_mq=1 USE_BY_UUID_DEVICE_NAMES=1 nvme_core.io_timeout=240"
------------------------------------------------
OK GRUB contains timeouts.
------------------------------------------------
------------------------------------------------
OK fstab file doesn't contain device names
------------------------------------------------
Please crosscheck your /etc/fstab file
------------------------------------------------
END of script
------------------------------------------------
nvme-conversion-vm:/home/azureuser #

Dans cet exemple, initrd et le noyau ne sont pas prêts pour NVMe. L’exécution des commandes dracut active le système d’exploitation.

nvme-conversion-vm:/home/azureuser # mkdir -p /etc/dracut.conf.d
nvme-conversion-vm:/home/azureuser # echo 'add_drivers+=" nvme nvme-core nvme-fabrics nvme-fc nvme-rdma nvme-loop nvmet nvmet-fc nvme-tcp "' >/etc/dracut.conf.d/nvme.conf
nvme-conversion-vm:/home/azureuser # dracut -f -v
dracut: Executing: /usr/bin/dracut -f -v
...
dracut: *** Creating initramfs image file '/boot/initrd-5.14.21-150500.55.65-default' done ***
nvme-conversion-vm:/home/azureuser # reboot

3. Convertir votre machine virtuelle en NVMe

Pour convertir le système d’exploitation, plusieurs étapes sont requises.

Modifiez les métadonnées du disque du système d’exploitation de façon à inclure les fonctionnalités NVMe. Changez le contrôleur SCSI en NVMe. Ce processus est automatisé à l’aide d’un script PowerShell.

3.1 Télécharger le script PowerShell

Pour télécharger le script PowerShell à partir du dépôt GitHub, utilisez la commande suivante :

Invoke-WebRequest -Uri "https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/azure-nvme-VM-update.ps1" -OutFile ".\azure-nvme-VM-update.ps1"

3.2. Convertir la machine virtuelle

Pour procéder à la conversion, exécutez le script. Une documentation détaillée est également disponible dans le dépôt GitHub.

Vous pouvez décider si, par exemple, la machine virtuelle doit être démarrée automatiquement après la reconfiguration.

.\azure-nvme-VM-update.ps1 -subscription_id XXXXXXXX-a961-4fb7-88c0-757472230e6c -resource_group_name nvme-conversion -vm_name nvme-conversion-vm -disk_controller_change_to NVMe -vm_size_change_to Standard_E64bds_v5
INFO - OS Disk found
INFO - Access token generated
INFO - Getting VM info
INFO - Getting all VM SKUs available in Region swedencentral
INFO - This will take about a minute ...
INFO - Found VM SKU - Checking for Capabilities
INFO - VM supports NVMe
INFO - Checking for TrustedLaunch
INFO - Checking if VM is stopped and deallocated
INFO - Stopping VM
   Tenant: 72f988bf-86f1-41af-91ab-2d7cd011db47
SubscriptionName SubscriptionId                      Account                Environment
---------------- --------------                      -------                -----------
XX-XX-XX-XX      XXXXXXX-a961-4fb7-88c0-757472230e6c xxxxxx@microsoft.com   AzureCloud

OperationId : cf02d28c-c711-4fe5-89fc-854fba31b67a
Status : Succeeded
StartTime : 07.06.2024 15:18:35
EndTime : 07.06.2024 15:19:17
Error :
Name :

INFO - Setting OS Disk to SCSI/NVMe
INFO - Getting VM config to prepare new config
INFO - Setting new VM size
INFO - Setting disk controller for VM
INFO - Updating the VM configuration

RequestId :
IsSuccessStatusCode : True
StatusCode : OK
ReasonPhrase :

INFO - Not starting VM

3.3 Vérifier le résultat

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

Capture d’écran du portail Azure.

3.3.2 Vérifier le résultat dans PowerShell
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. Vérifier votre système d'exploitation

4.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.

4.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 #
4.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/NVMe-Preflight-Check/88-azure-nvme-data-disk.rules puis exécutez udevadm control --reload-rules && udevadm trigger pour recharger les règles udev.

4.2.2 Prêt à installer des packages à l’aide d’Azure NVMe utils

Des packages précompilés sont disponibles à la page Index of /results/cjp256/azure-nvme-utils/ pour plusieurs distributions. Nous travaillons actuellement à l’activation et à l’intégration d’Azure NVMe utils dans toutes les principales distributions.