Aracılığıyla paylaş


Linux Çalıştıran Sanal Makineler SCSI'den NVMe'ye Dönüştürme

Bu makalede, Linux çalıştıran sanal makineleri (VM) SCSI'den NVMe depolama alanına dönüştürme işlemi ele alınıyor. NVMe'ye geçiş yaparak geliştirilmiş performans ve ölçeklenebilirlik özelliklerinden yararlanabilirsiniz.

SCSI ve NVMe karşılaştırması

Azure VM'leri iki tür depolama arabirimini destekler: Küçük Bilgisayar Sistemi Arabirimi (SCSI) ve NVMe. SCSI arabirimi, bilgisayarlar ve çevre birimi cihazları arasında fiziksel bağlantı ve veri aktarımı sağlayan eski bir standarttır. NVMe, bağlantı ve veri aktarımı sağladığı için SCSI'ye benzer, ancak NVMe sunucular ve depolama sistemleri arasında veri aktarımı için daha hızlı ve daha verimli bir arabirimdir.

Not

Güvenilen Başlatma ile yapılandırılan VM'ler SCSI'den NVMe'ye taşınamaz.

SCSI arabirimi VM'leri için destek

Azure, SCSI depolama alanı sağlayan VM tekliflerinin sürümlerinde SCSI arabirimini desteklemeye devam eder. Ancak, tüm yeni VM serilerinin bir seçenek olarak SCSI depolama alanı yoktur.

VM'niz için neler değişiyor?

Konak arabiriminin SCSI'den NVMe'ye değiştirilmesi uzak depolama alanını (işletim sistemi diski veya veri diskleri) değiştirmez, ancak işletim sistemlerinin diskleri görme şeklini değiştirir.

SCSI özellikli VM NVMe özellikli VM
İşletim sistemi diski /dev/sda /dev/nvme0n1
Geçici Disk /dev/sdb /dev/sda
İlk Veri Diski /dev/sdc /dev/nvme0n2

Aşağıdaki bölümlerde Azure Boost kullanarak Azure VM'nizi SCSI'den NVMe'ye dönüştürmek için bu performans iyileştirmelerinden tam olarak yararlanabilmenizi ve bulut bilişim alanında rekabet avantajını korumanızı sağlayan bir kılavuz sağlıyoruz.

Sanal makinenizi (VM) SCSI'den NVMe'ye geçirme

SCSI'den NVMe'ye geçiş yapmak için bazı adımların izlenmesi gerekir:

  1. Sanal makine serinizin NVMe'i desteklenip desteklemediğini denetleyin
  2. İŞLETIM sisteminizin NVMe hazır olup olmadığını denetleyin
  3. Sanal makinenizi NVMe'ye dönüştürme
  4. İşletim sisteminizi denetleme

1. Sanal makine serinizin NVMe'i desteklenip desteklemediğini denetleyin

NVMe bağlı disklerini desteklemek için desteklenen sanal makineler, kullanılabilirlik tablosundaki Azure Boost genel bakış sitesinde açıklanmıştır.

Önemli

VM türünüz listelenmiyorsa VM türünü değiştirin.

2. NVMe hazır olup olmadığını kontrol edin

İşletim sisteminin NVMe cihazlarını desteklemesi gerekir; örneğin, cihaz sürücüleri ve initrdm, önyükleme sırasında kullanılan geçici dosya sisteminin hazırlanması gerekir. Buna ek olarak, SCSI cihaz adını (/dev/sdX) kullanıp kullanmayabileceğinizi denetledikleri için dosya sistemlerinin bağlama noktalarını doğrulamanız gerekir.

Bu işlemi kolaylaştırmak için sizin için prevalidasyonunu yerine getiren bir bash betiği oluşturduk.

2.1 VM'nin Denetleyici Türünü Denetleme

