1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NVMe ディスクコントローラー必須のAzure VMサイズへのサイズ変更は多くの制限がある

Last updated at Posted at 2026-02-06

Azure VM では、ディスクコントローラとして、SCSI と NVMe の二種類があり、どちらのディスクコントローラが利用されるかは、VM サイズ (VM SKU) で決まっています。

補足:
一部の VM SKU では、両方のディスクコントローラが利用できるような SKU もあります。

このディスクコントローラの違いによって、VMサイズの変更が難しい場合があり、このVMサイズの変更について、Azure IaaS のサポートチームの方が、ブログ(NVMe ディスクコントローラー必須の Azure VM サイズについて(Dsv5 から Dsv6 サイズへの変更など))にまとめていただいています。

本ブログでは、このサポートチームのブログの補足となる情報をまとめてみたいと思います。

TL;DR

  • NVMeに対応したVMサイズは、2025年2月時点で40ファミリが存在する
  • SCSI から NVMe に変更するためには、第二世代のVMであり、セキュリティの種類が「標準」であること、Linux OS であり、OS がNVMeをサポートしている
  • Azure Disk Encryption (ADE) を利用している場合は、ADE がサポートしている VM サイズであることを事前に確認する必要がある
  • Azure IaaSサポート チームが公開しているブログでは、Azure NVMe Utilities を利用した SCSI から NVMe への変更手順が紹介されているが、実際に可能なのは Linux OS だけである(Windows OS はブートエラーになる)

NVMe ディスクコントローラが利用可能なVMサイズ

Azure IaaS サポートチームのブログでは、Azure CLI や Azure PowerShell を利用した、NVMe の利用可能サイズの一覧を取得する方法が記載されています。
以下に、2025年2月時点での NVMe ディスクコントローラが利用可能な VM サイズのファミリについて、一覧を示します。

確認した時点では、全部で 40 ファミリが NVMe ディスクコントローラに対応していました。

NVMe ディスクコントローラが利用可能なVMサイズファミリ一覧
  • StandardDadsv7Family
  • StandardDaldsv7Family
  • StandardDalsv7Family
  • StandardDasv7Family
  • StandardDdsv6Family
  • StandardDldsv6Family
  • StandardDlsv6Family
  • StandardDsv6Family
  • StandardEadsv7Family
  • StandardEasv7Family
  • StandardEdsv6Family
  • StandardEsv6Family
  • StandardFXmdsv2Family
  • StandardFXmsv2Family
  • StandardFadsv7Family
  • StandardFaldsv7Family
  • StandardFalsv6Family
  • StandardFalsv7Family
  • StandardFamdsv7Family
  • StandardFamsv6Family
  • StandardFamsv7Family
  • StandardFasv6Family
  • StandardFasv7Family
  • StandardMBDSMediumMemoryv3Family
  • StandardMBSMediumMemoryv3Family
  • standardDadv6Family
  • standardDaldv6Family
  • standardDalv6Family
  • standardDav6Family
  • standardEBDSv5Family
  • standardEBSv5Family
  • standardEIBDSv5Family
  • standardEIBSv5Family
  • standardEadv6Family
  • standardEav6Family
  • standardLaosv4Family
  • standardLasv4Family
  • standardLsv4Family
  • standardMDSMediumMemoryv3Family
  • standardMSMediumMemoryv3Family

NVMe ディスクコントローラを利用するための注意点

NVMe ディスクコントローラを利用するための前提条件は、Azure IaaS サポートチームのブログにてまとめていただいている通り、以下の要件があります。

  • VM が第二世代のVMであること
  • VM OS が、NVMe ディスクコントローラをサポートしていること
  • イメージが、NVMeをサポートしているマーク済みのイメージであること

なお、上記以外の観点でも、二点ほど注意点があります。

1: トラステッド起動で構成された VM を SCSI から NVMe に変更することはできない
Azure IaaS サポートチームのブログに記載はありませんが、MSLearn ドキュメント上でも、トラステッド起動で構成された VM は、NVMe ディスクコントローラを利用する VM サイズに変更できない旨の記載があります。

