Delen via


Virtuele machines met Linux converteren van SCSI naar NVMe

In dit artikel bespreken we het proces van het converteren van virtuele machines (VM) met Linux van SCSI naar NVMe-opslag. Door te migreren naar NVMe, kunt u profiteren van de verbeterde prestaties en schaalbaarheid.

SCSI versus NVMe

Azure-VM's ondersteunen twee typen opslaginterfaces: Small Computer System Interface (SCSI) en NVMe. De SCSI-interface is een verouderde standaard die fysieke connectiviteit en gegevensoverdracht biedt tussen computers en randapparatuur. NVMe is vergelijkbaar met SCSI omdat het connectiviteit en gegevensoverdracht biedt, maar NVMe is een snellere en efficiëntere interface voor gegevensoverdracht tussen servers en opslagsystemen.

Notitie

VM's die zijn geconfigureerd met Vertrouwde start, kunnen niet worden verplaatst van SCSI naar NVMe.

Ondersteuning voor SCSI-interface-VM's

Azure blijft ondersteuning bieden voor de SCSI-interface in de versies van VM-aanbiedingen die SCSI-opslag bieden. Niet alle nieuwe VM-reeksen hebben echter SCSI-opslag als optie.

Wat verandert er voor uw VIRTUELE machine?

Als u de hostinterface wijzigt van SCSI in NVMe, verandert de externe opslag (besturingssysteemschijf of gegevensschijven) niet, maar wijzigt u de manier waarop de besturingssystemen de schijven zien.

VM met SCSI-functionaliteit VM met NVMe
Besturingssysteemschijf /dev/sda /dev/nvme0n1
Tijdelijke schijf /dev/sdb /dev/sda
Eerste gegevensschijf /dev/sdc /dev/nvme0n2

In de volgende secties bieden we een handleiding voor het converteren van uw Azure-VM van SCSI naar NVMe met behulp van Azure Boost, zodat u optimaal kunt profiteren van deze prestatieverbeteringen en een concurrerende rand in het cloud-computinglandschap kunt behouden.

Uw virtuele machine (VM) migreren van SCSI naar NVMe

Als u wilt migreren van SCSI naar NVMe, moeten enkele stappen worden uitgevoerd:

  1. Controleer of de reeks virtuele machines NVMe ondersteunt
  2. Controleer uw besturingssysteem op NVMe-gereedheid
  3. Uw virtuele machine converteren naar NVMe
  4. Controleer uw besturingssysteem

1. Controleer of de reeks virtuele machines NVMe ondersteunt

De ondersteunde virtuele machines ter ondersteuning van gekoppelde NVMe-schijven worden beschreven op de overzichtssite van Azure Boost in de beschikbaarheidstabel.

Belangrijk

Als uw VM-type niet wordt vermeld, wijzigt u het VM-type.

2. Controleer uw besturingssysteem op NVMe-gereedheid

Het besturingssysteem moet NVMe-apparaten ondersteunen, zoals apparaatstuurprogramma's en initrdm, het tijdelijke bestandssysteem dat tijdens het opstarten wordt gebruikt, moeten worden voorbereid. Daarnaast moet u de koppelpunten van de bestandssystemen valideren terwijl ze controleren of u de naam van het SCSI-apparaat (/dev/sdX) gebruikt.

Om dit proces eenvoudiger te maken, hebben we een bash-script gemaakt dat de prevalidatie voor u uitvoert.

2.1 Controleer het controllertype van de VM

2.1.1 Controlecontrollertype met behulp van 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 Controlecontrollertype met behulp van Azure CLI
$ az vm show --name nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Type controller controleren met behulp van Azure Portal

Schermopname van Azure Portal om de controller te controleren.

2.2 Uitvoeren preflight check script

Het bash-script wijzigt niets automatisch op uw systeem. Het biedt alleen aanbevelingen voor opdrachten die moeten worden uitgevoerd.

Aanbevelingen zijn onder meer

  • NVMe-modules
  • GRUB-configuratie
  • /etc/fstab controleert op apparaten

Gebruik de volgende opdracht (curl) om het script te starten:

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 #

In dit voorbeeld zijn initrd en de kernel niet gereed voor NVMe, waarbij de dracut-opdrachten het besturingssysteem inschakelen.

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. Uw virtuele machine converteren naar NVMe

Als u het besturingssysteem wilt converteren, zijn er meerdere stappen vereist.

Wijzig de metagegevens van de besturingssysteemschijf om NVMe-mogelijkheden op te nemen. Wijzig de SCSI-controller in NVMe. Dit proces wordt geautomatiseerd met behulp van een PowerShell-script.

3.1 Download het PowerShell-script

Gebruik de volgende opdracht om het PowerShell-script te downloaden uit de GitHub-opslagplaats:

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. De virtuele machine converteren

Als u het script wilt converteren, is gedetailleerde documentatie ook beschikbaar in de GitHub-opslagplaats.

U kunt bepalen of de VIRTUELE machine bijvoorbeeld automatisch moet worden gestart na de herconfiguratie.

.\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 Controleer het resultaat

3.3.1 Resultaat controleren in Azure Portal

Schermopname van Azure Portal.

3.3.2 Resultaat controleren in PowerShell
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. Controleer uw besturingssysteem

4.1 Apparaten controleren

U kunt de apparaten controleren met behulp van de nvme-opdracht. Als de nvme-opdracht ontbreekt, installeert u het pakket 'nvme-cli'.

nvme list

In de uitvoer moeten de besturingssysteemschijf en de gegevensschijven worden weergegeven. Schermopname van besturingssysteemschijven en gegevensschijven.

4.2 Udev-bestand ophalen voor NVMe (optioneel)

Op virtuele SCSI-machines hebben de udev-regels die zijn geïntegreerd in waagent (Azure-agent) koppelingen /dev/disk/azure/scsi1/lunX gemaakt om de gegevensschijven te identificeren. Omdat SCSI niet meer wordt gebruikt, zijn de regels niet meer van toepassing.

Met een van de twee beschikbare opties voor het implementeren van udev-regels met NVMe-functionaliteit ziet u nieuwe symbolische koppelingen in de map /dev/disk/azure/data/by-lun. Deze map is de vervanging voor /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 Handmatig downloaden van udev-bestand

Gebruik deze opdracht om het nieuwe udev-regelsbestand te downloaden: curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/NVMe-Preflight-Check/88-azure-nvme-data-disk.rules en voer vervolgens uit udevadm control --reload-rules && udevadm trigger om de udev-regels opnieuw te laden.

4.2.2 Gereed om pakketten te installeren met behulp van Azure NVMe-hulpprogramma's

Er zijn vooraf gecompileerde pakketten beschikbaar op index van /results/cjp256/azure-nvme-utils/voor meerdere distributies. We werken aan het inschakelen en integreren van Azure NVMe-hulpprogramma's in alle belangrijke distributies.