Поделиться через


Преобразование Виртуальные машины с Linux из SCSI в NVMe

В этой статье рассматривается процесс преобразования виртуальных машин под управлением Linux из SCSI в хранилище NVMe. Переходя на NVMe, вы можете воспользоваться преимуществами повышения производительности и масштабируемости.

SCSI и NVMe

Виртуальные машины Azure поддерживают два типа интерфейсов хранилища: небольшой системный интерфейс компьютера (SCSI) и NVMe. Интерфейс SCSI — это устаревший стандарт, обеспечивающий физическое подключение и передачу данных между компьютерами и периферийными устройствами. NVMe аналогичен SCSI, что обеспечивает подключение и передачу данных, но NVMe — это более быстрый и эффективный интерфейс для передачи данных между серверами и системами хранения.

Примечание.

Виртуальные машины, настроенные с помощью доверенного запуска, не могут переходить от SCSI к NVMe.

Поддержка виртуальных машин интерфейса SCSI

Azure продолжает поддерживать интерфейс SCSI в версиях предложений виртуальных машин, предоставляющих хранилище SCSI. Однако не все новые серии виртуальных машин имеют хранилище SCSI в качестве варианта.

Что изменилось для виртуальной машины?

Изменение интерфейса узла с SCSI на NVMe не изменяет удаленное хранилище (диск ОС или диски данных), но изменяет способ просмотра операционных систем дисков.

Виртуальная машина с поддержкой SCSI Виртуальная машина с поддержкой NVMe
Диск ОС /dev/sda /dev/nvme0n1
Временный диск /dev/sdb /dev/sda
Первый диск данных /dev/sdc /dev/nvme0n2

В следующих разделах мы предоставляем руководство по преобразованию виртуальной машины Azure из SCSI в NVMe с помощью Azure Boost, обеспечивая полный доступ к этим улучшениям производительности и поддержанию конкурентного края в ландшафте облачных вычислений.

Перенос виртуальной машины из SCSI в NVMe

Чтобы выполнить миграцию из SCSI в NVMe, необходимо выполнить некоторые действия.

  1. Проверьте, поддерживает ли серия виртуальных машин NVMe
  2. Проверка готовности операционной системы для NVMe
  3. Преобразование виртуальной машины в NVMe
  4. Проверка операционной системы

1. Проверьте, поддерживает ли серия виртуальных машин NVMe

Поддерживаемые виртуальные машины для поддержки подключенных дисков NVMe описаны на сайте обзора Azure Boost в таблице доступности.

Внимание

Если тип виртуальной машины не указан, измените тип виртуальной машины.

2. Проверьте готовность NVMe к операционной системе

Операционная система должна поддерживать устройства NVMe, например драйверы устройств и initrdm, временную файловую систему, используемую во время загрузки, необходимо подготовить. Кроме того, необходимо проверить точки подключения файловых систем, так как они проверяют, используется ли имя устройства SCSI (/dev/sdX).

Чтобы упростить этот процесс, мы создали скрипт bash, который выполняет предварительное выполнение.

2.1 Проверка типа контроллера виртуальной машины

2.1.1 Проверка типа контроллера с помощью 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 Проверка типа контроллера с помощью Azure CLI
$ az vm show --name nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Проверка типа контроллера с помощью портал Azure

Снимок экрана: портал Azure для проверки контроллера.

2.2 Запуск скрипта предварительной проверки

Скрипт bash не изменяет ничего в системе автоматически. Он предоставляет рекомендации только для выполнения команд.

Рекомендации включают в себя

  • Модули NVMe
  • Конфигурация GRUB
  • Проверка /etc/fstab для устройств

Чтобы запустить скрипт, используйте следующую команду (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 #

В этом примере initrd и ядро не готовы к NVMe, выполнив команды dracut, включите операционную систему.

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. Преобразование виртуальной машины в NVMe

Для преобразования операционной системы требуются несколько шагов.

Измените метаданные диска ОС, чтобы включить возможности NVMe изменить контроллер SCSI на NVMe Этот процесс автоматизирован с помощью скрипта PowerShell.

3.1 Скачивание скрипта PowerShell

Чтобы скачать скрипт PowerShell из репозитория GitHub, используйте следующую команду:

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. Преобразование виртуальной машины

Чтобы преобразовать скрипт, подробная документация также доступна в репозитории GitHub.

Вы можете решить, следует ли автоматически запустить виртуальную машину после перенастройки.

.\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 Проверка результата

3.3.1 Проверка результата портал Azure

Снимок экрана: портал Azure.

3.3.2 Проверка результата в PowerShell
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. Проверка операционной системы

4.1 Проверка устройств

Вы можете проверить устройства с помощью команды nvme, если отсутствует команда nvme, установите пакет nvme-cli.

nvme list

Выходные данные должны отображать диск ОС и диски данных. Снимок экрана: диски ОС и диски данных.

4.2 Получение udev-файла для NVMe (необязательно)

На виртуальных машинах SCSI правила udev, интегрированные в waagent (агент Azure), создали ссылки для /dev/disk/azure/scsi1/lunX идентификации дисков данных. Так как SCSI больше не используется, правила не применяются.

С одним из двух доступных вариантов развертывания правил udev с поддержкой NVMe в каталоге /dev/disk/azure/data/by-lunотображаются новые символьные ссылки. Этот каталог является заменой /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 Вручную скачивание файла udev

Чтобы скачать новый файл правил udev, используйте следующую команду: curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/NVMe-Preflight-Check/88-azure-nvme-data-disk.rules затем выполните перезагрузку udevadm control --reload-rules && udevadm trigger правил udev.

4.2.2 Ready to install packages using Azure NVMe utils

В индексе /results/cjp256/azure-nvme-utils/для нескольких дистрибутивов доступны предварительно скомпилированные пакеты. Мы работаем над включением и интеграцией ресурсов NVMe Azure во всех основных дистрибутивах.