参考: NVMe に関する一般的な FAQ

トラステッド起動で構成された VM を SCSI から NVMe に移行することはできますか?
いいえ。トラステッド起動で構成された VM を SCSI から NVMe に移行することはできません。

つまり、この制約がありますので、SCSIから NVMe に変更するためには、既存の VM が 第二世代の VM であり、かつセキュリティの種類が標準である VM のみとなります。

2: Azure Disk Encryption (ADE) でサポートされていないサイズがある
Azure Disk Encryption (ADE) を利用している場合にも、注意が必要となります。
例えば、Windows OSの場合、公式ドキュメント 記載の通り、ADE では、一時ディスクを使用した v6 シリーズの VM の暗号化をサポートしていません。

公式ドキュメント抜粋
「一時ディスクを使用した v6 シリーズ VM の暗号化 (Ddsv6、Dldsv6、Edsv6、Dadsv6、Daldsv6、Eadsv6、Dpdsv6、Dpldsv6、Epdsv6、Endsv6)。 詳細については、「Azure の仮想マシンのサイズ」に記載されている各 VM サイズの個別のページを参照してください」

また、Linux OSの場合も、具体的な VM SKU ファミリの記載は見受けられませんが、公式ドキュメント に、v6 シリーズの VM では、ADE がサポートされていない旨の記載があります。

公式ドキュメント抜粋
「Azure Disk Encryption は、Basic、A シリーズ VM、v6 シリーズ VM、または次の最小メモリ要件を満たしていない仮想マシンでは利用できません。」

つまり、Azure Disk Encryption を利用している場合は、NVMe ディスクコントローラを利用する VM サイズへの変更ができない可能性がありますので、注意が必要です。

補足:
Azure IaaS サポートのブログで紹介されている Azure NVMe Utilities の実装においても、2026年2月時点で確認した範囲では、Linux OS は 「Azure Disk Encryption for Linux はNVMe ディスクをサポートしていない」ということで、エラーが出力されるような実装になっています。

注意:
Azure Disk Encryption は既に非推奨となっており、Azure VM のディスク暗号化には、ホストでの暗号化に移行することが推奨されています。 公式ドキュメントによると2026年2月時点で、Azure Disk Encryption は2028年9月15日に廃止される予定です。

結果として、NVMe に変更するためには、既存の VM が少なくとも、第二世代の VM であり、かつセキュリティの種類が標準であること、さらに Azure Disk Encryption を利用している場合は、ADE がサポートされている VM サイズであることを事前に確認しておく必要があります。

Azure NVMe Utilities を実際に試してみる

Azure IaaSチームのブログでも紹介されている、Azure NVMe Utilities で公開されているスクリプトは、Azure VM で利用するディスクコントローラ を SCSI から NVMe に変更するための PowerShell スクリプトです。
このスクリプトを実行すると、 Azure リソースの構成だけでなく、RunCommand を利用して、OS上の設定も変更されます。

注意:
今回検証する Azure-NVMe-Utils は、MIT ライセンスで公開されているオープンソース ソフトウェアです。Microsoft から公開されていますが、公式のサポートが提供されるものではなく、自己責任での利用が必要となります。

Azure NVMe Utilities 利用に必要な権限

Azure NVMe Utilities のPowerShell スクリプトでは、VMの情報を取得しての必要な設定変更に関する検証、アクション 実行コマンドを利用した OS 上での設定変更、および VM サイズを指定したサイズに変更するといった操作を一括で実行してくれます。

そのため、具体的には以下の権限が必要になります。

  • VM の閲覧権限
  • VM のサイズ変更に必要な権限
  • VM の停止に関する権限
  • VM の RunCommand 実行に関する権限

上記のすべてを実行できる組み込みのロールは、仮想マシン共同作成者 ロールとなります。

Linux OS で試してみる

Azure リソース上の設定変更

