Udostępnij przez


Konwertowanie maszyn wirtualnych z systemem Linux z SCSI na nvme

W tym artykule omówiono proces konwertowania maszyn wirtualnych z systemem Linux z SCSI na magazyn NVMe. Migrując do nvme, możesz skorzystać z ulepszonej wydajności i skalowalności.

SCSI a NVMe

Maszyny wirtualne platformy Azure obsługują dwa typy interfejsów magazynu: Small Computer System Interface (SCSI) i NVMe. Interfejs SCSI jest starszym standardem, który zapewnia łączność fizyczną i transfer danych między komputerami i urządzeniami peryferyjnymi. NvMe jest podobny do SCSI, ponieważ zapewnia łączność i transfer danych, ale NVMe jest szybszym i bardziej wydajnym interfejsem do transferu danych między serwerami i systemami magazynowania.

Obsługa maszyn wirtualnych z interfejsem SCSI

Platforma Azure nadal obsługuje interfejs SCSI w wersjach ofert maszyn wirtualnych, które zapewniają magazyn SCSI. Jednak nie wszystkie nowe serie maszyn wirtualnych mają magazyn SCSI jako opcję w przyszłości.

Co się zmienia dla maszyny wirtualnej?

Zmiana interfejsu hosta z SCSI na NVMe nie zmienia magazynu zdalnego (dysku systemu operacyjnego lub dysków danych), ale zmienia sposób, w jaki systemy operacyjne widzą dyski.

Disk Maszyna wirtualna z obsługą interfejsu SCSI Maszyna wirtualna NVMe z dyskiem tymczasowym SCSI (np. Ebds_v5) Maszyna wirtualna NVMe z tymczasowym dyskiem NVMe
dysk systemowy /dev/sda /dev/nvme0n1 /dev/nvme0n1
Dysk tymczasowy /dev/sdb /dev/sda /dev/nvme1n1
Pierwszy dysk danych /dev/sdc /dev/nvme0n2 /dev/nvme0n2

Wskazówka

Niektóre typy maszyn wirtualnych mają więcej niż jeden dysk tymczasowy (np. E64ds_v6)

W poniższych sekcjach przedstawiono przewodnik dotyczący konwertowania maszyny wirtualnej platformy Azure z SCSI na nvme przy użyciu narzędzia Azure Boost, dzięki czemu można w pełni wykorzystać te ulepszenia wydajności i utrzymać przewagę konkurencyjną w środowisku przetwarzania w chmurze.

Migrowanie maszyny wirtualnej z SCSI do programu NVMe

Aby przeprowadzić migrację z SCSI do nvme, należy wykonać kilka kroków:

  1. Sprawdź, czy seria maszyn wirtualnych obsługuje urządzenie NVMe
  2. Sprawdź gotowość swojego systemu operacyjnego do obsługi NVMe.
  3. Konwertowanie maszyny wirtualnej na nvme
  4. Sprawdzanie systemu operacyjnego

1. Sprawdź, czy seria maszyn wirtualnych obsługuje urządzenie NVMe

Maszyny wirtualne obsługujące dyski podłączone przez NVMe są opisane w witrynie przeglądowej Azure Boost w tabeli dostępności.

2. Sprawdź system operacyjny pod kątem gotowości urządzenia NVMe

System operacyjny musi obsługiwać urządzenia NVMe, co oznacza, że należy przygotować między innymi sterowniki urządzeń oraz initrdm, czyli tymczasowy system plików używany podczas rozruchu. Oprócz tego należy zweryfikować punkty instalacji systemów plików, gdy sprawdzają, czy używasz nazwy urządzenia SCSI (/dev/sdX).

Skrypt migracji automatycznie może dbać o te kontrole gotowości podczas korzystania z programu -FixOperatingSystemSettings.

2.1 Sprawdź typ kontrolera maszyny wirtualnej

2.1.1 Sprawdź typ kontrolera przy użyciu programu 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 Sprawdzanie typu kontrolera przy użyciu interfejsu wiersza polecenia platformy Azure
$ az vm show --name [your-vm-name] --resource-group [your-resource-group-name]
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Sprawdzanie typu kontrolera przy użyciu witryny Azure Portal

Zrzut ekranu witryny Azure Portal do sprawdzania kontrolera.

2.2 Przygotowanie do migracji

Skrypt migracji może automatycznie dbać o wymagania wstępne podczas korzystania z parametru -FixOperatingSystemSettings .

Jeśli chcesz ręcznie zarządzać wymaganymi zmianami, zweryfikuj poprawność

  • Zainstalowane moduły NVMe wchodzące w skład initrd/initramfs
  • Konfiguracja GRUB obejmuje parametr nvme_core.io_timeout=240
  • /etc/fstab sprawdza urządzenia

Skontaktuj się z dostawcą systemu operacyjnego, aby uwzględnić wszystkie wymagane polecenia w celu zaktualizowania initrd/initramfs.

2.2.1 Przygotowanie programu PowerShell

Wskazówka

