すべてのプロダクト
Search
ドキュメントセンター

Elastic Compute Service:カスタムイメージ用のNVMeドライバをインストールするにはどうすればよいですか?

最終更新日:Aug 26, 2024

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属性と一致しない場合に発生する可能性があります。

    説明

手順

  1. 既存のカスタムイメージからECSインスタンスを作成し、カスタムイメージのデータをインスタンスに転送します。

    詳細については、「カスタムイメージを使用したインスタンスの作成」をご参照ください。

    重要

    作成した中間ECSインスタンスに対して課金されます。 中間ECSインスタンスからカスタムイメージを作成した後、できるだけ早い機会に中間ECSインスタンスをリリースすることを推奨します。 詳細については、「インスタンスのリリース」をご参照ください。

  2. 新しいECSインスタンスに接続します。

    詳細については、「接続方法の概要」をご参照ください。

  3. NVMeドライバーがECSインスタンスにインストールされているかどうかを確認します。 NVMeドライバがインストールされていない場合は、ドライバをインストールします。

    Cloud Assistantを使用した自動設定

    Cloud Assistantには、ecs_nvme_configプラグインがあり、オペレーティングシステムに基づいてNVMeドライバーの設定をすばやく完了するのに役立ちます。

    ecs_nvme_configプラグインでサポートされているオペレーティングシステム

    • ecs_nvme_configプラグインは、次のオペレーティングシステムをサポートしています。

      • Alibaba Cloud Linux

      • アナリスOS

      • CentOS and CentOSストリーム

      • Debian

      • Ubuntu

      • openSUSE

      • SUSE Linuxエンタープライズサーバー (SLES)

      • レッドハットエンタープライズLinux

      • フェドラ

      • ロッキーLinux

      • AlmaLinux

    • ecs_nvme_configプラグインは、次のオペレーティングシステムバージョンをサポートしていません。

      • CentOSおよびRed Hat Enterprise Linux: CentOS 6.6およびRed Hat Enterprise Linux 6.6より前のバージョン

      • Debian: Debian 9より前のバージョン

      • Ubuntu: Ubuntu 16より前のバージョン

      • openSUSE: openSUSE 42より前のバージョン

      • SLES: SLES 11.4より前のバージョン

    1. 次のコマンドを実行して、インスタンスにCloud Assistant Agentがインストールされているかどうかを確認します。Cloud Assistant Agentがインストールされている場合は、Cloud Assistant Agentがecs_nvme_configプラグインを提供しているかどうかを確認します。

      acs-plugin-manager --list

      image

      • Cloud Assistant Agentの情報が返されない場合は、インスタンスにCloud Assistant Agentをインストールする必要があります。 Cloud Assistant Agentのインストール方法については、「Cloud Assistant Agentのインストール」をご参照ください。

      • Cloud Assistantプラグインのリストが返され、ecs_nvme_configプラグインが表示された場合は、次の手順に進みます。

    2. ecs_nvme_configプラグインを使用して、NVMe関連の設定を構成します。

      1. 次のコマンドを実行し、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;
      2. コマンド出力のエラーメッセージに基づいて、NVMeドライバと関連するパラメータを設定します。

        sudo acs-plugin-manager --exec --plugin ecs_nvme_config --params --fix
      3. NVMe関連の設定を設定した後、次のコマンドを実行してインスタンスを再起動します。

        sudo reboot
      4. インスタンスを再起動した後、次のコマンドを実行して、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での手動設定

    1. 次のコマンドを実行して、カーネルがNVMeドライバをロードしたかどうかを確認します。

      cat /boot/config-'uname -r' | grep -i nvme | grep -v "^#"

      image

      • CONFIG_BLK_DEV_NVME=yメッセージが返された場合、オペレーティングシステムはNVMeをサポートするインスタンスファミリーのインスタンスで起動できます。 この場合、ステップ3.dに進みます。

      • CONFIG_BLK_DEV_NVME=mメッセージが返された場合は、次の手順を順番に実行します。

    2. 次のコマンドを実行して、初期のRAM (Resource Access Management) ファイルシステム (initramfs) にNVMeドライバが含まれているかどうかを確認します。

      sudo lsinitrd /boot/initramfs-'uname -r'.img | grep -i nvme | awk '{print $NF}'

      image

      • 前の図に示すコマンド出力が返された場合、オペレーティングシステムはNVMeをサポートするインスタンスファミリーのインスタンスで起動できます。 この場合、ステップ3.dに進みます。

      • 前の図に示すコマンド出力が返されない場合は、次の手順を順番に実行します。

    3. 次のコマンドを順番に実行して、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ツールをインストールします。

    4. 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秒に設定します。

      1. 次のコマンドを実行してGRUBファイルを開きます。

        sudo vi /etc/default/grub
      2. Iキーを押して挿入モードに入ります。 GRUB_CMDLINE_LINUX= 行の最後に、nvme_core.io_timeoutパラメーターとnvme_core.admin_timeoutパラメーターを追加し、両方を4294967295に設定します。

        パラメーターの追加例を次の図に示します。

        image

        説明

        GRUBファイルに前述のパラメーター設定が既に含まれている場合は、パラメーターを再度追加する必要はありません。

      3. Escキーを押して挿入モードを終了します。 次に、:wqと入力し、enterキーを押してファイルを保存して閉じます。

    5. 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インスタンスのブートモードのベストプラクティス」をご参照ください。

    6. 次のコマンドをもう一度実行して、NVMe関連情報を確認します。

      sudo lsinitrd /boot/initramfs-'uname -r'.img | grep -i nvme | awk '{print $NF}'

      次のコマンド出力が返されると、設定は完了し、NVMeをサポートするインスタンスファミリーのインスタンスでオペレーティングシステムを起動できます。

      image

    UbuntuまたはDebianでの手動設定

    1. (オプション) 次のコマンドを実行して、initrdに含まれるNVMeドライバを表示します。

      lsinitramfs /boot/initrd.img-'uname -r' | grep -i nvme

      次のコマンド出力は、NVMeドライバがUbuntuオペレーティングシステムのinitrdにロードされていることを示しています。 image

    2. 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秒に設定します。

      1. 次のコマンドを実行して、/etc/default/grubファイルを開きます。

        sudo vi /etc/default/grub
      2. 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に設定します。

        次の図にパラメーターを示します。image

        説明

        GRUBファイルに前述のパラメーター設定が既に含まれている場合は、パラメーターを再度追加する必要はありません。

      3. Escキーを押して挿入モードを終了します。 次に、:wqと入力し、enterキーを押してファイルを保存して閉じます。

    3. 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インスタンスのブートモードのベストプラクティス」をご参照ください。

  4. 作成したECSインスタンスから新しいカスタムイメージを作成します。 新しいカスタムイメージにはNVMeドライバが含まれています。

    詳細については、「インスタンスからのカスタムイメージの作成」をご参照ください。

  5. 新しいカスタムイメージのNVMe DriveパラメーターをSupportedに設定します。

    詳細については、「イメージの属性とタグの変更」をご参照ください。

  6. (オプション) 作成したカスタムイメージを使用して、ビジネスを再デプロイします。 たとえば、カスタムイメージからECSインスタンスを作成できます。

    詳細については、「カスタムイメージを使用したインスタンスの作成」をご参照ください。 ECSインスタンスを作成するときに、NVMeをサポートするインスタンスタイプを選択します。

    説明

    ビジネスを再デプロイした後、リソースの無駄を防ぐために、古いカスタムイメージをできるだけ早く削除することをお勧めします。 詳細については、「カスタムイメージの削除」をご参照ください。

関連ドキュメント