Azure NVMe Utilities では、Linux OS上の設定変更に加えて、Azure リソース上の以下の設定を変更します。

  • VM の ディスクコントローラの種類の値を NVMe に変更
  • VM の サイズを指定のサイズに変更
  • VM にアタッチされた OS ディスクの diskControllerTypes プロパティを "SCSI, NVMe" に変更

実際の実行結果

実際に、RedHat Enterprise Linux 9.7 の VM をイメージからデプロイして検証します。
検証当初の VM の構成は以下の通りです。

項目
VM サイズ Standard_D2s_v3
世代 第二世代
セキュリティの種類 標準
ディスクコントローラ SCSI
OS RedHat Enterprise Linux 9.7

実際に OS にログインして、確認したバージョン等の情報はこちら

$ cat /etc/redhat-release
Red Hat Enterprise Linux release 9.7 (Plow)
$ uname -a
Linux nvme-rhel-vm 5.14.0-611.24.1.el9_7.x86_64 #1 SMP PREEMPT_DYNAMIC Sat Jan 10 05:12:47 EST 2026 x86_64 x86_64 x86_64 GNU/Linux

## 現状の Disk はSCSIで認識されている
$ ls -l /sys/class/block | grep sd
lrwxrwxrwx. 1 root root 0 Feb  6 12:34 sda -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/VMBUS:00/f8b3781a-1e82-4818-a1c3-63d806ec15bb/host0/target0:0:0/0:0:0:0/block/sda
lrwxrwxrwx. 1 root root 0 Feb  6 12:34 sda1 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/VMBUS:00/f8b3781a-1e82-4818-a1c3-63d806ec15bb/host0/target0:0:0/0:0:0:0/block/sda/sda1
lrwxrwxrwx. 1 root root 0 Feb  6 12:34 sda2 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/VMBUS:00/f8b3781a-1e82-4818-a1c3-63d806ec15bb/host0/target0:0:0/0:0:0:0/block/sda/sda2
lrwxrwxrwx. 1 root root 0 Feb  6 12:34 sda3 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/VMBUS:00/f8b3781a-1e82-4818-a1c3-63d806ec15bb/host0/target0:0:0/0:0:0:0/block/sda/sda3
lrwxrwxrwx. 1 root root 0 Feb  6 12:34 sda4 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/VMBUS:00/f8b3781a-1e82-4818-a1c3-63d806ec15bb/host0/target0:0:0/0:0:0:0/block/sda/sda4

## SCSI で認識されているため、NVMe のディスクはない
$ nvme list
Node                  Generic               SN                   Model                                    Namespace  Usage                      Format           FW Rev  
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
$ 

実際に Azure NVMe Utilities の PowerShell スクリプトを実行して、ディスクの種類を NVMe に変更してみます。