Ten krok nie jest wymagany podczas uruchamiania skryptu w programie Azure CloudShell

  1. Instalowanie programu PowerShell przy użyciu polecenia https://aka.ms/powershell

  2. Nawiąż połączenie z platformą Azure przy użyciu Connect-AzAccount i wybierz odpowiednią subskrypcję przy użyciu Select-AzSubscription -Subscription [your-subscription-id]

  3. Ustawianie zasady uruchomienia przy użyciu Set-ExecutionPolicy -ExecutionPolicy Unrestricted

2.2.2 Pobierz skrypt

Skrypt można pobrać przy użyciu polecenia programu 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 Uruchamianie migracji

Skrypt ma wiele dostępnych parametrów:

Parameter Opis Wymagane
-ResourceGroupName Nazwa grupy zasobów maszyny wirtualnej Tak
-VMName Nazwa maszyny wirtualnej na platformie Azure Tak
-NewControllerType Typ kontrolera pamięci masowej, na który powinna zostać przekonwertowana maszyna wirtualna (NVMe lub SCSI) Tak
-VMSize SKU maszyny wirtualnej Azure, na którą chcesz przekonwertować tę maszynę wirtualną Tak
-StartVM Uruchamianie maszyny wirtualnej po konwersji Nie.
-IgnoreSKUCheck Ignoruj sprawdzanie SKU maszyny wirtualnej Nie.
-IgnoreWindowsVersionCheck Ignoruj sprawdzanie wersji systemu Windows Nie.
-FixOperatingSystemSettings Automatyczne naprawianie ustawień systemu operacyjnego przy użyciu poleceń platformy Azure Nie.
-WriteLogfile Tworzenie pliku dziennika Nie.
-IgnoreAzureModuleCheck Nie uruchamiaj sprawdzania zainstalowanych modułów platformy Azure Nie.
-IgnoreOSCheck Nie sprawdzaj gotowości systemu operacyjnego, oczekuje się, że system operacyjny jest gotowy Nie.
-SleepSeconds Czas na uregulowanie zmian na platformie Azure przed uruchomieniem maszyny wirtualnej Nie.

Przykładowe polecenie:

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

Wskazówka

Zawsze można przywrócić interfejs SCSI. Skrypt udostępni Ci polecenie, aby bezpośrednio przywrócić oryginalną konfigurację.

2.3.1 Przykładowe dane wyjściowe
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>

Jeśli później masz problemy z uzyskaniem dostępu do systemu operacyjnego, spróbuj następnie sprawdzić

  • Konsola szeregowa dla systemów operacyjnych Linux

  • Zrzut ekranu z systemu operacyjnego w witrynie Azure Portal

Gdy coś się stanie, zawsze można przywrócić interfejs SCSI przy użyciu polecenia wyświetlanego na końcu skryptu:

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

2.4 Sprawdzanie wyniku

2.4.1 Sprawdź wynik w witrynie Azure Portal

Zrzut ekranu witryny Azure Portal.

2.4.2 Sprawdzanie wyniku w programie PowerShell
PS C:\Users> $vm = Get-AzVM -name [your-vm-name]
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

3. Sprawdzanie systemu operacyjnego

3.1 Sprawdzanie urządzeń

Urządzenia można sprawdzić za pomocą polecenia nvme, jeśli brakuje polecenia nvme, zainstaluj pakiet "nvme-cli".

nvme list

Dane wyjściowe powinny zawierać dysk systemu operacyjnego i dyski danych. Zrzut ekranu przedstawiający dyski systemu operacyjnego i dyski danych.

3.2 Pobierz plik udev dla nvme (opcjonalnie)

Na maszynach wirtualnych SCSI reguły udev zintegrowane w waagent (agent platformy Azure) utworzyły linki w /dev/disk/azure/scsi1/lunX celu zidentyfikowania dysków danych. Ponieważ interfejs SCSI nie jest już używany, reguły nie mają zastosowania.

Jeśli wybierzesz jedną z dwóch dostępnych opcji wdrażania reguł udev z włączoną obsługą NVMe, zobaczysz nowe linki symboliczne w katalogu /dev/disk/azure/data/by-lun. Ten katalog zastępuje element /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 Ręczne pobieranie pliku udev

Aby pobrać nowy plik reguł udev, użyj następującego polecenia: curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/Azure-NVMe-Utils/88-azure-nvme-data-disk.rules a następnie uruchom polecenie udevadm control --reload-rules && udevadm trigger , aby ponownie załadować reguły udev.

3.2.2 Gotowe do zainstalowania pakietów przy użyciu narzędzi maszyn wirtualnych platformy Azure

Istnieją wstępnie skompilowane pakiety dostępne w indeksie /results/cjp256/azure-vm-utils/dla wielu dystrybucji.

Wiele dystrybucji zaczęło już integrować pakiet. Można je zainstalować bezpośrednio z repozytorium.

Dystrybucja Minimalna wersja
SUSE SLES 15 SP5 lub nowszy
RedHat RHEL 9.6 lub nowszy
Ubuntu Ubuntu 25.04 lub nowszy