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:
- Sanal makine serinizin NVMe'i desteklenip desteklemediğini denetleyin
- İŞLETIM sisteminizin NVMe hazır olup olmadığını denetleyin
- Sanal makinenizi NVMe'ye dönüştürme
- İş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
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
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.
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-lun
yeni sembolik bağlantılar görürsünüz. Bu dizin, öğesinin /dev/disk/azure/scsi1
yerini 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.