PS > .\Azure-NVMe-Conversion.ps1 -ResourceGroupName <ResourceGroupName> -NewControllerType NVMe -VMSize Standard_D2as_v7 -VMName <VMName>
00:00 - INFO      - Starting script Azure-NVMe-Conversion.ps1
00:00 - INFO      - Script started at 02/06/2026 21:42:24
00:00 - INFO      - Script version: 2025111001
00:00 - INFO      - Script parameters:
00:00 - INFO      -   ResourceGroupName -> <ResourceGroupName>
00:00 - INFO      -   NewControllerType -> NVMe
00:00 - INFO      -   VMSize -> Standard_D2as_v7
00:00 - INFO      -   VMName -> <VMName>
00:00 - INFO      - Script Version 2025111001
00:00 - INFO      - Module Az.Compute is installed and the version is correct.
00:00 - INFO      - Module Az.Accounts is installed and the version is correct.
00:00 - INFO      - Module Az.Resources is installed and the version is correct.
00:00 - INFO      - Connected to Azure subscription name: <SubscriptionName>
00:00 - INFO      - Connected to Azure subscription ID: <SubscriptionID>
00:02 - INFO      - VM <VMName> found in Resource Group <ResourceGroupName>
00:03 - INFO      - ADE for Linux extension is NOT installed on this VM
00:03 - INFO      - VM <VMName> is running
00:03 - INFO      - VM <VMName> is running Linux
00:03 - INFO      - VM <VMName> is running SCSI
00:03 - INFO      - Not running in Azure Cloud Shell
00:03 - INFO      - Authentication token is a SecureString
00:03 - INFO      - Authentication token received
00:03 - INFO      - Getting available SKU resources
00:03 - INFO      - This might take a while ...
00:05 - INFO      - Skipping resource disk support check for Linux VMs
00:05 - INFO      - Found VM SKU - Checking for Capabilities
00:05 - INFO      - VM SKU has supported capabilities
00:05 - INFO      - VM supports NVMe
00:05 - INFO      - Pre-Checks completed
00:05 - INFO      - Entering Linux OS section
00:35 - INFO      -    Script output: Enable succeeded:
00:35 - INFO      -    Script output: [stdout]
00:35 - INFO      -    Script output: [INFO] Operating system detected: rhel
00:35 - INFO      -    Script output: [INFO] Checking if NVMe driver is included in initrd/initramfs...
00:35 - INFO      -    Script output: [INFO] NVMe driver found in initrd/initramfs.
00:35 - INFO      -    Script output: [INFO] Checking nvme_core.io_timeout parameter...
00:35 - INFO      -    Script output: [INFO] nvme_core.io_timeout is set to 240.
00:35 - INFO      -    Script output: [INFO] Checking /etc/fstab for deprecated device names...
00:35 - INFO      -    Script output: [INFO] /etc/fstab does not contain deprecated device names.
00:35 - INFO      -    Script output:
00:35 - INFO      -    Script output: [stderr]
00:35 - INFO      -    Script output:
00:35 - INFO      - Errors: 0 - Warnings: 0 - Info: 7
00:35 - INFO      - Shutting down VM nvme-rhel-vm
01:16 - INFO      - VM nvme-rhel-vm stopped
01:16 - INFO      - Checking if VM is stopped and deallocated
01:16 - INFO      - Setting OS Disk capabilities for nvme-rhel-vm-osdisk to new Disk Controller Type to NVMe
01:16 - INFO      - generated URL for OS disk update:
01:16 - INFO      - https://management.azure.com/subscriptions/<SubscriptionID>/resourceGroups/<ResourceGroupName>/providers/Microsoft.Compute/disks/nvme-rhel-vm-osdisk?api-version=2023-04-02
01:16 - INFO      - OS Disk updated
01:16 - INFO      - Setting new VM Size from Standard_D2s_v4 to Standard_D2as_v7 and Controller to NVMe
01:16 - INFO      - Updating VM nvme-rhel-vm
01:47 - INFO      - VM nvme-rhel-vm updated
01:47 - INFO      - VM nvme-rhel-vm is stopped. Please start the VM manually.
01:47 - INFO      - If the VM should be started automatically use -StartVM switch
01:47 - IMPORTANT - Please start the virtual machine manually and check the operating system
01:47 - INFO      - You can also use -StartVM switch to start the VM automatically
01:47 - INFO      - If you have any issues after the conversion you can revert the changes by running the script with the old settings
01:47 - IMPORTANT - Here is the command to revert the changes:
01:47 - INFO      -    .\Azure-NVMe-Conversion.ps1 -ResourceGroupName nvme-test -VMName nvme-rhel-vm -NewControllerType SCSI -VMSize Standard_D2s_v4 -StartVM
01:47 - INFO      - Script ended at 02/06/2026 21:44:11
01:47 - INFO      - Exiting
PS >

公式ドキュメント に記載の通りのログが出力され、無事に変更が完了しました。
変更が完了したので、起動をして、OS上でのディスクの認識状況を確認します。

