カスタムイメージを使用して ECS インスタンスにサービスをデプロイし、Non-Volatile Memory Express (NVMe) プロトコルでストレージパフォーマンスを向上させる場合は、このトピックの手順に従ってカスタムイメージに NVMe ドライバーをインストールしてください。
Non-Volatile Memory Express (NVMe) は、フラッシュベースの SSD などのソリッドステートストレージ向けに設計された高速インターフェイスプロトコルです。SCSI や virtio-blk などの従来のストレージプロトコルよりも高速な応答時間と高い帯域幅を提供します。
シナリオ
カスタムイメージにドライバーがインストールされていない場合、次のシナリオでは、このトピックで説明されているように NVMe ドライバーをインストールする必要があります。
カスタムイメージを Alibaba Cloud にインポートすると、イメージチェック機能によって、イメージに NVMe ドライバーがインストールされていないことが検出されます。
NVMe プロトコルをサポートするインスタンスタイプの ECS インスタンスを作成するときに、カスタムイメージを選択できません。これは、イメージの NVMe 属性がインスタンスタイプの属性と一致しないことが原因である可能性があります。
説明NVMe プロトコルをサポートするインスタンスファミリーの詳細については、「インスタンスファミリー」をご参照ください。インスタンスファミリーが NVMe をサポートしているかどうかを判断するには、DescribeInstanceTypes API 操作の
NvmeSupportパラメーターを使用することもできます。DescribeImages API 操作の
NvmeSupportパラメーターを使用して、イメージが NVMe をサポートしているかどうかを確認できます。詳細については、「ECS インスタンスの作成時に特定のイメージが見つからないのはなぜですか?」をご参照ください。
手順
既存のカスタムイメージから ECS インスタンスを作成します。このインスタンスは中間環境として機能します。次に、インスタンスにリモートで接続します。
重要作成した中間インスタンスには料金が発生します。新しいカスタムイメージが作成された後、継続的な課金を避けるために、速やかにインスタンスをリリースすることをお勧めします。
インスタンスのオペレーティングシステムに基づいて NVMe ドライバーを確認し、インストールします。
クラウドアシスタントを使用した自動設定
クラウドアシスタントは、NVMe ドライブを迅速に設定するのに役立つ
ecs_nvme_configプラグインを提供します。ただし、このプラグインにはオペレーティングシステムの制限があります。次のコマンドを実行して、インスタンスに クラウドアシスタントエージェント がインストールされているかどうか、およびクライアントで
ecs_nvme_configプラグインが利用可能かどうかを確認します。acs-plugin-manager --list
クラウドアシスタントの情報が返されない場合は、まずインスタンスに クラウドアシスタントエージェントをインストールする必要があります。
クラウドアシスタントプラグインのリストが返され、
ecs_nvme_configプラグインが含まれている場合は、次のステップに進みます。
ecs_nvme_configプラグインを使用して NVMe 設定を完了します。次のコマンドを実行して
ecs_nvme_configプラグインを使用し、現在のインスタンスに NVMe モジュールが存在するかどうか、および設定可能かどうかを確認します。sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --check次のメッセージが返された場合、NVMe ドライバーはすでにインスタンスにインストールされています。NVMe 関連の設定を行う必要はなく、カスタムイメージを直接作成できます。
[SUCCESS] Summary: Your image can run on an NVMe instance.結果に次の
[ERROR]のようなメッセージが含まれている場合は、次のステップに進む必要があります。[ERROR] 1.nvme module missing from initrd/initramfs, 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インスタンスを再起動した後、NVMe モジュールが正常に設定されているかどうかを確認します。
sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --check成功応答の例を次に示します。
[OK] 1.initrd/initramfs already contains the nvme module; [OK] 2.fstab file looks fine and does not contain any device names; [OK] 3.The nvme parameters are already included. [SUCCESS] Summary: Your image can run on an nvme instance
手動設定 (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の場合は、次の手順を実行します。
次のコマンドを実行して、初期 RAM ファイルシステム (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 を実行してツールをインストールします。
NVMe 関連の
io_timeoutパラメーターを GRand Unified Bootloader (GRUB) に追加します。説明GRand Unified Bootloader (GRUB) に
io_timeoutパラメーターを追加すると、Linux での NVMe デバイスに関連するタイムアウトエラーを防ぐのに役立ちます。このパラメーターを最大値に設定すると、NVMe デバイスの 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 インスタンスの インスタンス起動モードに応じて、対応するコマンドを実行します:
レガシー BIOS 起動モード
sudo grub2-mkconfig -o /boot/grub2/grub.cfgUEFI 起動モード
grub 設定ファイルを表示します。
cat /boot/efi/EFI/centos/grub.cfggrub 設定ファイルの内容に基づいて、対応するコマンドを実行します。
設定ファイルの内容が、次の図に示すように
/boot/grub/grub.cfgなどの configfile の別のパスを指定している場合は、次のコマンドを実行して設定を適用します。
sudo grub2-mkconfig -o /boot/grub2/grub.cfgそれ以外の場合は、次のコマンドを実行して設定を適用します。
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
次のコマンドを再度実行して、NVMe ドライバーが initramfs に含まれていることを確認します。
sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'次の図のような結果が返された場合、設定は完了です。これで、オペレーティングシステムは NVMe プロトコルをサポートするインスタンスファミリーのインスタンスで起動できます。

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

NVMe 関連の
io_timeoutパラメーターを GRUB に追加します。説明GRand Unified Bootloader (GRUB) に NVMe 関連の
io_timeoutパラメーターを追加する主な目的は、Linux での NVMe デバイスに関連するタイムアウトエラーを防ぐことです。タイムアウト値を最大に設定すると、NVMe デバイスからの 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-grub2レガシー BIOS 起動モード
sudo grub-mkconfig -o /boot/grub/grub.cfgUEFI 起動モード
sudo grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg
インスタンスにドライバーをインストールした後、インスタンスから 新しいカスタムイメージを作成します。次に、新しいカスタムイメージのプロパティを変更し、[NVMe ドライバー] プロパティを [サポート] に設定します。
NVMe プロパティを [サポート] に設定しない場合、このカスタムイメージを使用して NVMe 機能を必要とするインスタンスタイプのインスタンスを作成することはできません。
(オプション) カスタムイメージを使用してインスタンスを作成するで説明されているように、NVMe をサポートする新しいカスタムイメージからインスタンスを作成してサービスを再デプロイします。ECS インスタンスを作成するときは、NVMe をサポートするインスタンスタイプを選択します。
サービスデプロイが完了したら、未使用のリソースに対するコストの発生を避けるために、速やかに古いカスタムイメージを削除することをお勧めします。
参考情報
NVMe ベースの ECS インスタンスタイプには、企業向け SSD (ESSD) と ESSD AutoPL ディスクのみをアタッチできます。これらのディスクに対して クラウドディスクのマルチアタッチ機能を有効にして、複数の ECS インスタンスにアタッチすることでデータを共有できます。
ECS インスタンス上の NVMe ディスクの
io_timeoutパラメーターが不適切に設定されている場合、ディスクが利用できなくなることがあります。この問題を解決する方法の詳細については、「Linux ECS インスタンスの NVMe ディスクが I/O タイムアウトパラメーターの不適切な設定により利用できなくなった場合の対処方法」をご参照ください。