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: Mały interfejs systemowy komputera (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.
Uwaga
Maszyny wirtualne skonfigurowane przy użyciu zaufanego uruchamiania nie mogą przechodzić z SCSI do NVMe.
Obsługa maszyn wirtualnych interfejsu 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.
Maszyna wirtualna z obsługą interfejsu SCSI | Maszyna wirtualna z obsługą nvme | |
---|---|---|
Dysk systemu operacyjnego | /dev/sda | /dev/nvme0n1 |
Dysk tymczasowy | /dev/sdb | /dev/sda |
Pierwszy dysk danych | /dev/sdc | /dev/nvme0n2 |
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:
- Sprawdź, czy seria maszyn wirtualnych obsługuje urządzenie NVMe
- Sprawdzanie gotowości urządzenia NVMe do systemu operacyjnego
- Konwertowanie maszyny wirtualnej na nvme
- Sprawdzanie systemu operacyjnego
1. Sprawdź, czy seria maszyn wirtualnych obsługuje urządzenie NVMe
Obsługiwane maszyny wirtualne do obsługi dysków dołączonych NVMe zostały opisane w witrynie przeglądu narzędzia Azure Boost w tabeli dostępności.
Ważne
Jeśli typ maszyny wirtualnej nie jest wymieniony na liście, zmień typ maszyny wirtualnej.
2. Sprawdź system operacyjny pod kątem gotowości urządzenia NVMe
System operacyjny musi obsługiwać urządzenia NVMe, na przykład sterowniki urządzeń i initrdm, tymczasowy system plików używany podczas rozruchu, należy przygotować. Oprócz tego należy zweryfikować punkty instalacji systemów plików, gdy sprawdzają, czy używasz nazwy urządzenia SCSI (/dev/sdX).
Aby ułatwić ten proces, utworzyliśmy skrypt powłoki bash, który wykonuje prewalidację.
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 nvme-conversion-vm
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 nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
"storageProfile": {
...
"diskControllerType": "SCSI",
...
2.1.3 Sprawdzanie typu kontrolera przy użyciu witryny Azure Portal
2.2 Uruchamianie skryptu sprawdzania wstępnego
Skrypt powłoki bash nie zmienia automatycznie niczego w systemie. Zawiera tylko zalecenia dotyczące poleceń do uruchomienia.
Zalecenia obejmują
- Moduły NVMe
- Konfiguracja gruba
- /etc/fstab sprawdza, czy urządzenia
Aby uruchomić skrypt, użyj następującego polecenia (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 #
W tym przykładzie initrd i jądro nie są gotowe do nvme, uruchamiając polecenia dracut włączają system operacyjny.
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. Konwertowanie maszyny wirtualnej na nvme
Aby przekonwertować system operacyjny, wymagane jest wykonanie wielu kroków.
Zmień metadane dysku systemu operacyjnego, aby obejmowały możliwości NVMe Zmień kontroler SCSI na NVMe Ten proces jest zautomatyzowany przy użyciu skryptu programu PowerShell.
3.1 Pobieranie skryptu programu PowerShell
Aby pobrać skrypt programu PowerShell z repozytorium GitHub, użyj następującego polecenia:
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. Konwertowanie maszyny wirtualnej
Aby przekonwertować skrypt, szczegółowa dokumentacja jest również dostępna w repozytorium GitHub.
Możesz zdecydować, czy na przykład maszyna wirtualna powinna zostać uruchomiona automatycznie po rekonfiguracji.
.\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 Sprawdzanie wyniku
3.3.1 Sprawdzanie wyniku w witrynie Azure Portal
3.3.2 Sprawdzanie wyniku w programie PowerShell
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>
4. Sprawdzanie systemu operacyjnego
4.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.
4.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.
Jedna z dwóch dostępnych opcji wdrażania reguł udev z włączoną funkcją NVMe zawiera 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 #
4.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/NVMe-Preflight-Check/88-azure-nvme-data-disk.rules
a następnie uruchom polecenie udevadm control --reload-rules && udevadm trigger
, aby ponownie załadować reguły udev.
4.2.2 Gotowe do zainstalowania pakietów przy użyciu narzędzia Azure NVMe
Istnieją wstępnie skompilowane pakiety dostępne w indeksie /results/cjp256/azure-nvme-utils/dla wielu dystrybucji. Pracujemy nad włączaniem i integrowaniem narzędzi azure NVMe we wszystkich głównych dystrybucjach.