$ ls -l /sys/class/block | grep sd
$ ls -l /sys/class/block | grep nvme
lrwxrwxrwx. 1 root root 0 Feb  6 12:45 nvme0n1 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/MSFT1000:00/7ad35d50-c05b-47ab-b3a0-56a9a845852b/pcic05b:00/c05b:00:00.0/nvme/nvme0/nvme0n1
lrwxrwxrwx. 1 root root 0 Feb  6 12:45 nvme0n1p1 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/MSFT1000:00/7ad35d50-c05b-47ab-b3a0-56a9a845852b/pcic05b:00/c05b:00:00.0/nvme/nvme0/nvme0n1/nvme0n1p1
lrwxrwxrwx. 1 root root 0 Feb  6 12:45 nvme0n1p2 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/MSFT1000:00/7ad35d50-c05b-47ab-b3a0-56a9a845852b/pcic05b:00/c05b:00:00.0/nvme/nvme0/nvme0n1/nvme0n1p2
lrwxrwxrwx. 1 root root 0 Feb  6 12:45 nvme0n1p3 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/MSFT1000:00/7ad35d50-c05b-47ab-b3a0-56a9a845852b/pcic05b:00/c05b:00:00.0/nvme/nvme0/nvme0n1/nvme0n1p3
lrwxrwxrwx. 1 root root 0 Feb  6 12:45 nvme0n1p4 -> ../../devices/LNXSYSTM:00/LNXSYBUS:00/ACPI0004:00/MSFT1000:00/7ad35d50-c05b-47ab-b3a0-56a9a845852b/pcic05b:00/c05b:00:00.0/nvme/nvme0/nvme0n1/nvme0n1p4
$ nvme list
Node                  Generic               SN                   Model                                    Namespace  Usage                      Format           FW Rev  
--------------------- --------------------- -------------------- ---------------------------------------- ---------- -------------------------- ---------------- --------
/dev/nvme0n1          /dev/ng0n1            SN: 00000            MSFT NVMe Accelerator v1.0               0x1         68.72  GB /  68.72  GB    512   B +  0 B   v1.00000
$ 

無事に NVMe ディスクとして認識されていることが確認でき、Azure NVMe Utilities のPowerShell スクリプトを利用して、SCSI から NVMe への変更が正常に完了していることが確認できます。

Windows OS で試してみる

実際にWindows OS を用いて検証してみます。なお、検証には、Windows Server 2022 Datacenter と Windows Server 2025 Datacenter を利用して検証しましたが、両方とも同様の結果となりました。

結論から書きますと、同様に実行した結果、PowerShellスクリプトは正常に完了し、Azure リソース上の設定は変更されますが、OSの起動に失敗して、起動できませんでした。
ブート診断のシリアルログを確認したところ、以下のログが確認できます。

Your device ran into a problem and needs to restart.
If you call a support person, give them this info:
INACCESSIBLE_BOOT_DEVICE


0xFFFFA307E10071C8
0xFFFFFFFFC0000034
0x0000000000000000
0x0000000000000001

つまり、INACCESSIBLE_BOOT_DEVICE エラーが発生しており、OS がブートできない状態になっています。
この事象について、NVMe の VM と、SCSI の VM の両方をデプロイして、ブート構成を比較したりしながら確認しましたが、NVMe の場合と SCSI の場合で、ブート構成が違っていました。

Azure NVMe Utilities では、sc.exe config stornvme start=boot コマンドを実行して、stornvme ドライバのスタートアップの種類を「boot」に変更していることで、起動時に NVMe ドライバがロードされるように設定していますが、
このブート構成の違いがあるので、設定変更だけでは、起動ができない状態となっていまうようです。
つまり、Azure NVMe Utils のスクリプトでは、現時点において、Windows OS のブート構成を NVMe に対応させるまでの変更はできないということになります。

なお、ブート構成を変更して/再構成して起動すれば起動できるようになるかもしれませんが、そもそもWindows OSの変換は公式のドキュメントが公開されておらず、公式でサポートしていないようですので、無理に変更することに関しては検証を実施しませんでした。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?