共用方式為


將執行 Linux 的虛擬機器從 SCSI 轉換為 NVMe

在本文中,我們會討論將執行 Linux 的虛擬機器 (VM) 從 SCSI 轉換為 NVMe 儲存體的流程。 透過移轉至 NVMe,您可以利用其改善的效能與可擴縮性。

SCSI 與 NVMe

Azure VM 支援兩種類型的儲存體介面:小型電腦系統介面 (SCSI) 和 NVMe。 SCSI 是舊版標準,可在電腦與周邊裝置之間提供實體連線能力和資料傳輸。 NVMe 與 SCSI 類似,因為它提供連線和資料傳輸,但 NVMe 是伺服器與儲存體系統之間資料傳輸的更快且更有效率的介面。

注意

使用可信啟動設定的 VM 無法從 SCSI 移至 NVMe。

支援 SCSI 介面 VM

Azure 會繼續針對提供 SCSI 儲存體的 VM 供應項目版本支援 SCSI 介面。 不過,並非所有新的 VM 系列都會有 SCSI 儲存體作為未來選項。

VM 有哪些變更項目?

將主機介面從 SCSI 變更為 NVMe 並不會變更遠端記憶體(OS 磁碟或數據磁碟),但變更操作系統看到磁碟的方式。

已啟用 SCSI 的 VM 已啟用 NVMe 的 VM
OS 磁碟 /dev/sda /dev/nvme0n1
暫存磁碟 /dev/sdb /dev/sda
第一個資料磁碟 /dev/sdc /dev/nvme0n2

在下列各節中,我們會提供使用 Azure Boost 將 Azure VM 從 SCSI 轉換為 NVMe 的指南,以確保您可以充分利用這些效能改善,並在雲端運算環境中保持競爭優勢。

將虛擬機 (VM) 從 SCSI 遷移至 NVMe

若要從 SCSI 移轉至 NVMe,必須遵循一些步驟:

  1. 檢查您的虛擬機系列是否支援 NVMe
  2. 檢查您的作業系統是否有 NVMe 整備
  3. 將虛擬機轉換為 NVMe
  4. 檢查您的作業系統

1.檢查虛擬機系列是否支援 NVMe

可用性數據表中的 Azure Boost 概觀網站會說明支援 NVMe 連結磁碟的支持虛擬機。

重要

如果未列出您的 VM 類型,請變更 VM 類型。

2.檢查您的作業系統是否有 NVMe 整備程度

操作系統需要支援 NVMe 裝置,例如設備驅動器和 initrdm、開機期間使用的暫存檔系統,必須做好準備。 此外,您需要驗證文件系統的裝入點,因為它們會檢查您是否使用 SCSI 裝置名稱 (/dev/sdX)。

為了簡化此程式,我們建立了bash腳本,為您執行預先驗證。

2.1 檢查 VM 的控制器類型

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

若要轉換操作系統,需要執行多個步驟。

變更 OS 磁碟的元數據以包含 NVMe 功能 將 SCSI 控制器變更為 NVMe 此程式會使用 PowerShell 腳本自動化。

3.1 下載 PowerShell 腳本

若要從 GitHub 存放庫下載 PowerShell 腳本,請使用下列命令:

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 存放庫也會提供詳細的檔。

例如,您可以決定是否應該在重新設定之後自動啟動 VM。

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

輸出應該會顯示 OS 磁碟和數據磁碟。 OS 磁碟和數據磁碟的螢幕快照。

4.2 取得 NVMe 的 udev 檔案 (選用)

在 SCSI 虛擬機上,waagent (Azure 代理程式) 中整合的 udev 規則已建立連結 /dev/disk/azure/scsi1/lunX ,以識別數據磁碟。 由於不再使用 SCSI,因此不會套用規則。

使用兩個可用選項之一來部署已啟用 NVMe 的 udev 規則,您會在目錄中 /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 準備使用 Azure NVMe 公用程式安裝套件

/results/cjp256/azure-nvme-utils/for multiple distributions 的索引有預先編譯的套件。 我們正致力於在所有主要散發套件中啟用和整合 Azure NVMe utils。