Konvertieren virtueller Linux-Computer von SCSI in NVMe

In diesem Artikel besprechen wir den Prozess der Konvertierung virtueller Computer (VMs) unter Linux von SCSI in NVMe-Speicher. Durch die Migration zu NVMe können Sie von der verbesserten Leistung und Skalierbarkeit profitieren.

SCSI und NVMe

Azure-VMs unterstützen zwei Arten von Speicherschnittstellen: Small Computer System Interface (SCSI) und NVMe. Die SCSI Schnittstelle ist ein Legacystandard, der physische Konnektivität und Datenübertragung zwischen Computern und Peripheriegeräten ermöglicht. NVMe ähnelt SCSI darin, dass es Konnektivität und Datenübertragung bietet, aber NVMe ist eine schnellere und effizientere Schnittstelle für die Datenübertragung zwischen Servern und Speichersystemen.

Hinweis

VMs, die mit dem vertrauenswürdigen Start konfiguriert sind, können nicht von SCSI zu NVMe wechseln.

Unterstützung für VMs mit SCSI-Schnittstelle

Azure unterstützt weiterhin die SCSI-Schnittstelle in den Versionen der VM-Angebote, die SCSI-Speicher bereitstellen. Allerdings haben nicht alle neuen VM-Serien künftig SCSI-Speicher als Option.

Was ändert sich für Ihren virtuellen Computer?

Wenn Sie die Hostschnittstelle von SCSI in NVMe ändern, ändert sich der Remotespeicher (Betriebssystemdatenträger oder Datenträger) nicht. Allerdings ändert sich die Art und Weise, wie die Betriebssysteme die Datenträger sehen.

SCSI-fähige VM NVMe-fähige VM
Betriebssystem-Datenträger /dev/sda /dev/nvme0n1
Temporärer Datenträger /dev/sdb /dev/sda
Erster Datenträger /dev/sdc /dev/nvme0n2

In den folgenden Abschnitten wird ein Leitfaden zum Konvertieren Ihres virtuellen Azure-Computers von SCSI in NVMe mithilfe von Azure Boost bereitgestellt, um sicherzustellen, dass Sie diese Leistungsverbesserungen vollständig nutzen und sich einen Wettbewerbsvorteil in der Cloud Computing-Landschaft verschaffen können.

Migrieren Ihres virtuellen Computers (Virtual Machine, VM) von SCSI zu NVMe

Um von SCSI zu NVMe zu migrieren, müssen einige Schritte befolgt werden:

  1. Überprüfen Sie, ob die Serie Ihres virtuellen Computers NVMe unterstützt
  2. Überprüfen Sie Ihr Betriebssystem auf NVMe-Bereitschaft
  3. Konvertieren Sie Ihren virtuellen Computer in NVMe
  4. Überprüfen Sie Ihr Betriebssystem

1. Überprüfen Sie, ob die Serie Ihres virtuellen Computers NVMe unterstützt

Die unterstützten virtuellen Computer zur Unterstützung von angefügten NVMe-Datenträgern werden auf der Azure Boost-Übersichtswebsite in der Verfügbarkeitstabelle beschrieben.

Wichtig

Wenn Ihr VM-Typ nicht aufgeführt ist, ändern Sie den VM-Typ.

2. Überprüfen Sie Ihr Betriebssystem auf NVMe-Bereitschaft

Das Betriebssystem muss NVMe-Geräte unterstützen, darunter z. B. Gerätetreiber und Initrdm. Das temporäre Dateisystem, das beim Start verwendet wird, muss vorbereitet sein. Darüber hinaus müssen Sie die Bereitstellungspunkte der Dateisysteme validieren, da sie überprüfen, ob Sie den SCSI-Gerätenamen (/dev/sdX) verwenden.

Um diesen Prozess zu vereinfachen, wurde ein Bash-Skript erstellt, das die Vorabvalidierung für Sie durchführt.

2.1 Überprüfen des Controllertyps des virtuellen Computers

