既存のカスタムイメージを使用して Elastic Compute Service (ECS) インスタンスを作成し、Non-Volatile Memory Express (NVMe) を使用してストレージのパフォーマンスを向上させる場合は、このトピックで説明されている手順に従って、カスタムイメージに NVMe ドライバーをインストールできます。 これにより、ECS インスタンスが想定どおりに起動し、ビジネスが安定して実行されるようになります。
NVMe は、フラッシュベースの SSD などのソリッドステートストレージ用の高速インターフェースプロトコルです。 NVMe は、Small Computer System Interface (SCSI) や virtio-blk などの従来のドライバープロトコルよりも高速な応答と高い帯域幅を提供します。 NVMe の詳細については、「NVMe プロトコル」をご参照ください。
問題の説明
カスタムイメージに NVMe ドライバーがインストールされていない場合は、次のシナリオで、このトピックで説明されている操作を実行できます。
カスタムイメージを Alibaba Cloud にインポートすると、イメージチェック 機能によって、イメージに NVMe ドライバーがインストールされていないことが検出されます。
NVMe をサポートする ECS インスタンスを購入する場合、カスタムイメージを選択できません。 この問題は、カスタムイメージの NVMe 属性がインスタンスタイプの NVMe 属性と一致しない場合に発生する可能性があります。
説明NVMe をサポートするインスタンスファミリーについては、「インスタンスファミリーの概要」をご参照ください。
NvmeSupport
パラメーターをDescribeInstanceTypes オペレーションの呼び出し時に設定することで、インスタンスファミリーが NVMe をサポートするかどうかを確認できます。DescribeImages オペレーションを呼び出すときに
NvmeSupport
パラメーターを構成することで、カスタムイメージが NVMe をサポートしているかどうかを確認できます。詳細については、「ECS インスタンスの作成時に特定のイメージが見つからないのはなぜですか?」をご参照ください。
手順
既存のカスタムイメージから ECS インスタンスを作成して、カスタムイメージのデータをインスタンスに転送します。
詳細については、「カスタムイメージを使用してインスタンスを作成する」をご参照ください。
重要作成する中間 ECS インスタンスには課金されます。 中間 ECS インスタンスからカスタムイメージを作成した後、できるだけ早くインスタンスをリリースすることをお勧めします。
新しい ECS インスタンスに接続します。
詳細については、「ECS インスタンスへの接続方法」をご参照ください。
ECS インスタンスに NVMe ドライバーがインストールされているかどうかを確認します。 NVMe ドライバーがインストールされていない場合は、ドライバーをインストールします。
クラウドアシスタントを使用した自動構成
クラウドアシスタントは、
ecs_nvme_config
プラグインを提供しており、オペレーティングシステムに基づいて NVMe ドライバーの構成を迅速に完了するのに役立ちます。インスタンスに クラウドアシスタントクライアント がインストールされているかどうかを確認します。 インストールされている場合は、クラウドアシスタントクライアント が
ecs_nvme_config
プラグインを提供しているかどうかを確認します。acs-plugin-manager --list
クラウドアシスタントクライアント 情報が返されない場合は、インスタンスに クラウドアシスタントクライアントをインストールする必要があります。
クラウドアシスタント プラグインのリストが返され、
ecs_nvme_config
プラグインが表示されている場合は、次の手順に進みます。
ecs_nvme_config
プラグインを使用して、NVMe 関連の設定を構成します。ecs_nvme_config
プラグインを使用して、インスタンスに NVMe モジュールがあるかどうか、およびインスタンスが NVMe モジュールをサポートしているかどうかを確認します。sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --check
次のメッセージが返された場合、NVMe ドライバーはインスタンスにインストールされています。 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
NVMe 関連の設定を構成した後、インスタンスを再起動します。
sudo reboot
インスタンスを再起動した後、NVMe モジュールが構成されているかどうかを確認します。
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
CentOS または Alibaba Cloud Linux での手動構成
カーネルが NVMe ドライバーを読み込んでいるかどうかを確認します。
cat /boot/config-`uname -r` | grep -i nvme | grep -v "^#"
CONFIG_BLK_DEV_NVME=y
メッセージが返された場合、オペレーティングシステムは、NVMe をサポートするインスタンスファミリーのインスタンスで起動できます。 この場合は、手順 3.d に進みます。CONFIG_BLK_DEV_NVME=m
メッセージが返された場合は、次の手順を順番に実行します。
初期 RAM ファイルシステム (
initramfs
) に NVMe ドライバーが含まれているかどうかを確認します。sudo lsinitrd /boot/initramfs-`uname -r`.img | grep -i nvme | awk '{print $NF}'
前の図に示されているコマンド出力が返された場合、オペレーティングシステムは、NVMe をサポートするインスタンスファミリーのインスタンスで起動できます。 この場合は、手順 3.d に進みます。
前の図に示されているコマンド出力が返されない場合は、次の手順を順番に実行します。
NVMe ドライバーをサポートするように
initramfs
を構成します。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 コマンドを実行してdracut
をインストールします。NVMe 関連の
io_timeout
パラメーターを GRUB ファイルに追加します。説明io_timeout
パラメーターは、Linux オペレーティングシステムの NVMe デバイスに関連するタイムアウトエラーを修正するために GRUB ファイルに追加されます。io_timeout
パラメーターを最大値に設定すると、タイムアウトエラーに関係なく、オペレーティングシステムは NVMe デバイスからの I/O リクエストの処理を続行できます。ほとんどの Linux ディストリビューションでは、
io_timeout
パラメーターのデフォルトは 30 です。単位: 秒。io_timeout
パラメーターを最大値 4,294,967,295 秒に設定できるかどうかを確認するには、echo 4294967295 > /sys/module/nvme_core/parameters/io_timeout
またはecho 4294967295 > /sys/module/nvme/parameters/io_timeout
コマンドを実行します。-bash: echo: write error: Invalid argument
メッセージが返された場合は、パラメーターを最大値 255 秒にのみ設定できます。
方法 1: grubby コマンドを実行する
オペレーティングシステムが
grubby
コマンドをサポートしているかどうかを確認します。which grubby
コマンド出力に
grubby
コマンドのパス (例:/usr/sbin/grubby
) が返された場合、オペレーティングシステムはgrubby
コマンドをサポートしています。 この場合は、次の手順に進みます。情報が返されない場合、オペレーティングシステムは
grubby
コマンドをサポートしていません。 この場合は、方法 2: GRUB 構成ファイルを変更する を使用します。
grubby
コマンドを実行して、NVMe 関連のio_timeout
パラメーターを追加します。sudo grubby --update-kernel=ALL --args="nvme_core.io_timeout=4294967295 nvme_core.admin_timeout=4294967295"
方法 2: GRUB 構成ファイルを変更する
grub ファイルを開きます。
sudo vi /etc/default/grub
I キーを押して挿入モードに入ります。
GRUB_CMDLINE_LINUX=
行の最後に、nvme_core.io_timeout
パラメーターと nvme_core.admin_timeout パラメーターを追加し、両方を 4294967295 に設定します。次の図は、パラメーターを追加する方法の例を示しています。
説明GRUB 構成ファイルに既に上記のパラメーター設定が含まれている場合は、パラメーターを再度追加する必要はありません。
Esc キーを押して挿入モードを終了します。 次に、
:wq
と入力し、Enter キーを押してファイルを保存して閉じます。GRUB 構成を適用します。
ECS インスタンスのブートモードに基づいてコマンドを選択します。
レガシー BIOS ブートモード
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Unified Extensible Firmware Interface (UEFI) ブートモード
GRUB 構成ファイルの内容を表示します。
cat /boot/efi/EFI/centos/grub.cfg
前のコマンドの出力に基づいてコマンドを選択します。
GRUB 構成ファイルが前のコマンドで指定されたディレクトリとは異なるディレクトリに保存されている場合、コマンド出力には、次の図に示すように、新しいディレクトリ (例:
/boot/grub/grub.cfg
) が含まれます。 この場合は、次のコマンドを実行して、GRUB 構成を有効にします。sudo grub2-mkconfig -o /boot/grub2/grub.cfg
GRUB 構成ファイルが前の cat コマンドで指定されたディレクトリに保存されている場合は、次のコマンドを実行して、GRUB 構成を有効にします。
sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
説明ECS インスタンスのブートモードの詳細については、「ECS インスタンスのブートモード」をご参照ください。
NVMe 関連の情報を確認します。
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
次のコマンド出力は、NVMe ドライバーが Ubuntu オペレーティングシステムの
initrd
にロードされていることを示しています。NVMe 関連の
io_timeout
パラメーターを GRUB ファイルに追加します。説明io_timeout
パラメーターは、Linux オペレーティングシステムの NVMe デバイスに関連するタイムアウトエラーを修正するために GRUB ファイルに追加されます。io_timeout
パラメーターを最大値に設定すると、タイムアウトエラーに関係なく、オペレーティングシステムは NVMe デバイスからの I/O リクエストの処理を続行できます。ほとんどの Linux ディストリビューションでは、
io_timeout
パラメーターのデフォルトは 30 です。単位: 秒。io_timeout
パラメーターを最大値 4,294,967,295 秒に設定できるかどうかを確認するには、echo 4294967295 > /sys/module/nvme_core/parameters/io_timeout
またはecho 4294967295 > /sys/module/nvme/parameters/io_timeout
コマンドを実行します。-bash: echo: write error: Invalid argument
メッセージが返された場合は、パラメーターを最大値 255 秒にのみ設定できます。
/etc/default/grub ファイルを開きます。
sudo vi /etc/default/grub
I キーを押して挿入モードに入ります。
GRUB_CMDLINE_LINUX=
行に、nvme_core.multipath
、nvme_core.io_timeout
、およびnvme_core.admin_timeout
パラメーターを追加します。 次に、nvme_core.multipath
を n に設定し、nvme_core.io_timeout
とnvme_core.admin_timeout
の両方を 4294967295 に設定します。次の図は、パラメーターを示しています。
説明GRUB ファイルに既に上記のパラメーター設定が含まれている場合は、パラメーターを再度追加する必要はありません。
Esc キーを押して挿入モードを終了します。 次に、
:wq
と入力し、Enter キーを押してファイルを保存して閉じます。
GRUB 構成を適用します。
ECS インスタンスのブートモードに基づいて、次のコマンドのいずれかを実行します。
次のコマンドは、ブートモードに関係なく、Ubuntu および Debian オペレーティングシステムに適用できます。
sudo update-grub2
レガシー BIOS ブートモード
sudo grub-mkconfig -o /boot/grub/grub.cfg
UEFI ブートモード
sudo grub-mkconfig -o /boot/efi/EFI/debian/grub.cfg
説明ECS インスタンスのブートモードの詳細については、「インスタンスのブートモード」をご参照ください。
作成した ECS インスタンスから新しいカスタムイメージを作成します。 新しいカスタムイメージには、NVMe ドライバーが含まれています。
詳細については、「インスタンスからカスタムイメージを作成する」をご参照ください。
新しいカスタムイメージの [NVMe ドライブ] パラメーターを [サポート] に設定します。
詳細については、「イメージの属性とタグを変更する」をご参照ください。
(オプション) 作成したカスタムイメージを使用して、ビジネスを再デプロイします。 たとえば、カスタムイメージから ECS インスタンスを作成できます。
詳細については、「カスタムイメージを使用してインスタンスを作成する」をご参照ください。 ECS インスタンスを作成するときは、NVMe をサポートするインスタンスタイプを選択します。
説明ビジネスを再デプロイした後、リソースの浪費を防ぐために、できるだけ早く古いカスタムイメージを削除することをお勧めします。 詳細については、「カスタムイメージを削除する」をご参照ください。
関連情報
NVMe ベースの ECS インスタンスには、企業向け SSD (ESSD) と ESSD AutoPL ディスクのみをアタッチできます。 これらのディスクは、複数の ECS インスタンスにアタッチしてデータを共有できます。 詳細については、「クラウドディスクのマルチアタッチ」をご参照ください。
ECS インスタンスの NVMe ディスクの
io_timeout
パラメーターが正しく構成されていない場合、ディスクは使用できなくなります。 問題の解決方法については、「無効な I/O タイムアウトパラメーターが原因で Linux ECS インスタンスの NVMe ディスクが使用できない場合はどうすればよいですか?」をご参照ください。