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

:無効なio_timeoutパラメーターが原因でLinux ECSインスタンスのNVMeディスクが利用できない場合はどうすればよいですか。

最終更新日:Jan 23, 2025

このトピックでは、無効なio_timeoutパラメーターが原因でLinux Elastic Compute Service (ECS) インスタンス上の不揮発性メモリエクスプレス (NVMe) ディスクが利用できないという問題の原因と解決策について説明します。

問題の説明

Linux ECSインスタンスがNVMeディスクをシステムディスクとして使用する場合、インスタンスでのI/O読み取り /書き込み操作が遅くなります。 その結果、インスタンスのオペレーティングシステムまたはインスタンスでホストされているアプリケーションは、NVMeディスクでI/O読み取り /書き込み操作を実行できません。 NVMeディスク上のファイルシステムのステータスが読み取り /書き込みから読み取り専用に変更されます。 NVMeディスクでのその後の書き込み操作は失敗し、オペレーティングシステムとアプリケーションは期待どおりのサービスを提供できません。

説明

低速I/O読み取り /書き込みとは、ディスク上のI/O読み取り /書き込み操作が、予想よりも低いレートで実行されるか、または完了するまでに長時間を必要とするシナリオを指します。

原因

NVMeドライバーのio_timeoutパラメーターには、最大I/Oタイムアウト期間を指定します。 I/O操作のレイテンシがio_timeoutパラメーターの値を超えると、NVMeドライバーはI/O操作に失敗し、エラーを返します。 その結果、NVMeディスク上のファイルシステムのステータスが読み取り /書き込みから読み取り専用に変更される場合があります。 NVMeディスクのステータスが読み取り専用に変更された場合、その後のディスクへの書き込み操作は失敗し、インスタンスのオペレーティングシステムまたはインスタンスでホストされているアプリケーションは期待どおりのサービスを提供できません。

説明
  • ほとんどのLinuxディストリビューションでは、io_timeoutパラメーターはデフォルト値の30に設定されています。 単位は秒です。 NVMeディスクでのI/O操作のタイムアウトエラーを防ぐには、io_timeoutパラメーターをサポートされている最大値に設定します。 最近のカーネルバージョンでは、サポートされているio_timeoutパラメーターの最大値は4294967295です。 単位は秒です。 以前のカーネルバージョンでは、サポートされる最大値は255です。 単位は秒です。

  • NVMeドライバのカーネルモジュールは、カーネルのバージョンによって異なります。 NVMeドライバーには、nvme.koおよびnvme_core.koのカーネルモジュールが使用されます。 io_timeoutパラメーターのフルネームは、nvme.io_timeoutまたはnvme_core.io_timeoutです。

解決策

io_timeoutパラメーターを一時的に設定する

io_timeoutパラメーターを設定するには、次の手順を実行します。 io_timeoutパラメーターに指定する値は一時的です。 Linux ECSインスタンスを再起動するたびに、io_timeoutパラメーターをリセットする必要があります。

  1. Linux ECSインスタンスに接続します。

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

  2. io_timeoutパラメーターを含むカーネルモジュールのパスを確認します。

    • 次のコマンドを実行して、/sys/module/nvme_core/parameters/io_timeoutパスが存在するかどうかを確認します。 パスが存在する場合、io_timeoutパラメーターのフルネームはnvme_core.io_timeoutです。

      cat /sys/module/nvme_core/parameters/io_timeout
    • パスが存在しない場合は、次のコマンドを実行して、/sys/module/nvme/parameters/io_timeoutパスが存在するかどうかを確認します。 パスが存在する場合、io_timeoutパラメーターのフルネームはnvme.io_timeoutです。

      cat /sys/module/nvme/parameters/io_timeout
  3. 次のいずれかのコマンドを実行して、前の手順で取得したパスに4294967295を書き込みます。

    nvme.koカーネルモジュール

    sudo sh -c 'echo 4294967295 > /sys/module/nvme/parameters/io_timeout '

    nvme_core.koカーネルモジュール

    sudo sh -c 'echo 4294967295 > /sys/module/nvme_core/parameters/io_timeout '
    • コマンドが正常に実行され、エラーが返されない場合、io_timeoutパラメーターは4294967295に設定されます。

    • Numerical result out of rangeに似たエラーメッセージが返された場合は、この手順を繰り返してio_timeoutパラメーターを255に設定します。

io_timeoutパラメーターの設定

GRand Unified Bootloader (GRUB) 設定ファイルのio_timeoutパラメーターの値を変更するか、Cloud Assistantのecs_nvme_configプラグインを使用して、インスタンスオペレーティングシステムでNVMe関連の設定を設定できます。 詳細については、「」をご参照ください。カスタムイメージ用のNVMeドライバをインストールするにはどうすればよいですか? io_timeoutパラメーターに指定する値は永続的であり、インスタンスの起動などの要因の影響を受けません。