次の方法で共有


Linux を実行している仮想マシンの SCSI から NVMe への変換

この記事では、Linux を実行している仮想マシン (VM) を SCSI から NVMe ストレージに変換するプロセスについて説明します。 NVMe に移行すると、その向上したパフォーマンスとスケーラビリティを活用できます。

SCSI と NVMe

Azure VM は、Small Computer System Interface (SCSI) と NVMe の 2 種類のストレージ インターフェイスをサポートしています。 SCSI インターフェイスは、コンピューターと周辺機器の間の物理的な接続とデータ転送を提供するレガシ標準です。 NVMe は、接続性とデータ転送を提供するという点では SCSI と似ていますが、サーバーとストレージ システムの間のデータ転送については、NVMe の方がより高速で効率的なインターフェイスです。

Note

トラステッド起動で構成された 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 をサポートしているかどうかを確認する

NVMe に接続されているディスクをサポートするサポート対象の仮想マシンについては、「Azure Boost の概要」サイトの可用性一覧で説明されています。

重要

お使いの 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 portal を使用してコントローラーの種類を確認する

コントローラーを確認する Azure portal のスクリーンショット。

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 機能を含むように OS ディスクのメタデータを変更します。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 リポジトリで詳細なドキュメントも入手できます。

たとえば、再構成後に 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 portal で結果を確認する

Azure portal のスクリーンショット。

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 規則をデプロイする 2 つの選択可能なオプションのいずれかを使用すると、ディレクトリ /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 utils を使用してインストールできるパッケージ

Index of/results/cjp256/azure-nvme-utils/ 上で、複数のディストリビューション用のプリコンパイル済みパッケージを入手できます。 Microsoft では、すべての主要なディストリビューションで Azure NVMe ユーティリティを有効にして統合することに取り組んでいます。