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:
- Überprüfen Sie, ob die Serie Ihres virtuellen Computers NVMe unterstützt
- Überprüfen Sie Ihr Betriebssystem auf NVMe-Bereitschaft
- Konvertieren Sie Ihren virtuellen Computer in NVMe
- Ü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
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
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.
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.