2.1.1 Überprüfen des Controllertyps mithilfe von 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 Überprüfen des Controllertyps mithilfe von Azure CLI
$ az vm show --name nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Überprüfen des Controllertyps über das Azure-Portal

Screenshot des Azure-Portals zum Überprüfen des Controllers.

2.2 Ausführen des Skripts „Preflightüberprüfung“

Das Bash-Skript ändert nichts automatisch in Ihrem System. Es enthält nur Empfehlungen für Befehle, die ausgeführt werden sollen.

Empfehlungen umfassen

  • NVMe-Module
  • GRUB-Konfiguration
  • /etc/fstab-Überprüfungen für Geräte

Verwenden Sie zum Starten des Skripts den folgenden Befehl (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 #

In diesem Beispiel sind Initrd und der Kernel nicht bereit für NVMe; die Ausführung der dracut-Befehle aktiviert das Betriebssystem.

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. Konvertieren Sie Ihren virtuellen Computer in NVMe

Zum Konvertieren des Betriebssystems sind mehrere Schritte erforderlich.

Ändern Sie die Metadaten des Betriebssystemdatenträgers so, dass NVMe-Funktionen enthalten sind. Ändern Sie den SCSI-Controller in NVMe. Dieser Prozess wird mithilfe eines PowerShell-Skripts automatisiert.

3.1 Laden Sie das PowerShell-Skript herunter

Verwenden Sie den folgenden Befehl, um das PowerShell-Skript aus dem GitHub-Repository herunterzuladen:

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. Konvertieren Sie den virtuellen Computer

Führen Sie zum Konvertieren das Skript aus; eine ausführliche Dokumentation ist auch im GitHub-Repository verfügbar.

Sie können entscheiden, ob beispielsweise der virtuelle Computer nach der Neukonfiguration automatisch gestartet werden soll.

.\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 Überprüfen Sie das Ergebnis

3.3.1 Überprüfen Sie das Ergebnis im Azure-Portal

Screenshot des Azure-Portals.

3.3.2 Überprüfen Sie das Ergebnis in PowerShell
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. Überprüfen Sie Ihr Betriebssystem

4.1 Überprüfen Sie Geräte

Sie können die Geräte mithilfe des nvme-Befehls überprüfen; wenn der nvme-Befehl fehlt, installieren Sie das „nvme-cli“-Paket.

nvme list

Die Ausgabe sollte den Betriebssystemdatenträger und die Datenträger anzeigen. Screenshot von Betriebssystemdatenträgern und Datenträgern.

4.2 Rufen Sie die udev-Datei für NVMe ab (Optional)

Auf virtuellen SCSI-Computern haben die in waagent (Azure Agent) integrierten udev-Regeln Verknüpfungen in /dev/disk/azure/scsi1/lunX erstellt, um die Datenträger zu identifizieren. Da SCSI nicht mehr verwendet wird, gelten die Regeln nicht.

Mit einer der beiden verfügbaren Optionen zum Bereitstellen von NVMe-fähigen udev-Regeln werden neue symbolische Verknüpfungen im Verzeichnis /dev/disk/azure/data/by-lun angezeigt. Dieses Verzeichnis ist der Ersatz für /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 Laden Sie die udev-Datei manuell herunter

Verwenden Sie den curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/main/NVMe-Preflight-Check/88-azure-data-disk.rules --output /usr/lib/udev/rules.d/88-azure-data-disk.rules-Befehl, um die neue udev-Regeldatei herunterzuladen, und führen Sie dann udevadm control --reload-rules && udevadm trigger aus, um die udev-Regeln neu zu laden.

4.2.2 Bereit zum Installieren von Paketen mithilfe von Azure NVMe-Hilfsprogrammen

Es sind vorkompilierte Pakete im Index von /results/cjp256/azure-nvme-utils/für mehrere Distributionen verfügbar. Wir arbeiten daran, Azure NVMe-Hilfsprogramme in allen wichtigen Distributionen zu aktivieren und zu integrieren.