ご利用のカスタムイメージに NVMe ドライバーをインストールしてから、そのイメージを使用する Elastic Compute Service (ECS) インスタンスにワークロードをデプロイしてください。これにより、Non-Volatile Memory Express (NVMe) プロトコルによるストレージパフォーマンスの向上が可能になります。
不揮発性メモリ用の NVMe インターフェイス標準は、フラッシュベース SSD などのソリッドステートストレージ用に設計された高速プロトコルです。SCSI や virtio-blk のような従来のプロトコルと比較して、NVMe はより高い速度とより広い帯域幅を提供します。
シナリオ
以下のいずれかの状況に遭遇した場合は、このトピックの手順を実行してください。
ローカルで構築したカスタムイメージを Alibaba Cloud にインポートし、Image Check で NVMe ドライバーが見つからないと報告された場合。
NVMe プロトコルをサポートする ECS インスタンスタイプを購入する際に、カスタムイメージを選択できない場合。これは、イメージの NVMe 属性がインスタンスタイプの要件と一致しない場合に発生します。
説明NVMe をサポートするインスタンスファミリーのリストについては、「インスタンスファミリーの概要」をご参照ください。また、DescribeInstanceTypes API 操作で
NvmeSupportパラメーターを確認することで、NVMe のサポート状況を確認できます。カスタムイメージが NVMe をサポートしているかどうかを確認するには、DescribeImages API 操作で
NvmeSupportパラメーターを検証してください。ECS インスタンスの作成時に一部のイメージが表示されない理由の詳細については、「ECS インスタンスの作成時に特定のイメージが見つからないのはなぜですか?」をご参照ください。
操作手順
既存のカスタムイメージから ECS インスタンスを起動します。このインスタンスは、イメージを更新するための中間環境として機能します。次に、インスタンスに接続します。
重要中間インスタンスには料金が発生します。継続的な料金を回避するために、新しいカスタムイメージを作成した後、インスタンスを解放してください。
ご利用のインスタンスのオペレーティングシステムに基づいて構成方法を選択します。次に、NVMe ドライバーを検証してインストールします。
コンソール構成
ECS コンソール - [インスタンス] で、対象のインスタンスを見つけて詳細ページに移動します。右上隅にある [その他の操作] をクリックし、[NVMe ドライバーのステータスを設定] を選択します。
[ワンクリックインストール] をクリックして NVMe ドライバーをインストールします。システムは NVMe ドライバーのステータスを自動的に [インストール済み] に設定します。

