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 に移行するには、いくつかの手順に従う必要があります。
- 仮想マシン シリーズが NVMe をサポートしているかどうかを確認する
- オペレーティング システムが NVMe に対応しているかどうかを確認する
- 仮想マシンを NVMe に変換する
- オペレーティング システムを確認する
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 を使用してコントローラーの種類を確認する
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 で結果を確認する
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 ディスクとデータ ディスクが表示されます。
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 ユーティリティを有効にして統合することに取り組んでいます。