2.1.1 PowerShell kullanarak Denetleyici Türünü Denetleme
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 kullanarak Denetleyici Türünü Denetleme
$ az vm show --name nvme-conversion-vm --resource-group nvme-conversion
{
"additionalCapabilities": {
...
 "storageProfile": {
 ...
   "diskControllerType": "SCSI",
 ...
2.1.3 Azure portalını kullanarak Denetleyici Türünü Denetleme

Denetleyiciyi denetlemek için Azure portalının ekran görüntüsü.

2.2 Ön Kontrol Denetimi Betiğini Çalıştır

Bash betiği sisteminizdeki hiçbir şeyi otomatik olarak değiştirmez. Yalnızca çalıştırılacak komutlar için öneriler sağlar.

Öneriler şunlardır:

  • NVMe modülleri
  • GRUB yapılandırması
  • Cihazlar için /etc/fstab denetimleri

Betiği başlatmak için aşağıdaki komutu (curl) kullanın:

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 #

Bu örnekte initrd ve çekirdek NVMe için hazır değildir, dracut komutlarının çalıştırılması işletim sistemini etkinleştirir.

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. Sanal makinenizi NVMe'ye dönüştürme

İşletim sistemini dönüştürmek için birden çok adım gereklidir.

İşletim sistemi diskinin meta verilerini NVMe özelliklerini içerecek şekilde değiştirin SCSI denetleyicisini NVMe olarak değiştirin Bu işlem bir PowerShell betiği kullanılarak otomatikleştirilir.

3.1 PowerShell betiğini indirme

PowerShell betiğini GitHub deposundan indirmek için aşağıdaki komutu kullanın:

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. Sanal Makineyi Dönüştürme

Betiği dönüştürmek için, GitHub deposunda ayrıntılı belgeler de sağlanır.

Örneğin, yeniden yapılandırmadan sonra VM'nin otomatik olarak başlatılıp başlatılmayacağı konusunda karar vekleyebilirsiniz.

.\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 Sonucu denetleyin

3.3.1 Azure portalında sonucu denetleme

Azure portalının ekran görüntüsü.

3.3.2 PowerShell'de sonucu denetleme
PS C:\Users> $vm = Get-AzVM -name nvme-conversion-vm
PS C:\Users> $vm.StorageProfile.DiskControllerType
NVMe
PS C:\Users>

4. İşletim sisteminizi denetleyin

4.1 Cihazları denetleme

Nvme komutunu kullanarak cihazları kontrol edebilirsiniz. Nvme komutu eksikse "nvme-cli" paketini yükleyin.

nvme list

Çıktıda işletim sistemi diski ve veri diskleri gösterilmelidir. İşletim sistemi disklerinin ve veri disklerinin ekran görüntüsü.

4.2 NVMe için udev dosyası alma (İsteğe bağlı)

SCSI sanal makinelerinde waagent (Azure aracısı) ile tümleşik udev kuralları, veri disklerini tanımlamak için içinde /dev/disk/azure/scsi1/lunX bağlantılar oluşturdu. SCSI artık kullanılmadığından kurallar geçerli değildir.

NVMe özellikli udev kurallarını dağıtmak için kullanılabilen iki seçenek arasında dizininde /dev/disk/azure/data/by-lunyeni sembolik bağlantılar görürsünüz. Bu dizin, öğesinin /dev/disk/azure/scsi1yerini alır.

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 dosyasının el ile indirilmesi

Yeni udev kuralları dosyasını indirmek için şu komutu kullanın: curl https://raw.githubusercontent.com/Azure/SAP-on-Azure-Scripts-and-Utilities/refs/heads/main/NVMe-Preflight-Check/88-azure-nvme-data-disk.rules ve ardından udev kurallarını yeniden yüklemek için komutunu çalıştırın udevadm control --reload-rules && udevadm trigger .

4.2.2 Azure NVMe yardımcı programları kullanarak paketleri yüklemeye hazır

Birden çok dağıtım için /results/cjp256/azure-nvme-utils/dizininde önceden derlenmiş paketler vardır. Azure NVMe yardımcı programlarını tüm önemli dağıtımlarda etkinleştirme ve tümleştirme üzerinde çalışıyoruz.