NVMe (Non-Volatile Memory Express) ドライバーがインストールされていない既存のカスタムイメージを使用してElastic Compute Service (ECS) インスタンスを作成し、NVMeを使用してストレージパフォーマンスを向上させる場合は、このトピックで説明されている手順に従ってカスタムイメージにNVMeドライバーをインストールします。 これにより、ECSインスタンスが期待どおりに起動し、ビジネスが安定して実行されるようになります。
NVMeは、フラッシュベースのSSDなどのソリッドステートストレージ用の高速インターフェースプロトコルです。 NVMeは、SCSI (Small Computer System Interface) やvirtio-blkなどの従来のドライバプロトコルよりも高速な応答と高い帯域幅を提供します。 NVMeの詳細については、「NVMeプロトコル」をご参照ください。
問題の説明
カスタムイメージにNVMeドライバーがインストールされていない場合は、次のシナリオでこのトピックで説明する操作を実行できます。
カスタムイメージをAlibaba Cloudにインポートすると、イメージチェック機能はイメージにNVMeドライバがインストールされていないことを検出します。
NVMeをサポートするECSインスタンスを購入すると、カスタムイメージを選択できません。 この問題は、カスタムイメージがインスタンスタイプのNVMe属性と一致しない場合に発生する可能性があります。
説明NVMeディスクの接続を許可するインスタンスファミリーについては、「インスタンスファミリーの概要」をご参照ください。 DescribeInstanceTypes操作を呼び出して、インスタンスファミリーがNVMeをサポートしているかどうかを確認するときに、
NvmeSupport
パラメーターを設定できます。カスタムイメージがNVMeをサポートしているかどうかを確認するには、DescribeImages操作を呼び出すときに
NvmeSupport
パラメーターを設定します。詳細については、「」をご参照ください。ECSインスタンスを作成するときに特定のイメージが見つからないのはなぜですか。
手順
既存のカスタムイメージからECSインスタンスを作成し、カスタムイメージのデータをインスタンスに転送します。
詳細については、「カスタムイメージを使用したインスタンスの作成」をご参照ください。
重要作成した中間ECSインスタンスに対して課金されます。 中間ECSインスタンスからカスタムイメージを作成した後、できるだけ早い機会に中間ECSインスタンスをリリースすることを推奨します。 詳細については、「インスタンスのリリース」をご参照ください。
新しいECSインスタンスに接続します。
詳細については、「接続方法の概要」をご参照ください。
NVMeドライバーがECSインスタンスにインストールされているかどうかを確認します。 NVMeドライバがインストールされていない場合は、ドライバをインストールします。
Cloud Assistantを使用した自動設定
Cloud Assistantには、
ecs_nvme_config
プラグインがあり、オペレーティングシステムに基づいてNVMeドライバーの設定をすばやく完了するのに役立ちます。次のコマンドを実行して、インスタンスにCloud Assistant Agentがインストールされているかどうかを確認します。Cloud Assistant Agentがインストールされている場合は、Cloud Assistant Agentが
ecs_nvme_config
プラグインを提供しているかどうかを確認します。acs-plugin-manager --list
Cloud Assistant Agentの情報が返されない場合は、インスタンスにCloud Assistant Agentをインストールする必要があります。 Cloud Assistant Agentのインストール方法については、「Cloud Assistant Agentのインストール」をご参照ください。
Cloud Assistantプラグインのリストが返され、
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] 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
でRunnigできます
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 (Resource Access Management) ファイルシステム (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ツールをインストールします。
GRand Unified Bootloader (GRUB) ファイルにNVMe関連の
io_timeout
パラメーターを追加します。説明io_timeout
パラメーターは、LinuxオペレーティングシステムのNVMeデバイスに関連するタイムアウトエラーを修正するためにGRUBファイルに追加されます。 io_timeoutパラメーターを最大値に設定すると、タイムアウトが発生したかどうかに関係なく、オペレーティングシステムはNVMeデバイスからのI/O要求を処理し続けることができます。ほとんどのLinuxディストリビューションでは、
io_timeout
パラメーターのデフォルトは30です。 単位は秒です。 新しいバージョンのカーネルで、io_timeout
パラメーターを最大値の4,294,967,295秒に設定します。 以前のバージョンのカーネルでは、パラメーターを255秒に設定します。
次のコマンドを実行して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) ブートモード
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秒に設定します。 以前のバージョンのカーネルでは、パラメーターを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オペレーティングシステムにのみ適用できます。
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インスタンスのブートモードのベストプラクティス」をご参照ください。
作成したECSインスタンスから新しいカスタムイメージを作成します。 新しいカスタムイメージにはNVMeドライバが含まれています。
詳細については、「インスタンスからのカスタムイメージの作成」をご参照ください。
新しいカスタムイメージのNVMe DriveパラメーターをSupportedに設定します。
詳細については、「イメージの属性とタグの変更」をご参照ください。
(オプション) 作成したカスタムイメージを使用して、ビジネスを再デプロイします。 たとえば、カスタムイメージからECSインスタンスを作成できます。
詳細については、「カスタムイメージを使用したインスタンスの作成」をご参照ください。 ECSインスタンスを作成するときに、NVMeをサポートするインスタンスタイプを選択します。
説明ビジネスを再デプロイした後、リソースの無駄を防ぐために、古いカスタムイメージをできるだけ早く削除することをお勧めします。 詳細については、「カスタムイメージの削除」をご参照ください。
関連ドキュメント
エンタープライズSSD (ESSD) およびESSD AutoPLディスクのみをNVMeベースのECSインスタンスに接続できます。 ESSDまたはESSD AutoPLディスクを複数のECSインスタンスに接続して、データを共有できます。 詳細については、「マルチアタッチの有効化」をご参照ください。
ECSインスタンス上のNVMeディスクの
io_timeout
パラメーターが不適切に設定されている場合、NVMeディスクは使用できなくなります。 この問題を解決する方法については、「無効なI/Oタイムアウトパラメーターが原因でLinux ECSインスタンスのNVMeディスクが使用できない場合の対処方法」をご参照ください。