Cloud Assistant を使用した自動構成
Cloud Assistant は、NVMe ドライバーを迅速に構成するのに役立つ
ecs_nvme_configプラグインを提供します。ただし、特定のオペレーティングシステムのみをサポートしています。次のコマンドを実行して、クラウドアシスタントエージェント がインストールされているか、および
ecs_nvme_configプラグインが利用可能かどうかを確認します。acs-plugin-manager --list
Cloud Assistant 関連の出力が表示されない場合は、まず クラウドアシスタントエージェントをインストールしてください。
プラグインリストが表示され、
ecs_nvme_configが含まれている場合は、次のステップに進みます。
ecs_nvme_configプラグインを使用して NVMe 構成を完了します。次のコマンドを実行して、
ecs_nvme_configプラグインを使用して NVMe モジュールが存在するか、および構成可能かどうかを確認します。sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --check出力に次のメッセージが含まれている場合、NVMe ドライバーはすでにインストールされています。それ以上の構成はスキップし、直接カスタムイメージの作成に進んでください。
[SUCCESS] Summary: Your image can Runnig on nvme instance返された結果に次の
[ERROR]メッセージに類似したメッセージが含まれている場合は、次のステップに進む必要があります。[ERROR] 1.initrd/initramfs not has nvme module, Please run acs-plugin-manager --exec --plugin ecs_nvme_config --params -f/--fix to enable nvme;
チェック結果に基づいて NVMe ドライバーと関連パラメーターを構成します。
sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --fix構成が完了したら、次のコマンドを実行してインスタンスを再起動します。
sudo rebootインスタンスの再起動後、チェックコマンドを再度実行して、構成が成功したことを確認します。
sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --check成功出力の例:
[OK] 1.initrd/initramfs already contain nvme module; [OK] 2.fstab file looks fine and does not contain any device names; [OK] 3.The nvme parameters already included. [SUCCESS] Summary: Your image can Runnig on nvme instanceドライバーをインストールしたインスタンスから 新しいカスタムイメージを作成します。次に、新しいカスタムイメージの属性を変更し、NVMe ドライバー属性を [サポート済み] に設定します。
重要NVMe ドライバー属性を [サポート済み] に設定しない場合、システムはイメージを NVMe 互換として認識しません。その結果、このイメージからインスタンスを作成する際に、NVMe 対応のインスタンスタイプを選択できなくなります。
手動構成 (CentOS/Alibaba Cloud Linux)
次のコマンドを実行して、カーネルが NVMe ドライバーをロードしているかどうかを確認します。
cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"
出力に
CONFIG_BLK_DEV_NVME=yが含まれている場合、オペレーティングシステムは NVMe 対応のインスタンスファミリーで直接起動できます。直接 コンソール構成 に進んでください。出力に
CONFIG_BLK_DEV_NVME=mが含まれている場合は、次のステップを実行します。
次のコマンドを実行して、initramfs に NVMe ドライバーが含まれているかどうかを確認します。
sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'
返された結果が図と一致する場合、オペレーティングシステムは NVMe プロトコルをサポートするインスタンスファミリーで起動でき、ステップ d に進むことができます。
コマンドが何も出力しない場合は、次のステップ (ステップ c) を実行します。
次のコマンドを実行して、initramfs に NVMe ドライバーを含めます。
mkdir -p /etc/dracut.conf.d echo 'add_drivers+=" nvme nvme-core "' | sudo tee /etc/dracut.conf.d/nvme.conf > /dev/null sudo dracut -v -f説明dracut ツールがインストールされていない場合は、sudo yum -y install dracut を実行してインストールします。
GRUB で NVMe 用の
io_timeoutパラメーターを追加します。説明GRUB で NVMe 用の
io_timeoutパラメーターを追加して、NVMe デバイスタイムアウトによる I/O 障害を防ぎます。この値をサポートされている最大制限に設定することで、システムは早期の障害なしに I/O リクエストの処理を継続できます。ほとんどの Linux ディストリビューションでは、
io_timeoutパラメーターのデフォルト値は 30 秒です。io_timeoutパラメーターに値を追加する前に、echo 4294967295 > /sys/module/nvme_core/parameters/io_timeoutまたはecho 4294967295 > /sys/module/nvme/parameters/io_timeoutコマンドを実行して、io_timeoutパラメーターを最大値の 4,294,967,295 秒に設定できるかどうかを確認する必要があります。コマンドが-bash: echo: write error: Invalid argumentを返す場合、現在の Linux バージョンは 255 秒にのみ設定をサポートしています。方法 1: grubby を使用してパラメーターを追加
grubbyコマンドが利用可能かどうかを確認します。which grubby出力に
grubbyへのパス (例:/usr/sbin/grubby) が含まれている場合、ご利用のシステムはgrubbyをサポートしています。次のステップに進むことができます。出力が表示されない場合、ご利用のシステムは
grubbyをサポートしていません。パラメーターを追加するには、方法 2 を参照してください。
次のコマンドを実行して、
grubbyを使用してカーネルパラメーターを追加します。sudo grubby --update-kernel=ALL --args="nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295"
方法 2: GRUB 構成ファイルを編集してパラメーターを追加
次のコマンドを実行して、grub ファイルを開きます。
sudo vi /etc/default/grubi を押して挿入モードに入ります。
GRUB_CMDLINE_LINUX=の行を見つけて、nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295パラメーターを追加します。次の図は、パラメーターを追加した後のファイルの内容を示しています。
説明これらのパラメーターが構成ファイルにすでに存在する場合は、再度追加しないでください。
Esc を押して挿入モードを終了します。
:wqと入力し、Enter を押してファイルを保存して閉じます。次のコマンドを実行して GRUB 構成を適用します。
ご利用の ECS インスタンスの インスタンス起動モード に対応するコマンドを選択します。
Legacy BIOS ブートモード
sudo grub2-mkconfig -o /boot/grub2/grub.cfgUEFI ブートモード
GRUB 構成ファイルを表示します。
# For CentOS, run: cat /boot/efi/EFI/centos/grub.cfg # For Alibaba Cloud Linux, run: cat /boot/efi/EFI/alinux/grub.cfg出力に基づいて適切なコマンドを実行します。
構成ファイルが別の構成ファイル (例:
/boot/grub/grub.cfg) を指している場合は、次のコマンドを実行します。
sudo grub2-mkconfig -o /boot/grub2/grub.cfgそれ以外の場合は、次のコマンドを実行します (ご利用のシステムに一致する行を選択してください)。
# For CentOS sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg # For Alibaba Cloud Linux sudo grub2-mkconfig -o /boot/efi/EFI/alinux/grub.cfg
ドライバーをインストールしたインスタンスから 新しいカスタムイメージを作成します。次に、新しいカスタムイメージの属性を変更し、NVMe ドライバー属性を [サポート済み] に設定します。
重要NVMe ドライバー属性を [サポート済み] に設定しない場合、システムはイメージを NVMe 互換として認識しません。その結果、このイメージからインスタンスを作成する際に、NVMe 対応のインスタンスタイプを選択できなくなります。
次のコマンドを再度実行して、NVMe 関連の出力を確認します。
sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'コマンドがドライバーのファイル名 (例: nvme.ko) を返す場合、構成は完了です。オペレーティングシステムは NVMe 対応の ECS インスタンスタイプで起動する準備ができました。

手動構成 (Ubuntu/Debian)
(オプション) 次のコマンドを実行して、initrd に NVMe ドライバーが含まれているかどうかを確認します。
lsinitramfs /boot/initrd.img-`uname -r` | grep -i nvme次の出力は、Ubuntu オペレーティングシステムがデフォルトで initrd に NVMe ドライバーをロードすることを示しています。

GRUB で NVMe 用の
io_timeoutパラメーターを追加します。説明GRUB で NVMe 用の
io_timeoutパラメーターを追加して、NVMe デバイスタイムアウトによる I/O 障害を防ぎます。この値をサポートされている最大制限に設定することで、システムは早期の障害なしに I/O リクエストの処理を継続できます。ほとんどの Linux ディストリビューションでは、
io_timeoutパラメーターはデフォルト値の 30 秒で構成されています。io_timeoutパラメーターに値を追加する前に、echo 4294967295 > /sys/module/nvme_core/parameters/io_timeoutコマンドまたはecho 4294967295 > /sys/module/nvme/parameters/io_timeoutコマンドを実行して、io_timeoutパラメーターを最大値の 4,294,967,295 秒に設定できるかどうかを確認する必要があります。コマンドがエラー-bash: echo: write error: Invalid argumentを返す場合、現在の Linux ディストリビューションは 255 秒の値のみをサポートしています。次のコマンドを実行して、/etc/default/grub ファイルを開きます。
sudo vi /etc/default/grubi キーを押して編集モードに入り、
GRUB_CMDLINE_LINUX=の行に次のパラメーターを追加します。nvme_core.multipath=n nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295。パラメーターを追加すると、ファイルの内容は次のようになります。
説明これらのパラメーターが構成ファイルにすでに存在する場合は、再度追加しないでください。
Esc を押して挿入モードを終了します。
:wqと入力し、Enter を押してファイルを保存して閉じます。
次のコマンドを実行して、構成された GRUB 設定を適用します。
ECS インスタンスの インスタンス起動モード に応じて、該当する次のコマンドのいずれかを選択します。
このコマンドは、ブートモードに関係なく Ubuntu および Debian システムで機能します。
sudo update-grub2Legacy BIOS ブートモード
sudo grub-mkconfig -o /boot/grub/grub.cfgUEFI ブートモード
sudo grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg
ドライバーをインストールしたインスタンスから 新しいカスタムイメージを作成します。次に、新しいカスタムイメージの属性を変更し、NVMe ドライバー属性を [サポート済み] に設定します。
重要NVMe ドライバー属性を [サポート済み] に設定しない場合、システムはイメージを NVMe 互換として認識しません。その結果、このイメージからインスタンスを作成する際に、NVMe 対応のインスタンスタイプを選択できなくなります。
(オプション) NVMe をサポートする新しいカスタムイメージを使用してワークロードを再デプロイします。例えば、カスタムイメージまたは共有イメージからインスタンスを作成します。作成時に、NVMe プロトコルをサポートするインスタンスタイプを選択します。
デプロイメントを確認した後、アイドルリソースの料金を回避するために、元のカスタムイメージを削除してください。
参考資料
NVMe プロトコルに基づく ECS インスタンスタイプは、ESSD (エンタープライズ SSD) ディスクと ESSD AutoPL ディスクのみをサポートしています。これらのディスクはマルチアタッチをサポートしており、複数の ECS インスタンスに同時にアタッチしてデータを共有できます。詳細については、「クラウドディスクを複数の ECS インスタンスにアタッチ (マルチアタッチ)」をご参照ください。
Linux を実行している ECS インスタンスで
io_timeoutパラメーターの不適切な構成により NVMe ディスクが利用不可になった場合は、トラブルシューティング手順について「Linux ECS インスタンスで NVMe ディスクが無効な I/O タイムアウトパラメーターにより利用不可になった場合の対処方法」をご参照ください。